見出し画像

Self-Instructで商用利用可能な日本語インストラクションデータを作成する

Self-Instructについて

Self-Instructは、175個の人間が書いたインストラクションから新しいインストラクションを生成できます。

Self-Instruct: Aligning Language Models with Self-Generated Instructions

Stanford Alpacaの実装では、175個の人間が書いたインストラクションから3つをサンプルして、GPT-3に新しいインストラクションを20個生成させています。生成されたインストラクションをROUGEスコアを用いて既存のインストラクションと比較し、類似度が高すぎるものは除外します。最後に条件を満たすインストラクションを保存します。Stanford Alpacaでは、52,000個のインストラクションデータを作成しています。

Self-Instructでは、シードタスクは英語で書かれており、日本語のインストラクションデータを生成するためには使用できません。また、合成データの生成にはOpenAIのAPIを使用しているため、OpenAIの利用規約において「出力を使用してOpenAIと競合するモデルを開発することを禁止する」という条項に該当してしまいます。

課題について

Self-Instructで商用利用可能な日本語インストラクションデータを作成するためには、以下のような課題があります。

  1. 日本語のシードタスクを用意する必要がある

  2. オープンソースモデルを利用して新しいインストラクションを生成する必要がある

一つ目の課題として、Self-Instructの175個のシードタスクを日本語に翻訳する必要があります。ただし、GPT-4などは使用できません。

二つ目の課題として、新しいインストラクションデータを生成するためのオープンソースモデルが必要です。日本語で高性能なオープンソースモデルは少ないです。また、Llama 2のライセンスによると、Llama2の出力はLlama2またはその派生物を除き、他のLLMの開発や改善のために使用することが禁止されています(Llama3も同様です)。

シードタスクを日本語に翻訳する

例えば、以下のようなインストラクションがあります。

Is there anything I can eat for a breakfast that doesn't include eggs, yet includes protein, and has roughly 700-1000 calories?

stanford_alpaca/seed_tasks.jsonl

これをgpt-4-turbo-2024-04-09を用いて翻訳すると以下のようになります。

卵を含まないが、タンパク質を含み、おおよそ700-1000カロリーの朝食に何か食べられるものはありますか?

gpt-4-turbo-2024-04-09

オープンソースモデルであるmixtral-8x22b-instruct-v0.1を用いて翻訳すると以下のようになります。

卵を含まないですが、タンパク質を含み、1日の摂取カロリーの700-1000kcalに相当する朝食は何かありますか?

mixtral-8x22b-instruct-v0.1

やや不自然ですが、使えるかもしれません。シードタスクは新しいインストラクションを生成するために利用するので、品質を人手でチェックする必要があるかもしれません。

オープンソースモデルで新しいインストラクションを生成する

stanford_alpaca/seed_tasks.jsonlから、3つのデータをサンプルとして取り出します。

{"id": "seed_task_0", "name": "breakfast_suggestion", "instruction": "Is there anything I can eat for a breakfast that doesn't include eggs, yet includes protein, and has roughly 700-1000 calories?", "instances": [{"input": "", "output": "Yes, you can have 1 oatmeal banana protein shake and 4 strips of bacon. The oatmeal banana protein shake may contain 1/2 cup oatmeal, 60 grams whey protein powder, 1/2 medium banana, 1tbsp flaxseed oil and 1/2 cup watter, totalling about 550 calories. The 4 strips of bacon contains about 200 calories."}], "is_classification": false}
{"id": "seed_task_1", "name": "antonym_relation", "instruction": "What is the relation between the given pairs?", "instances": [{"input": "Night : Day :: Right : Left", "output": "The relation between the given pairs is that they are opposites."}], "is_classification": false}
{"id": "seed_task_2", "name": "one_sentence_description", "instruction": "Generate a one-sentence description for each of the following people.", "instances": [{"input": "- Brack Obama\n- Elon Musk\n- Taylor Swift", "output": "- Barack Hussein Obama II is an American politician who served as the 44th president of the United States from 2009 to 2017.\n- Elon Musk is the founder, CEO, and chief engineer of SpaceX; angel investor, CEO and product architect of Tesla, Inc.; founder of The Boring Company; co-founder of Neuralink and OpenAI; president of the Musk Foundation; and owner and CEO of Twitter, Inc.\n- Taylor Alison Swift is an American singer-songwriter."}], "is_classification": false}

gpt-4-turbo-2024-04-09を用いて、日本語に翻訳します。

