Company Personification

ChatGPT
OpenAI API documentation

  • ChatGPT API가 공개되었습니다.
  • 사전 신청자를 받고 있긴 했지만 기습적으로 느껴질만큼 갑자기 공개했습니다.
  • API를 공개했기 때문에 다른 여러 기능과 연계기를 발휘하기 좋습니다.
  • 기존의 GPT API를 사용해 회사의 이미지를 의인화합니다.

1. 인물로 본 회사 이미지

연합뉴스: 인물로 본 6개 그룹 이미지

  • 가끔 언론에 이런 보도가 납니다.
  • 특정 집단을 대상으로 특정 회사에 대한 이미지를 조사한 후 인물로 표현합니다.
  • 직관적이기도 하지만 재미가 있어서 좋아하는 기사입니다.
  • ChatGPT한테 이걸 시키면 잘 할 것 같다는 생각이 들었습니다.
  • 그림으로 표현하는 능력이 없으니 그림은 DALL.E에게 그리도록 합니다.

2. ChatGPT를 통해 회사를 의인화해서 묘사하기

  • ChatGPT에게 회사 이름을 주고, 의인화해서 설명을 해보라면 잘 합니다.

  • 삼성전자가 사람으로 치면 어떤 사람인지 물어봤습니다.

  • 한국인이고, 중성이고, 확신감에 차있고 전문성이 있다고 합니다.


  • ChatGPT 사이트에 가서 물어볼 수도 있지만 API를 이용해보겠습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import openai
    from MyAPIKEY import OpenAI # openai API key를 미리 발급받아 저장했습니다.
    openai.api_key = OpenAI # API Key 입력

    # ChatGPT API 활용 : 회사를 의인화해서 정보 말하기.
    company = "Samsung Electronics"
    completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
    {"role": "user",
    "content": f"Answer me about the company, whose name is {company}, without using any other words. \
    What is its nationality? \
    Imagine the company as a person. \
    Is it male or female? What is its impression? How does it dress?"}
    ]
    )

    # ChatGPT 응답 출력
    answer = completion.choices[0].message
    answer
  • 실행 결과

    1
    2
    3
    4
     <OpenAIObject at 0x1fd3ca48a40> JSON: {
    "content": "\n\nNationality: South Korean\n\nImagined person: Gender-neutral \n\nImpression: Technologically advanced and innovative \n\nDressing style: Modern and trendy with a focus on functionality.",
    "role": "assistant"
    }
  • 웹과 완전 동일하지는 않지만 비슷한 형식의 답변이 나왔습니다.

  • 다음과 같이 답변에서 원하는 문장만 깔끔하게 뽑아낼 수 있습니다.

    1
    2
    prompt = dict(answer)["content"].lstrip("\n").replace("\n\n", ", ")
    prompt
  • 실행 결과

    1
    'Nationality: South Korean, Imagined person: Gender-neutral , Impression: Technologically advanced and innovative , Dressing style: Modern and trendy with a focus on functionality.'

