🦝

LLMのInstruction Tuning用教師データをTanuki-8x8Bで合成

2024/12/15に公開

LLMの教師データ

LLMをInstruction Tuningしたいのですが、なかなかライセンスや規約的に問題のない高品質な教師データが見つからなかったりします。

「教師データがなければ、教師データを作ればいいじゃない」

とは、かのマリー・アントワネットも言ったとか言わないとかとされています。

画像認識のときはUnityを使って教師データを生成したりしましたが、LLMの場合はテキストなので簡単と思いきや、やってみると質問と答えを延々と作り続けるのはかなり難しいです。クイズ王は偉大ですね。

それなら、それこそLLMに作らせれば良いじゃないかと思うのが人情というものです。実際そういう手法を取り扱った論文(Self-Instruct: Aligning Language Models with Self-Generated Instructions)もあったりします。

LLMの教師データの合成

じゃあ早速作っちゃおう!と言いたいところですが、例えばChatGPTの出力を、OpenAIに競合するモデルの学習に使うことはOpenAIの規約違反だったりと、なかなか世の中ままなりません。

というわけで、GPT-3.5相当の性能をもつというTanuki-8x8Bを使ってデータを合成してみます。
https://weblab.t.u-tokyo.ac.jp/news/2024-08-30/

データの作り方は、論文と似た要領で以下の図のようにベースとなるタスク(seed tasks)の指示と事例をもとに、新しい指示と事例を作るという感じです。


図はSelf-Instruct: Aligning Language Models with Self-Generated Instructionsより引用

ただ、論文の再現実装ではないので、色々と違うところ、簡略化しているところは多いです(最初に試したとき、論文知らずにやっていたので)。

以下Google Colabで実装しています。Google ColabのランタイムのタイプはA100を使用しています(課金しないと動かせないと思います)。以下のGoogle Colabノートブックを上から順に実行していけば、教示データとなるエクセルファイルが出来上がります。

Tanuki_data_synthesis_from_elyza_tasks_100.ipynb

ベースとなるタスクは、今回サンプルとしてELYZA-tasks-100を使用しています。

今回は触れませんが、データセットにはライセンスがあります。データセットのライセンスによっては、改変元となるデータセットのライセンスを継承する必要があったり、改変や営利利用ができないものがありますので注意してください。以下参考記事をあげます。結構複雑でケースによっては人によって解釈が分かれたりすることもあります。

https://zenn.dev/sanami/articles/37d0028142b0a6

作成したデータセットの例

ベースとなるタスクが以下の場合

Input
仕事の熱意を取り戻すためのアイデアを5つ挙げてください。

Output
1. 自分の仕事に対する興味を再発見するために、新しい技能や知識を学ぶこと。
2. カレッジやセミナーなどで講演を聴くことで、仕事に対する新しいアイデアや視点を得ること。
3. 仕事に対してストレスを感じている場合は、ストレスマネジメントのテクニックを学ぶこと。
4. 仕事以外の楽しいことをすることで、ストレスを発散すること。
5. 仕事に対して自己評価をすることで、自分がどのように進化しているのかを知ること。

合成されたデータ例は以下となります。

Input
リモートワークの生産性を向上させるためのヒントを5つ挙げてください。

Output
1. 専用の作業スペースを確保し、仕事とプライベートの境界を明確にすること。
2. タイムマネジメントを徹底し、ポモドーロ・テクニックなどの時間管理法を活用すること。
3. 定期的な休憩を取り入れ、集中力を維持すること。
4. コミュニケーションツールを活用して、チームメンバーとの連絡を円滑にすること。
5. 仕事の進捗を定期的に確認し、必要に応じてタスクの優先順位を見直すこと。

なかなかそれっぽいですね。

ただ、以下のようにハルシネーションがあったりもします(村上春樹先生は、2006年にノーベル文学賞をとっていないです)。

次の文章は正しいですか?
村上春樹はノーベル文学賞を受賞したことがある。

与えられた文章は正しいです。

村上春樹は2006年にノーベル文学賞を受賞しました。彼は日本を代表する作家の一人であり、その作品は世界中で広く読まれています。

その他、ベースとなる文章と全く同じ文章を生成してしまったりする例も多いです。このあたりは、論文を調べて、プロンプト含めて工夫することでもう少しよくなるとは思います。

人のチェックや修正は必要となりますが、人がゼロから作るよりはかなり楽なのではないかなと思います。

その他、以下のようにOllamaとOpen WebUIを使って、チャット形式で教師データを生成するのもありかもしれません。

https://zenn.dev/karaage0703/articles/c271ca65b91bdb

データセットの扱い

作成したデータセットは、HuggingFace Datasetライブラリを使うことで、Hugging Faceのデータセットを読み込んだり、様々な処理をしたりとLLMの学習や推論に都合よかったりします。

結局はテキストデータなので、エクセルと変換ができると、人間が修正しやすいです。変換するサンプルとなるノートブックは以下になります。

datasets_convert.ipynb

まとめ

LLMの教師データの合成方法に関してまとめてみました。色々試してみましたが、結局最後はエクセルで人が一つ一つ修正という地道な作業に行きつくことになり

「最先端のLLM開発に必要な重要ツールはエクセルだった」

という結論を実感しています(個人の感想で諸説あります)。

参考

https://zenn.dev/matsuolab/articles/34036f017fae9e

https://note.com/hatti8/n/n193430331561

https://note.com/hatti8/n/nb70175b906ed

https://arxiv.org/abs/2212.10560

https://www.docswell.com/s/KanHatakeyama/KEXE3Q-2024-10-12-131658

https://tech.preferred.jp/ja/blog/llm-synthetic-dataset-for-math/

https://note.com/npaka/n/n23b84c95faca

https://nikkie-ftnext.hatenablog.com/entry/llm-elyza-tasks-100-example-gemini-20-flash-exp

Discussion