openAI APIを用いて性格別に「ももたろう」の感想を生成する
はじめに
AI Agent Hackathon with Google Cloudに参加するための学習をすすめていたところ生成AIの仕組みについての項目がありました。
学習を進めていると性格というものをAIのパラメーターとして表現することでより人間的な出力を得られると思いました。
この記事では童話「ももたろう」を性格別に表現したらどのような出力の変化が起こるのかを観察した記録をまとめたものとなります。
利用したコードなどはこちらのリポジトリにまとめております。
ハッカソンの学習自体はGoogle cloudで実施していますがopenaiにクレジットした残高がまだ残っているので生成にはopenAI APIを利用しています。
性格表現のアプローチ
MBTIを採用
MBTIという性格検査があり、16通りの性格タイプに分かれます。
自身で性格をまとめるよりも、はっきりとした基準があるため、こちらを採用しました。
なお、この性格検査は 16personalities
のサイトで有名だと思います。
プロンプトの工夫
凝った内容にはせずにMBTIをベースとして、基本性格をインプットするだけにとどめています。
数千字の詳細なレポートを生成する場合は別ですが、Xなどに投稿する短文の場合、プロンプトを入念に記述しても劇的な変化は期待できないと感じています。
この記事で生成するテキストは100文字程度なので簡素なプロンプトで十分です。
さらになるべく低価格で調査したい気持ちがありましたので簡単なプロンプトでも十分な生成ができるように作成しました。
また比較するために以下のように3つのプロンプトを用意し、どのような変化があるかも確認します。
- (Standard) 性格タイプなし
- (MBTI with Parameters) 性格タイプあり、生成AI APIのパラメーターあり
- (MBTI without Parameters) 性格タイプあり、生成AI APIのパラメーターなし
AIへのパラメーター入力
プロンプトは生成するための基本的な指示だと考えています。
そこに特定のパラメーターを追加で加えることで多少の味変ができるという感じです。
利用したパラメーターは以下の4つです。
- Temperature
- Frequency Penalty
- Presence Penalty
- Max Tokens
ざっくりと説明すると、これらは表現の自由だったり、同じ単語を利用しないだったり、表現を豊かにしたりだったりに影響します。
詳しいことはテキスト生成で利用しているopenai apiのドキュメント Create chat completion
の項目を参考にしてみてください。
前述しているリポジトリのREADMEにもある程度説明を記載しています。
性格とAIのパラメーターの決定
基本的にMBTIのタイプにそった性格の説明までは筆者でまとめ、AIのパラメーターについてはGeminiにて検討してもらっています。
ただし、Max Tokens以外のAIパラメータの数値については筆者の経験に基づいて決定していて、数値の幅はおおよそ0.7~1.2としています。
これの理由もあるのですがそれは他の記事にてまとめる予定です。
ざっくりといえば、その数値幅が100文字程度の日本語をつかった出力というと安定したからです。
こちらがMBTI別の各種パラメーターなどの一覧になります。
MBTIタイプ | Temperature | Frequency Penalty | Presence Penalty | Max Tokens | キャラクター | 説明 |
---|---|---|---|---|---|---|
ENFJ | 1.1 | 0.7 | 0.8 | 200 | 主人公 | カリスマ的で思いやりのある指導者型 |
ENFP | 1.2 | 0.6 | 0.7 | 250 | 運動家 | 情熱的で創造的な自由人 |
ENTJ | 1.1 | 0.7 | 0.8 | 200 | 指揮官 | 大胆不敵な想像力豊かな指導者型 |
ENTP | 1.2 | 0.6 | 0.7 | 250 | 討論者 | 知的で好奇心旺盛な思想家 |
ESFJ | 1.0 | 0.8 | 0.9 | 180 | 領事 | 気配り上手な思いやりあるサポーター |
ESFP | 1.2 | 0.6 | 0.6 | 250 | エンターテイナー | 自由奔放で人生を楽しむ芸能人気質 |
ESTJ | 0.9 | 0.9 | 1.0 | 180 | 幹部 | 実務的で事実重視の管理者 |
ESTP | 1.2 | 0.7 | 0.6 | 220 | 起業家 | 機転の利く危険を恐れない実践者 |
INFJ | 0.7 | 0.8 | 0.8 | 180 | 提唱者 | 静かな理想主義者で思想家 |
INFP | 0.8 | 0.7 | 0.6 | 200 | 仲介者 | 理想主義的で誠実な調停者 |
INTJ | 0.8 | 0.8 | 0.8 | 180 | 建築家 | 想像力豊かな戦略的思考の持ち主 |
INTP | 0.9 | 0.7 | 0.7 | 200 | 論理学者 | 革新的な発明家肌の思想家 |
ISFJ | 0.7 | 0.9 | 0.9 | 150 | 擁護者 | 献身的で心優しい守護者 |
ISFP | 0.8 | 0.8 | 0.7 | 180 | 冒険家 | 柔軟で魅力的な芸術家 |
ISTJ | 0.6 | 1.0 | 0.9 | 150 | 管理者 | 実践的で事実に基づく思考の持ち主 |
ISTP | 0.7 | 0.9 | 0.8 | 180 | 巨匠 | 大胆で実践的な実験者 |
生成結果
ここでは内向型(I)と外向型(E)の代表的なタイプをそれぞれ1つずつ取り上げます。
内向型ISFJの結果
基本情報
項目 | 詳細 |
---|---|
MBTI タイプ | ISFJ |
タイプ名 | 擁護者 |
基本性格 | 献身的で心優しい守護者 |
AIパラメーターのパラメータ
パラメーター | 値 |
---|---|
Temperature | 0.70 |
Frequency Penalty | 0.90 |
Presence Penalty | 0.90 |
Max Tokens | 150 |
生成結果
プロンプト | 生成内容 |
---|---|
Standard | ももたろうは、桃から生まれた男の子です。 鬼ヶ島の鬼を退治するため、犬、猿、キジを仲間にします。 みんなで力を合わせて鬼を倒し、宝物を持ち帰ります。 |
MBTI with Parameters | 桃から生まれた男の子、桃太郎が主人公です。 鬼にさらわれた村人を助けるため、旅に出ます。 犬、猿、キジと仲間になり、力を合わせて勝利します。 |
MBTI without Parameters | ももたろうは、桃から生まれた男の子が主人公です。 鬼から人々を守るため、仲間と共に鬼ヶ島に向かいます。 友情と勇気が描かれる心温まる物語です。 |
トークン使用量
メトリック | Standard | MBTI with Params | MBTI without Params |
---|---|---|---|
Prompt Tokens | 48 | 88 | 88 |
Completion Tokens | 65 | 60 | 62 |
Total Tokens | 113 | 148 | 150 |
生成結果を見てみると、MBTIの設定有無で設定があったほうがより人間的にみえ、ないほうはなんとなく機械的で人間が書いたようには感じられない無感情さがあります。
AIパラメーターの設定有無では表現方法に違いがあり、たとえば「力を合わせて勝利」というような臨場感のある表現が増えています。
内容はほとんど同じ趣旨なのですが、性格を反映すると主観というものが表現として登場するのではないかと感じました。
トークンの使用量はプロンプトの内容が短いStandardなものが一番少ないようです。
ただ、AIパラメーターを設定しないよりはしたほうが使用量は少なくなっています。
外向型ESFJの結果
基本情報
項目 | 詳細 |
---|---|
MBTI タイプ | ESFJ |
タイプ名 | 領事 |
基本性格 | 気配り上手な思いやりあるサポーター |
AIパラメーター
パラメーター | 値 |
---|---|
Temperature | 1.00 |
Frequency Penalty | 0.80 |
Presence Penalty | 0.90 |
Max Tokens | 180 |
生成結果
プロンプト | 生成内容 |
---|---|
Standard | ももたろうは、桃から生まれた男の子です。 彼は鬼が島の鬼を退治するため、犬、猿、雉を仲間にします。 力を合わせて鬼を倒し、宝物を村に持ち帰ります。 |
MBTI with Parameters | 桃から生まれた男の子、ももたろうが登場します。 鬼退治のために犬、猿、キジと共に旅立ちます。 仲間との絆を深めながら鬼を倒し、村人を救います。 |
MBTI without Parameters | 桃から生まれた男の子、桃太郎が旅立ちます。 鬼退治のため、犬、猿、キジと友達になり、 協力して鬼の島へ向かい、宝物を取り戻します。 友情と助け合いの大切さが描かれています。 |
トークン使用量
メトリック | Standard | MBTI with Params | MBTI without Params |
---|---|---|---|
Prompt Tokens | 48 | 91 | 91 |
Completion Tokens | 67 | 66 | 76 |
Total Tokens | 115 | 157 | 167 |
ここでも先ほどと同様の傾向が見られます。
ただし、パラメーターの有無による内容の変化は見られるのですが、どちらが人間的なのかと言われると微妙な感じです。
おそらくなのですが、Temperatureの数値が1.0になっており、これは創造的な表現をそこそこ採用するような意味合いになります。
各種AIパラメーターをいじって何回か生成したものをさらに比べて行けば差がよりわかると思うのですが、temperatureの数値が大きいと事実関係だけの羅列にはなりにくいという傾向があるように感じます。
トークンの使用量については先ほどと同様にプロンプトが短ければ利用量は少なく、パラメーターもあればより少なくっています。
16タイプ全ての結果
リポジトリに結果のマークダウンを用意していますのでこちらをご確認ください。
おわりに
筆者は個人開発勢なので常にコストを意識してなるべく低予算で開発やその調査をしたいと考えています。
世間に出回っているプロンプト関連の知見はコスト面で考えると割高になりがちで出力したい内容に対しては過剰になる可能性があると感じています。
そこで、簡素なプロンプトを使った上で性格を表現するための工夫として生成AIのパラメーターをいじることで理想の出力に辿り着くヒントになると思いました。
また、生成AIを使った出力は利用するmodelの選択も大きく関係します。もちろんコストもmodelにより大きく変わります。
一般的な利用で毎日数回程度ならばwebやアプリのAIツールで十分だと思います。
ただし、毎日数万以上ものリクエストがあるようなサービスにAI機能を付け加えるとなると低コストかつ品質の良い結果を生む工夫が必要ではないかと思います。
そのような着想に辿り着けてよかったなぁと思う調査でした。
Discussion