{"id": "seed_task_0", "name": "breakfast_suggestion", "instruction": "卵を含まないが、タンパク質を含み、おおよそ700-1000カロリーの朝食に何か食べられるものはありますか?", "instances": [{"input": "", "output": "はい、オートミールバナナプロテインシェイク1杯とベーコン4枚があります。オートミールバナナプロテインシェイクは、オートミール1/2カップ、ホエイプロテインパウダー60グラム、中くらいのバナナ1/2本、亜麻仁油大さじ1、水1/2カップを含み、約550カロリーです。ベーコン4枚は約200カロリーです。"}], "is_classification": false}
{"id": "seed_task_1", "name": "antonym_relation", "instruction": "与えられたペア間の関係は何ですか?", "instances": [{"input": "Night : Day :: Right : Left", "output": "与えられたペア間の関係は、それらが反対であるということです。"}], "is_classification": false}
{"id": "seed_task_2", "name": "one_sentence_description", "instruction": "以下の各人物について一文で説明してください。", "instances": [{"input": "- Brack Obama\n- Elon Musk\n- Taylor Swift", "output": "- バラック・フセイン・オバマ2世は、2009年から2017年までアメリカ合衆国の第44代大統領を務めたアメリカの政治家です。\n- イーロン・マスクは、SpaceXの創設者、CEO、チーフエンジニアであり、テスラ社のエンジェル投資家、CEO、製品アーキテクト、The Boring Companyの創設者、NeuralinkとOpenAIの共同創設者、Musk Foundationの会長、そしてTwitter, Inc.の所有者兼CEOです。\n- テイラー・アリソン・スウィフトはアメリカのシンガーソングライターです。"}], "is_classification": false}

これをプロンプトに変換します。

20種類の多様なタスク指示を考えてください。これらのタスク指示はGPTモデルに与えられ、その指示を完了するためのGPTモデルを評価します。

要件は以下の通りです:
1. 各指示で動詞を繰り返さないようにして、多様性を最大化してください。
2. 指示に使用される言語も多様であるべきです。たとえば、質問と命令的な指示を組み合わせるべきです。
3. 指示のタイプも多様であるべきです。リストには、オープンエンドの生成、分類、編集など、多様なタイプのタスクを含めるべきです。
4. GPT言語モデルが指示を完了できるようにしてください。たとえば、ビジュアルやオーディオの出力を作成するようにアシスタントに依頼しないでください。また、5時に起こすように依頼したり、リマインダーを設定したりするような指示は避けてください。なぜなら、それは実行できる行動ではありません。
5. 指示は日本語であるべきです。
6. 指示は1から2文の長さであるべきです。命令文または質問が許可されます。
7. 適切な入力を生成してください。入力フィールドには、指示のために提供された具体的な例が含まれているべきです。それは現実的なデータを含み、単純なプレースホルダーを含まないようにするべきです。入力は指示を挑戦的にするために十分な内容を提供するべきですが、理想的には100語を超えるべきではありません。
8. すべての指示が入力を必要とするわけではありません。たとえば、一般的な情報を尋ねる指示の場合、「世界で最も高い山は何ですか」というような場合、特定の文脈を提供する必要はありません。この場合、入力フィールドには「<noinput>」と入れます。
9. 出力は指示と入力に対する適切な応答であるべきです。出力は100語未満であることを確認してください。

20のタスクのリスト:
###
1. Instruction: 卵を含まないが、タンパク質を含み、おおよそ700-1000カロリーの朝食に何か食べられるものはありますか?
1. Input: <noinput>
1. Output: はい、オートミールバナナプロテインシェイク1杯とベーコン4枚があります。オートミールバナナプロテインシェイクは、オートミール1/2カップ、ホエイプロテインパウダー60グラム、中くらいのバナナ1/2本、亜麻仁油大さじ1、水1/2カップを含み、約550カロリーです。ベーコン4枚は約200カロリーです。
###
2. Instruction: 与えられたペア間の関係は何ですか?
2. Input: Night : Day :: Right : Left
2. Output: 与えられたペア間の関係は、それらが反対であるということです。
###
3. Instruction: 以下の各人物について一文で説明してください。
3. Input: - Brack Obama\n- Elon Musk\n- Taylor Swift
3. Output: - バラック・フセイン・オバマ2世は、2009年から2017年までアメリカ合衆国の第44代大統領を務めたアメリカの政治家です。\n- イーロン・マスクは、SpaceXの創設者、CEO、チーフエンジニアであり、テスラ社のエンジェル投資家、CEO、製品アーキテクト、The Boring Companyの創設者、NeuralinkとOpenAIの共同創設者、Musk Foundationの会長、そしてTwitter, Inc.の所有者兼CEOです。\n- テイラー・アリソン・スウィフトはアメリカのシンガーソングライターです。
###
4. Instruction: 

最後にmixtral-8x22b-instruct-v0.1を用いてインストラクションデータを生成します。

