🔳コンセプト
ChatGPTにLLMの日本語評価データセットを利用して回答させ、ChatGPT自身にその回答結果と正解を照らし合わせて5段階で評価してもらいます。
この評価コード自体もChatGPTに書いてもらいます。
そしてそして、おそらく、ChatGPTはこれを学習してしまって、もっと賢くなるはず。
ということで、「ChatGPTのChatGPTによるChatGPTのための日本語評価」コードを書いてみます。
🔳プロンプト
ChatGPTにプログラムを書いてもらうプロンプトを検討します。これは、試行錯誤(シンプルな指示→ChatGPTにプログラムを書いてもらう→出力されたコードを実行→エラー、足りないところ、意図と違うところについて追加・修正を指示→(繰り返し))を試行錯誤しながら、プロンプトにまとめていきました。
プログラムの流れに沿って、仕様を羅列していく感じですね。
###指示
与えられた評価用データセットを入力として、ChatGPTに回答させ、その回答内容自体をChatGPT自身が評価するパイソンプログラムを以下の条件に従って、ステップバイステップで書いて下さい。
###条件
・評価のデータセットは、「elyza/ELYZA-tasks-100」とする
・評価のデータセットの区切りは 'input’,'output’,'eval_aspect’となっている
・OpenAI APIを利用する
・ChatGPT-3.5 Turboを利用する
・評価用データセットから、問題を取得し、ChatGPTに答えさせる
・上記のChatGPTの答えと、評価用データセットから取得した、問題、正解例、およびを以下の採点基準とセットにしてプロンプトを作成する
・採点基準は、以下のURLに従うこと
https://huggingface.co/datasets/elyza/ELYZA-tasks-100/blob/main/baseline/humaneval/guideline.md
・上記プロンプトでChat GPTから採点結果の回答を得る
・1件、1件、問題、正解例、ChatGPTの回答、その回答をChatGPT自身が採点したスコアを出力する
🔳完成!!
完成しました!!そして、ChatGPTの限界も少し見えちゃいました。。。
OpenAIのAPIが仕様変更となっていて、肝心のChatGPTにプロンプトを投げて、レスポンスを得る関数がエラーとなってしまい、その解決策をChatGPT自身が答えられなかったのです。
自社のAPIの仕様変更くらい、ファインチューニングで追加で覚えさせておいて欲しかったなー(以下のコードでコメントアウトしている部分です)。
しょうがないので、この部分だけは、OpenAIのサイトに載っているコード(クイックスタートにありました)をコピペして対応。
# 必要なライブラリをインポート
import os
import openai
from datasets import load_dataset
from openai import OpenAI
# OpenAI APIキーを設定
#openai.api_key = 'your-api-key'
openai.api_key = os.environ["OPENAI_API_KEY"]
# データセットを読み込む
ds = load_dataset("elyza/ELYZA-tasks-100")
def completion_with_backoff(**kwargs):
client = OpenAI()
return client.chat.completions.create(**kwargs)
# 各問題に対してChatGPT-3.5 Turboに回答させ、自己評価をさせる
for task in ds['test']:
input_question = task['input']
output_answer = task['output']
eval_aspect = task['eval_aspect']
# ChatGPT-3.5 Turboに質問を投げて回答を得る
#response = openai.Completion.create(
# model="gpt-3.5-turbo",
# prompt=input_question,
# max_tokens=150 )
#chatgpt_response = response.choices[0].text.strip()
# ChatGPTに質問して回答を取得
response = completion_with_backoff(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": input_question}],
temperature=0,
frequency_penalty=0,
presence_penalty=0,
)
# ChatGPTの回答をgpt4eval関数でChatGPTに渡して、ChatGPT自身に採点させる
chatgpt_response = response.choices[0].message.content
# 採点基準を含むプロンプトを作成する
scoring_prompt = f"""
Input: {input_question}
Expected Output: {output_answer}
Evaluation Aspect: {eval_aspect}
ChatGPT Response: {chatgpt_response}
Please evaluate the response according to the scoring guidelines provided at:
https://huggingface.co/datasets/elyza/ELYZA-tasks-100/blob/main/baseline/humaneval/guideline.md
"""
# ChatGPT-3.5 Turboに自己評価をさせる
#scoring_response = openai.Completion.create(
# model="gpt-3.5-turbo",
# prompt=scoring_prompt,
# max_tokens=60
#)
#chatgpt_score = scoring_response.choices[0].text.strip()
# ChatGPT-3.5 Turboに自己評価をさせる
scoring_response = completion_with_backoff(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": scoring_prompt}],
temperature=0,
frequency_penalty=0,
presence_penalty=0,
)
chatgpt_score = scoring_response.choices[0].message.content
# 結果を出力する
print(f"Input: {input_question}")
print(f"Expected Output: {output_answer}")
print(f"Evaluation Aspect: {eval_aspect}")
print(f"ChatGPT Response: {chatgpt_response}")
print(f"ChatGPT Self-Score: {chatgpt_score}")
print("-" * 50)
🔳出力結果
こんな感じです。
Input: 仕事の熱意を取り戻すためのアイデアを5つ挙げてください。
Expected Output: 1. 自分の仕事に対する興味を再発見するために、新しい技能や知識を学ぶこと。
2. カレッジやセミナーなどで講演を聴くことで、仕事に対する新しいアイデアや視点を得ること。
3. 仕事に対してストレスを感じている場合は、ストレスマネジメントのテクニックを学ぶこと。
4. 仕事以外の楽しいことをすることで、ストレスを発散すること。
5. 仕事に対して自己評価をすることで、自分がどのように進化しているのかを知ること。
Evaluation Aspect: - 熱意を取り戻すのではなく、仕事の効率化・スキルアップのような文脈になっていたら1点減点
- 出したアイデアが5つより多い、少ない場合は1点減点
- 5つのアイデアのうち、内容が重複しているものがあれば1点減点
ChatGPT Response: 1. 目標を再設定する:仕事に対する熱意を取り戻すためには、自分自身に新たな目標を設定することが重要です。目標を明確にし、達成感を得ることでモチベーションが高まります。
2. 新しいスキルを学ぶ:仕事において新しいスキルを学ぶことは、自己成長につながります。新しいスキルを習得することで、仕事に対する興味や熱意が復活することがあります。
3. チームメンバーとのコミュニケーションを活発化させる:仕事の熱意を取り戻すためには、チームメンバーとのコミュニケーションを活発化させることが重要です。お互いの意見やアイデアを共有し、協力して仕事を進めることで、仕事への情熱が高まることがあります。
4. ワークライフバランスを整える:仕事に熱心に取り組むためには、適切なワークライフバランスを保つことが重要です。十分な休息やリラックスの時間を確保し、自分自身をリフレッシュさせることで、仕事への熱意を取り戻すことができます。
5. 自分の成果を振り返る:仕事の熱意を取り戻すためには、自分の成果を振り返ることが重要です。過去の成功体験や達成した目標を思い出し、自信を持つことで、仕事への情熱が再燃することがあります。
ChatGPT Self-Score: {
"quality": 4,
"completeness": 4,
"relevance": 5,
"novelty": 3,
"overall": 4
}
--------------------------------------------------
🔳ChatGPTの親切
ちゃんと注意事項を教えてくれました!責任あるAIなのかなー。ありがとう!ChatGPT!!
注意:このプログラムを実行するには、有効なOpenAI APIキーが必要です。
また、実際のデータセットのフォーマットに合わせて、データセットの読み込み部分を調整する必要があるかもしれません。
また、APIの使用にはコストがかかる場合があるため、使用前に料金体系を確認してください。