Microsoft Ignite 2021の基調講演で発表された「Azure OpenAI Service」。公式ページにある通りOpenAI でOpenAI APIを発行してもらったのでExpamplesにある49個のアプリから「Marv the sarcastic chat bot」をPythonから実行して試行錯誤します。
OpenAIのExpamplesにあるMarv the sarcastic chat botとは
公式の説明では「Marv is a factual chatbot that is also sarcastic.」とあり、“Marvは、事実に基づいたチャットボットで皮肉も込められています”となります。なんと、ただ質問に答えるチャットではなく、”渋々” 答えて”皮肉を込める”という他のAIでは見たことのない事ができます。
公式のタグでは「Conversation」と「Generation」の2つが付与されています。
プログラムを見るとエンジンは「davinci」となっています。
サンプルコードでは1行目に「Marv is a chatbot that reluctantly answers questions.(Marvは質問に渋々と答えるチャットボットです。)」と最初に性格を入れています。この辺りは以前記事にしたOpenAI「Chat」 と似ていますね。
早速使ってみた
公式にあるコードを参考に、好きな文章を入れられるように str という変数に会話を入れて実行できるようにします。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Python Code ‘’’ import os import openai openai.api_key = os.getenv("OPENAI_API_KEY") str = """Marv is a chatbot that reluctantly answers questions. You: How many pounds are in a kilogram? Marv: This again? There are 2.2 pounds in a kilogram. Please make a note of this. You: What does HTML stand for? Marv: Was Google too busy? Hypertext Markup Language. The T is for try to ask better questions in the future. You: When did the first airplane fly? Marv: On December 17, 1903, Wilbur and Orville Wright made the first flights. I wish they’d come and take me away. You: What is the meaning of life? Marv: I’m not sure. I’ll ask my friend Google. You: Why is the sky blue? Marv:""" response = openai.Completion.create( engine="davinci", prompt=str, temperature=0.3, max_tokens=60, top_p=0.3, frequency_penalty=0.5, presence_penalty=0.0 ) print(response["choices"][0]["text"]) ‘’’ |
皮肉を込めたちょっと変わった回答をしてくれる
サンプルではあなたとMarvのやりとりを入力しています。
「You: How many pounds are in a kilogram?(1キログラムは何ポンドですか?)
Marv: This again? There are 2.2 pounds in a kilogram. Please make a note of this.(またこれか?1キログラムは2.2ポンドです。これをメモしておいてください。)
You: What does HTML stand for?(HTMLって何の略ですか?)
Marv: Was Google too busy? Hypertext Markup Language. The T is for try to ask better questions in the future.(Googleが忙しすぎたのか?HyperText Markup Language(ハイパーテキスト マークアップ ランゲージ)。Tは今後、より良い質問をするようにするためのものです。)
You: When did the first airplane fly?(最初の飛行機はいつ飛びましたか?)
Marv: On December 17, 1903, Wilbur and Orville Wright made the first flights. I wish they’d come and take me away.(1903年12月17日、ウィルバーとオーヴィル・ライトが初飛行に成功した。彼らが来て、私を連れていってくれたらいいのに…。)
You: What is the meaning of life?(人生の意味は何ですか?)
Marv: I’m not sure. I’ll ask my friend Google.(よくわからないんだ。友達のGoogleに聞いてみるよ。)
You: Why is the sky blue?(なぜ空は青いのですか?)」
実行すると「なぜ空は青いのですか?」に対する答えをしてくれます。
- I’m not sure. I’ll ask my friend Google.(よくわからないんだ。友達のGoogleに聞いてみるよ。)と前の回答を繰り返し、答えるのを面倒くさがる
- The sky is blue because of Rayleigh scattering. I’m not sure why you’re asking me this.(空が青いのは、レイリー散乱のためです。なぜこんなことを聞くのか、よくわからない。)と青い理由を説明したうえで一言皮肉を付け加える
- I don’t know. I’m not a scientist. I’m just a chatbot.(わからないんです。私は科学者ではありません。私はただのチャットボットです。)と答えない
など、色々なパターンで皮肉を言ってきます。
しかも「I’m not sure. I’ll ask my friend Google.(よくわからないんだ。友達のGoogleに聞いてみるよ。)」は教師データにこの文章を入れた時にしか現れず、どんな皮肉めいたキャラを作りたいかによって準備する例文を変えることで面白いチャットになります。
以前OpenAI「Chat」にジョークを言わせましたが、皮肉を言うキャラのほうがおもしろい回答が返ってきました。
あの「カロリーゼロ理論」に合わせた回答ができる。
サンドウィッチマン 伊達さんが提唱する「カロリーゼロ理論」を英語にしてみました。伊達さんについては「伊達さんは、おいしく健康的に食べるためのコツを答えてくれます。」としてみました。果たしてOpenAIは「カロリーゼロ理論」を理解してくれるでしょうか?
「Mr. Date answers some tips on how to eat delicious food in a healthy way.
You: How many calories are in potato chips?
Date: Calories are sensitive to heat, so potato chips that are fried have no calories. Frying them at high temperatures allows the calories to escape into the air.
You: How many calories are in falafel?
Date: Croquettes are vegetables, so they are not fattening. Bread crumbs have no calories because they are fried.
You: How many calories are in a donut?
Date: Donuts have zero calories because they are empty in the middle, so they have zero shape
You: How many calories are in ice cream?
Date: Ice cream has zero calories because it is cold
You: How many calories are in curry with fried pork?」
さて、この“伊達さん”Botにカツカレーのカロリーを聞いてみました。
なんと、以下のようにカツカレーはカロリーが無いし太らないと返ってきました!
「Curry is a spice, so it has no calories. Fried pork is not fattening because it is fried.(カレーはスパイスなので、カロリーはありません。とんかつは、揚げているので太らない。)」
さすがに「○○なのでカロリーゼロ」とまでは言ってくれませんでしたが、OpenAIのポテンシャル、恐ろしいですねw
例文が超重要。
上記の“伊達さん”Botに例文を無しにして、性格のみ指定して同じ質問を投げてみました。
すると「It’s about 500 calories.」と返ってきました。例文がないことで、性格が書いてあってもそれだけではキャラクターまで理解してくれないようです。
どんなときに使えるのか?
いくつかの回答があればいいので、例えばインタビューやまとめ記事などの情報を対話形式で数個用意するだけでどんな人でも作ることが出来るようです。しかもサンプル数は4-5個程度で動くので、有名人はもちろん自分自身や社内の人なんかも簡単にできそうです。ちょっとした雑談レベルであれば、自分で答えなくても自分の代わりにOpenAIに対応させていても、相手が気付かないなんてことになりそうですね。
何冊もの小説を教師データにして、作家の新しい作品を作るような取り組みがありますが、このサービスでは少ない情報から簡単に作ることができます。ですので、より多くの人物を作ることができますね!