3. DALL.E를 통해 그림으로 표현하기

  • 회사에 대한 이미지를 얻었으니 그림으로 그립니다.

  • 마찬가지로 OpenAI API를 사용합니다.

  • ChatGPT가 만든 prompt를 입력으로 넣고, 그 앞에 길에 서있는 사람의 몸통 사진이라는 뜻의 문구를 추가합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    response = openai.Image.create(
    prompt= "a photography of torso of a person, standing on the street: " + prompt,
    n=4,
    size="512x512"
    )
    images = response['data']
    images_url = [i["url"] for i in images]
    images_url
  • 실행 결과

    1
    2
    3
    4
    ['https://oaidalleapiprodscus.blob.core.windows.net/private/org-AhUkzJK2WZGMFoMyGMghYXRV/user-GJilwEnUIKmd9QOgEkYhUF46/img-wmfnBPTbuqfFVPWhBCgWAehQ.png?st=2023-03-09T13%3A45%3A16Z&se=2023-03-09T15%3A45%3A16Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-08T23%3A46%3A41Z&ske=2023-03-09T23%3A46%3A41Z&sks=b&skv=2021-08-06&sig=A9gkIRkfbORN06hfMsCAfIB6ZxDCyYg3PBGVhY9pjX4%3D',
    'https://oaidalleapiprodscus.blob.core.windows.net/private/org-AhUkzJK2WZGMFoMyGMghYXRV/user-GJilwEnUIKmd9QOgEkYhUF46/img-ILfQqDLOe9qezlAS4HNDYIb0.png?st=2023-03-09T13%3A45%3A16Z&se=2023-03-09T15%3A45%3A16Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-08T23%3A46%3A41Z&ske=2023-03-09T23%3A46%3A41Z&sks=b&skv=2021-08-06&sig=RSDcoiw3vqtHQTgXqEeQKBf2EOY9Zbx%2BCNrgcJetcFU%3D',
    'https://oaidalleapiprodscus.blob.core.windows.net/private/org-AhUkzJK2WZGMFoMyGMghYXRV/user-GJilwEnUIKmd9QOgEkYhUF46/img-wxblEkkn0ZZjmp3vxwA3Kso2.png?st=2023-03-09T13%3A45%3A16Z&se=2023-03-09T15%3A45%3A16Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-08T23%3A46%3A41Z&ske=2023-03-09T23%3A46%3A41Z&sks=b&skv=2021-08-06&sig=2pDH7f8ONdppBdPcEsQJcZ/qNt/jpmUrpZ9LVuLDzQw%3D',
    'https://oaidalleapiprodscus.blob.core.windows.net/private/org-AhUkzJK2WZGMFoMyGMghYXRV/user-GJilwEnUIKmd9QOgEkYhUF46/img-lfyMHLR93DZ8a0iOM9H268Jr.png?st=2023-03-09T13%3A45%3A16Z&se=2023-03-09T15%3A45%3A16Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-08T23%3A46%3A41Z&ske=2023-03-09T23%3A46%3A41Z&sks=b&skv=2021-08-06&sig=UJIty7F3F7wDiFhOLpMewwXjzw4K9M3zocJlGuHiwso%3D']
  • 아주 긴 URL이 나왔습니다. 긁어다 인터넷 주소창에 붙이면 그림이 보입니다.

  • 이 그림을 받아다 모아서 파일로 저장합니다.

  • urllibnumpy, PIL을 사용해 주소를 가져와 Matplotlib으로 표현합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    %matplotlib inline

    import urllib
    import numpy as np
    import PIL
    import matplotlib.pyplot as plt
    plt.rcParams['font.family']='NanumGothic'
    plt.rcParams['axes.unicode_minus'] = False

    imgs = [np.array(PIL.Image.open(urllib.request.urlopen(url))) for url in images_url]

    fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(6, 6), gridspec_kw={"hspace":0, "wspace":0})
    axs = axes.ravel()
    for ax, img in zip(axs, imgs):
    ax.imshow(img)
    ax.axis(False)

    fig.suptitle(f"{company}", fontsize="x-large", fontweight="bold")
    fig.savefig(f"imgs_{company}.png")


4. 회사 이름을 입력받아 그림으로 출력

  • ChatGPT는 회사 이름에서 회사의 인상을 도출했고

  • DALL.E는 회사의 인상을 그림으로 표현했습니다.

  • 이제 둘을 합칩니다.

  • 먼저 ChatGPT 활용 부분을 함수로 만들어 잘 동작하는지 확인합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    def tell_me_about(company):
    completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
    {"role": "user",
    "content": f"Answer me about the company, whose name is {company}, without using any other words. \
    What is its nationality? \
    Imagine the company as a person. \
    Is it male or female? What is its impression? How does it dress?"}
    ]
    )
    answer = completion.choices[0].message
    prompt = dict(answer)["content"].lstrip("\n").replace("\n\n", ", ")
    return prompt

    prompt = tell_me_about("LG Chemistry")
    prompt
  • 실행 결과

    1
    'This company is from South Korea. As a person, LG Chemistry would be considered gender-neutral. Its impression would be innovative and tech-savvy. In terms of dressing, it would likely wear modern, professional attire.'
  • 잘 됩니다.

  • 이번엔 DALL.E를 사용해 설명을 그림으로 변환합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    def draw_about(prompt, company):
    response = openai.Image.create(
    prompt= "a photography of torso of a person, standing on the street: " + prompt,
    n=4,
    size="512x512"
    )
    images = response['data']
    images_url = [i["url"] for i in images]

    imgs = [np.array(PIL.Image.open(urllib.request.urlopen(url))) for url in images_url]

    fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(6, 6), gridspec_kw={"hspace":0, "wspace":0})
    axs = axes.ravel()
    for ax, img in zip(axs, imgs):
    ax.imshow(img)
    ax.axis(False)

    fig.suptitle(f"{company}", fontsize="x-large", fontweight="bold")
    fig.savefig(f"imgs_{company.replace(' ', '_')}.png")
    return fig

    fig = draw_about("LG Chemistry")


  • 그리고 두 함수를 합칩니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def tell_and_draw(company):
    prompt = tell_me_about(company)
    fig = draw_about(company)

    print(f"# Name: {company}")
    print(f"# {prompt}")
    return prompt, fig

    prompt, fig = tell_and_draw("TSMC")
  • 실행 결과
    1
    2
     # Name: TSMC
    # Taiwanese. , The company is an entity and therefore does not have a gender or dress style.