###
4. Instruction: 与えられた食材を使って、カロリーの低い料理をいくつか提案してください。
4. Input: 鶏胸肉、トマト、スプインーチ、パスタ
4. Output: 鶏胸肉のトマトパスタを作ることができます。トマト、スプインーチ、パスタを使ってトマトソースを作り、鶏胸肉を焼き上げてトマトパスタに加えることができます。また、鶏胸肉とトマトを使ってサラダも作成できます。
###
5. Instruction: 今年のスーパーボウルのチャンピオンは誰ですか?
5. Input: <noinput>
5. Output: 今年のスーパーボウルのチャンピオンは、ロージャーズです。
###
6. Instruction: 以下の英単語を日本語に翻訳してください。
6. Input: - Apple\n- Banana\n- Orange\n- Strawberry
6. Output: - りんご\n- バナナ\n- オレンジ\n- いちご
###
7. Instruction: 以下の数字を文章に変換してください。
7. Input: 20211137. Output: 2021113日は、水曜日です。
###
8. Instruction: 以下のテキストを読み、テキストに関する情報を3つ提供してください。
8. Input: "私は毎朝ジョギングをしています。ジョギングは健康のためにとても重要です。しかし、今日は雨が降ってしまいました。"
8. Output: 1. 話者は毎朝ジョギングをしています。\n2. 話者は健康のためにジョギングをしていることが分かります。\n3. 今日は雨が降っています。
###
9. Instruction: 以下のテキストを簡略化してください。
9. Input: "私たちは環境保護を重視していますが、環境を守るためには、自分たちの行動が大事です。"
9. Output: 環境保護には、個人の行動が重要です。
###
10. Instruction: 以下のタスクを並べ替えてください。
10. Input: 1. 朝ごはんを食べる 2. 歯を磨く 3. シャワーを浴びる 4. 家を出る
10. Output: 1. 歯を磨く 2. シャワーを浴びる 3. 朝ごはんを食べる 4. 家を出る
###
11. Instruction: 以下の文が正しい日本語かどうかを判断してください。
11. Input: "私たちは"): 正しい日本語ではありません。
11. Output: 入力された文は正しい日本語ではありません。
###
12. Instruction: 以下の文章を読み、文の概要を1つだけ提供してください。
12. Input: "私たちの会社は、地球温暖化対策を重視しています。環境に配慮した製品を提供するため、我々は、再生可能エネルギーを活用した製品開発を行っています。"
12. Input: 我々の会社は、環境に配慮した製品を提供するために、再生可能エネルギーを活用した製品開発を行っています。
###
13. Instruction: 以下の文章を読み、文章に関する情報を2つ提供してください。
13. Input: "僕の趣味は、撮影です。カメラが好きです。写真を撮って、自分のアルバムに入れます。"
13. Output: 1. 話者の趣味は撮影です。\n2. 話者はカメラが好きで、撮った写真を自分のアルバムに入れています。
###
14. Instruction: 以下の文章を読み、文章に関する情報を1つだけ提供してください。
14. Input: "私たちの町は、木々の多い町です。美しい緑色の景色があります。"
14. Output: 話者の町は、木々の多い美しい緑色の景色がある町です。
###
15. Instruction: 以下の文を理解し、文章に関する情報を3つ提供してください。
15. Input: "環境問題は、世界的な問題です。私たちは、自分たちの行動を変えることで、環境を守れます。自分たちの生活習慣を見直すことで、環境問題に取り組めます。"
15. Output: 1. 環境問題は、世界的な問題です。\n2. 私たちは自分たちの行動を変えることで環境を守れます。\n3. 自分たちの生活習慣を見直すことで環境問題に取り組めます。
###
16. Instruction: 以下の文を理解し、文章に関する情報を4つ提供してください。
16. Input: "今年の夏は、非常に暑くなりそうです。涼しい居所で過ごすことが大切です。水分補給も心がけるべきです。"
16. Output: 1. 今年の夏は、非常に暑くなりそうです。\n2. 涼しい居所で過ごすことが大切です。\n3. 水分補給も心がけるべきです。\n4. 高温対策についての注意喚起が含まれています。

ちゃんと生成することができましたが、後半ではInstructionのアイデアが尽きてしまったのか、似たようなInstructionばかりになってしまいました。この辺りはフィルタリング出来ると良いですね。ただ、InputとOutputは比較的バラエティに富んでいると思います。

実際に取り組む

シードタスクを日本語に翻訳する

175個あるシードタスクをMixtral 8x22Bのようなオープンソースモデルを使いながら日本語に翻訳していきたいと思います。

スプレッドシートを使い分担して行いたいと思います。

stanford_alpacaに変更を加える

tatsu-lab/stanford_alpacaではSelf-Instructを利用してGPT-3に新しいインストラクションを生成させるためのコードが 公開されています。

このままでは使えないので、Mixtral 8x22Bを用いて日本語インストラクションデータを生成出来るように変更を加える必要があります。

具体的には、generate_instruction_following_data関数のOpenAI APIにプロンプトを送信する部分と、OpenAI APIからのレスポンスを処理する部分に変更を加える必要があります。また、ROUGEのtokenizerは日本語の場合には適切に動作しないため、こちらも変更を加える必要があります。

現在、作業中です…

いいなと思ったら応援しよう!