この前finetuningしたモデル「JPNsensei」に対して、モデルの変更、前処理、RAGとpromptハイパーパラメーターチューニングを追加しました。前より回答が結構良くなりましたので、昨日Huggingfaceに公開しました。
詳しい内容は以下となります。
①モデルの変更
ベースモデルをjapanese-stablelm-instruct-7bに変更しました。
②前処理
以下の4つのことを考えてデータの前処理を行いました。
1.データの分布をさらに確認して、token数を1024以内に限定しました。
2.データのカラムを確認したところ、質問と回答のスコアという項目(q_score,a_score)があったので、スコアが0点以下の質問または回答がある行を削除しました。
3.answerのデータを確認して気づいたこととして、質問に対して参考URLを直接投げるanswerが多くあります。URLは学習する価値ないので、httpがあるデータを削除した方がいいではないかと思いましたが、一応調べてみるとhttpがあるデータは12000件くらいありました。全部消すのが少しもったいないと思って、httpからスタートしたURLを削除+タグあり、削除後answerのtokenが50以下の行はそのまま消すようにしました。(もともとURLがついてなくても50token以下のデータを削除しないようにするため、タグをつけました。)
4.answerのスコア分布を確認したところ、50点以上の回答が2000件くらいがあって、そういう質が良い内容をデータ拡張した方がよいではないかと思いました。LLMに詳しい方に聞いてみたら、重複な内容を学習させたらあまりよくないみたいので、一旦やめました。
③RAG
RAGは特に中身をチューニングせず、langchainで直接繋がってやりました。
④promptハイパーパラメーターチューニング
回答の「安定性」と「重複しない」の2点を重視してチューニング(temperatureとrepetition_penalty周り)しました。
⑤精度検証(「"は"と"が"の違いを説明してください」という質問)
以下の7つパータンに分けて回答を確認してました。
rouge(自然言語処理でよく使われてる評価指標)でも精度を今後確認してみたいと考えています。
1.japanese-stablelm-instruct-7b のみ
2.japanese-stablelm-instruct-7b+finetuning(lossが0.9(4epoch段階))
3.japanese-stablelm-instruct-7b+finetuning(lossが0.9(4epoch段階))+promptハイパーパラメーターチューニング
4.japanese-stablelm-instruct-7b+finetuning(lossが0.6(7epoch段階))
5.japanese-stablelm-instruct-7b+finetuning(lossが0.6(7epoch段階))+promptハイパーパラメーターチューニング
6.japanese-stablelm-instruct-7b +RAG
7.japanese-stablelm-instruct-7b+finetuining(lossが0.6(7epoch段階))+promptハイパーパラメーターチューニング+RAG
結果としては5と7がよかったです。
5が分かりやすく説明できるようになりました。
7は5よりRAGを追加しましたが、回答が少し怪しいですね。(RAGのルールをもう少しチューニングすれば改善できると思います)
興味ある方試してみてください: