ソフトウェア
GPT-3のExamples/Movie to Emojiを試してみた
フリーソフト・オープンソースを活用しよう。
GPT-3のExamples/Movie to Emojiを試してみた
GPT-3のExamples/Movie to Emojiを試してみた
2021/11/28
OpenAIの自然言語処理モデルGPT-3のExamples/Movie to Emojiを試してみました。
Movie to Emoji
debian:~$ python openai_examples_movie_to_emoji.py
("バックトゥーフューチャー: 👨👴🚗🕒\nバットマン: 🤵🦇\nトランスフォーマーズ: 🚗🤖\nワンダーウーマン: 👸🏻👸🏼👸🏽👸🏾👸🏿\nウィニー・ザ・プー: 🐻🐼🐻\nゴッドファーザー: 👨👩👧🕵🏻♂️👲💥\nスローンのゲーム: 🏹🗡🗡🏹\nスーパーマン:",)
💪🏻💪🏼💪🏽💪🏾💪🏿
スパイダーマン: 🕷🕸🕷
スパイダーマン2: 🕷🕸
debian:~$ python openai_examples_movie_to_emoji.py
("バックトゥーフューチャー: 👨👴🚗🕒\nバットマン: 🤵🦇\nトランスフォーマーズ: 🚗🤖\nワンダーウーマン: 👸🏻👸🏼👸🏽👸🏾👸🏿\nウィニー・ザ・プー: 🐻🐼🐻\nゴッドファーザー: 👨👩👧🕵🏻♂️👲💥\nスローンのゲーム: 🏹🗡🗡🏹\nスーパーマン:",)
{
"id": "cmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"object": "text_completion",
"created": xxxxxxxx,
"model": "davinci:2020-05-03",
"choices": [
{
"text": " 💪🏻💪🏼💪🏽💪🏾💪🏿\nスパイダーマン: 🕷🕸🕷\nスパイダーマン2: 🕷🕸",
"index": 0,
"logprobs": null,
"finish_reason": "length"
}
]
}
debian:~$
複数の対応する名詞と絵文字のサンプルを投げつつ、サンプルにない名詞を問うと対の意味を類推して対応する絵文字を表示するMovie to Emoji。
日本とタイトルが微妙に違うのもありますが、オリジナルを踏襲しました。
最後だけアレンジしてスパイダーマンではなく、スーパーマンとしてみたのですが、第2候補含む以降は、スパイダーマンになってますね。
尚、ミッキーマウスだとシルクハット、ドナルドダックだとクマの絵文字が出てきました...。
debian:~$ cat openai_examples_movie_to_emoji.py
import openai
import os
import json
openai.api_key = os.getenv("OPENAI_API_KEY")
#prompt="Back to Future: 👨👴🚗🕒\nBatman: 🤵🦇\nTransformers: 🚗🤖\nWonder Woman: 👸🏻👸🏼👸🏽👸🏾👸🏿\nWinnie the Pooh: 🐻🐼🐻\nThe Godfather: 👨👩👧🕵🏻♂️👲💥\nGame of Thrones: 🏹🗡🗡🏹\nSpider-Man:",
prompt="バックトゥーフューチャー: 👨👴🚗🕒\nバットマン: 🤵🦇\nトランスフォーマーズ: 🚗🤖\nワンダーウーマン: 👸🏻👸🏼👸🏽👸🏾👸🏿\nウィニー・ザ・プー: 🐻🐼🐻\nゴッドファーザー: 👨👩👧🕵🏻♂️👲💥\nスローンのゲーム: 🏹🗡🗡🏹\nスーパーマン:"
response = openai.Completion.create(
engine="davinci",
prompt=prompt,
temperature=0,
max_tokens=60,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=0.0,
stop=["\n"]
)
#print(prompt)
print(str(prompt))
print(" ")
print(response['choices'][0]['text'])
#print(str(response['choices'][0]['text']))
#print(json.dumps(response, ensure_ascii=False, indent=2))
debian:~$
ソースはこんな感じ、環境変数OPENAI_API_KEYに自分のAPIキーが入っている前提です。
そのままでは想定通り機能しないので一部オリジナルソースから変更しています。
print()、もしくは、json出力しないと実行しても何も表示されないので何れかを追加する必要があり、後者用にimport jsonを追加。
が、応答内容によっては、何れか一方では表示できないことがあり、他方を使用せざるを得ないこともあります。
表示できないのが、print文なら、response配列を文字列にキャストすれば、たいていは凌げますが。
応答文だけだとチャット状態にならず、問いかけ文も表示したいところ。
が、サンプル通りだとprintやjson形式で出力しようにも問いかけ用の変数promptがスコープの範囲になく、スコープに入るようPythonの場合だとインデント階層を相応に上げたところで変数が登場(変数宣言)するようにする必要があります。
また、promptの中身によっては、文字列にキャストしないとエラーとなるケースもありました。
関連リンク