5. DeepL로 묘사 부분 번역

  • 나름 재밌게 돌아가는데 설명을 읽기 귀찮습니다.
  • 외국어는 모국어보다 불편하거든요.
  • 번역기를 붙입니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    from MyAPIKEY import RapidAPI
    import requests

    # DeepL 사용 번역
    def deepl(text, RapidAPI=RapidAPI, src="auto", dest="ko"):
    url = "https://deepl-translator.p.rapidapi.com/translate"

    payload = {
    "text": text,
    "source": src,
    "target": dest
    }
    headers = {
    "content-type": "application/json",
    "X-RapidAPI-Key": RapidAPI,
    "X-RapidAPI-Host": "deepl-translator.p.rapidapi.com"
    }
    response = requests.request("POST", url, json=payload, headers=headers)
    translated = response.json()["text"]
    return translated

    # DeelL 포함 함수 재정의
    def tell_and_draw(company):
    prompt = tell_me_about(company)
    fig = draw_about(company)

    print(f"# Name: {company}")
    print(f"# {deepl(prompt)}")
    return prompt, fig

    prompt, fig = tell_and_draw("IBM")
  • 실행 결과 : 영문을 모르겠지만 IBM 묘사가 유달리 짧습니다.
    1
    2
    # Name: IBM
    # IBM은 컴퓨터 하드웨어, 미들웨어 및 소프트웨어를 설계하고 판매하는 다국적 기업입니다.

  • 하나를 더 해봅니다.
    1
    prompt, fig = tell_and_draw("Toyota")
  • 실행 결과
    1
    2
     # Name: Toyota
    # 국적: 일본어, 의인화: 도요타는 품질과 신뢰성을 중시하는 근면하고 혁신적인 개인입니다. , 성별: 중립 , 인상: 도요타는 자동차 산업의 리더로 간주되며 첨단 기술과 친환경으로 존경 받고 있습니다. , 복장: 기업 이미지에 걸맞게 깔끔하고 전문적인 외모에 스마트한 정장 차림을 주로 합니다.

6. 결론

  • 길지 않은 코드이지만 ChatGPT + DALL.E + DeepL을 묶었습니다.
  • 단순해보이지만 세 개의 API를 묶은 컴비네이션입니다.
  • API를 활용하면 여러 기능을 레고 조립하듯 마음껏 엮을 수 있습니다.
  • 마음껏 사용하시기 바랍니다.

6. 마음껏 사용하기

Apple


Tesla


Facebook


McDonalds


YouTube


OpenAI


  • # Name: Amazon
    • # 국적: 미국, 의인화: 성별: 중립. 인상: 혁신적이고, 기술에 정통함. 복장: 모던하고 캐주얼하면서도 전문적인 복장
  • # Name: Microsoft
    • # 국적: 미국, 의인화: 마이크로소프트는 고도로 분석적이고 혁신적인 기술에 정통한 개인으로 묘사됩니다., 성별: N/A(마이크로소프트는 회사이기 때문에 성별이 없음), 인상: 소프트웨어, 하드웨어 및 클라우드 서비스 분야의 리더로서 기술 업계에서 높은 존경과 인정을 받고 있습니다., 복장: N/A(Microsoft는 회사이기 때문에 복장은 없지만 제품과 로고는 세련되고 현대적인 스타일을 나타냅니다).
  • # Name: Google
    • (설명이 전혀 없음)



도움이 되셨나요? 카페인을 투입하시면 다음 포스팅으로 변환됩니다

Share