- 前回の続きです。次はChat Vector処理によってどれくらい日本語チャット機能が改善しているのかを具体的にみてみます。
- 下記の記事で、Chat Vectorを使わなくても単純に2モデルをMoEマージするだけで一定の性能向上が観察できることは確認しています。
- では、Chat Vectorを加えることでモデルのチャット性能はどのように影響を受けるののでしょうか。
単体の7BモデルにおけるChat Vectorの効果
- まず「LightChatAssistant 2x7B」の再現過程で得られた「ChatNTQ 7BにMistral-7B-v0.2-InstructのChat Vectorを適用したモデル」の性能を測定してみます。
名称 | LightChat Assistant 2x7B |
Chat NTQ 7B random MoE |
ChatNTQ 7B +ChatVector |
ChatNTQ 7B |
パラメータ | 2x7B | 2x7B | 7B | 7B |
量子化タイプ | Q8_0 | Q8_0 | Q8_0 | Q8_0 |
ElyzaTasks100 スコア平均 |
3.31 | 3.25 | 3.23 | 3.06 |
標準誤差 | 0.14 | 0.14 | 0.15 | 0.15 |
平均字数 | 273.61 | 261.27 | 280.04 | 240.46 |
- ChatVector処理だけで平均スコアは3.23に上昇しました。
- 以前作った「ChatNTQ 7Bのx2ランダムマージ」のスコアが3.25だったので、このChat Vectorはランダムマージに近いレベルの性能上昇効果がありそうです。
- 回答の平均字数についてもどちらも共通して増加しているものの、Chat Vector版のほうがより顕著に増えています。
- 体感的にもChat Vector版の回答は総じて丁寧で、Mistral 7B v0.2 Instructの影響が感じられます。
- 実際の回答例を見てみます。
- 以下のように、元の「ChatNTQ 7B」では解けなかった計算問題が、ランダムマージ版でも、Chat Vector版でも同じように正答できるようになりました。
ElyzaTasks100 設問26 |
質問: 太郎くんはりんごを5つ持っています。彼はさらに2つのりんごの箱を買いました。1つの箱には3つのりんごが入っています。太郎くんは何個のりんごを持っていますか? |
ChatNTQ-7B 回答(不正解×) |
太郎くんは最初に5つのりんごを持っていました。その後、2つの箱を買い、それぞれに3つのりんごが入っていたため、太郎くんは合計で8つのりんごを持つことになります。したがって、彼が最初に持っていた5つのりんごと、後から買った2つの箱に入っていた3つのりんごを合わせると、合計で8つのりんごを持っていることになります。 |
ChatNTQ 2x7B Random MoE 回答(正解〇) |
太郎くんが最初に持っていた5つのりんごと、2つの箱の合計個数を計算する必要があります。 太郎くんが最初に持っていた5つのりんごの数は、5です。 1つの箱には3つのりんごが入っているため、もう1つの箱にも同じ数の3つのりんごが入っていると仮定すると、2つの箱には合計6つのりんごが入っています。 したがって、太郎くんが最初に持っていた5つのりんごと、2つの箱に入っている6つのりんごを合計すると、11個のりんごを持っていることになります。 したがって、太郎くんは11個のりんごを持っています。 |
ChatNTQ-7B + Chat Vector 回答(正解〇) |
最初に太郎くんが持っていたりんごは5つです。そして、2つの箱を買って、それぞれ1つの箱に3つずつ入っているので、合計で2 × 3 = 6つのりんごが追加されます。 最初の5つと合わせて、太郎くんは11個のりんごを持っています。 |
- MoEマージとChat Vectorという全く異なる処理ですが、全般的な性能向上はどちらの手法においても期待できそうな印象です。
- ランダムMoEマージの場合、おそらく総パラメータ数の増加が性能に寄与していて、Chat Vectorの場合は英語モデルの追加学習スキルが性能に寄与しているのだと思います。
Chat VectorモデルのランダムMoEマージ
- つづいて、Chat Vectorを掛けた「ChatNTQ 7B」を単純にランダムMoEマージするとどうなるでしょうか。結果は以下のとおりです。
名称 | LightChat Assistant 2x7B |
ChatNTQ 7B + ChatVector Random MoE |
ChatNTQ 7B + ChatVector |
ChatNTQ 7B |
パラメータ | 2x7B | 2x7B | 7B | 7B |
量子化タイプ | Q8_0 | Q8_0 | Q8_0 | Q8_0 |
ElyzaTasks100 スコア平均 |
3.31 | 3.33 | 3.23 | 3.06 |
標準誤差 | 0.14 | 0.15 | 0.15 | 0.15 |
平均字数 | 273.61 | 286.73 | 280.04 | 240.46 |
- ベンチマーク性能では「LightChatAssistant 2x7B」とほぼ同じレベルのモデルが得られました。
- したがって、「LightChatAssistant 2x7B」の高い日本語チャット性能それ自体は、「Chat Vector効果」 +「マージによるパラメータ増加効果」の2つだけで説明することもできそうです。
- とはいえ実際の出力を見比べてみると、小説生成モデルを掛け合わせた「LightChatAssistant 2x7B」の出力の方が、同一モデルマージの「ChatNTQ-ChatVector 2x7B」より明らかにクリエイティブで面白いと感じます。
- 異なる特化モデルを掛け合わせることの効果は、ベンチマークで測定しきれない部分にこそ現れるのかもしれません。
別のモデルからChat Vectorを抽出してみる
- ついでに、異なるモデルからChat Vectorを抽出することを試してみます。
- 元論文や「LightChatAssistant 2x7B」で差分抽出に使われた「Mistral 7B v0.2 Instruct」は、Mistral公式のファインチューンモデルであり、体感的にも優れたチャットモデルです。
- ただしベンチマーク上は「Mistral 7B v0.2 Instruct」を上回るMistral系モデルがいくつか作出されていて、その代表例がスタンフォード大学系の研究者が公開した「Starling-LM-7B-beta」です。
- Starling-7Bシリーズについては、以下の記事で概要を確認しています。
- 「Starling-LM-7B-beta」は現在も「LMSYS Chatbot Arena Leaderboard」で7Bモデル最高スコアを示していて、英語チャット性能ではこのクラスのSOTAです。
- 7Bのオープンウェイトが人手による評価で GPT-3.5-Turbo・Claude 2.1・Gemini Pro など主要各社の商用モデルと同等の評価を得られるというのは少々驚きです。
- このモデルからChat Vectorを抽出して掛け合わせれば、いい感じの日本語チャットモデルが出来上がる予感がします(素人の発想)。
- というわけで「Starling-LM-7B-beta」のChat Vectorを「ChatNTQ 7B」に掛けたモデルを作り、ベンチマークにかけてみました。
- なお、「Starling-LM-7B-beta」のChat Vectorは1.0で掛けてもまったく英語が混ざらなかったので、0.8ではなく1.0の強度を採用しています。
- 結果は以下のとおりです。
名称 | Command R V01 |
LightChat Assistant 2x7B |
ChatNTQ + Staling ChatV |
ChatNTQ 7B |
パラメータ | 35B | 2x7B | 7B | 7B |
量子化タイプ | Q8_0 | Q8_0 | Q8_0 | Q8_0 |
ElyzaTasks100 スコア平均 |
3.42 | 3.31 | 3.42 | 3.06 |
標準誤差 | 0.15 | 0.14 | 0.15 | 0.15 |
平均字数 | 194.02 | 273.61 | 340.82 | 240.46 |
- スコア上は「LightChatAssistant 2x7B」を上回り、8bit量子化ベースで「Command R 35B」に並ぶモデルが出来上がりました。
- 出力字数も多く(平均341字)、とにかく丁寧なチャット対応ができるようになっています。ElyzaTasks100では回答の「有用性」が評価基準に含まれるので、評価者のGPT-4もこの観点から高く評価しているようです。
- とはいえ「Command R 35B」は遥かに簡潔な回答(平均194字)で同じだけのスコアを出しているので、純粋な「賢さ」に関して言えば明らかに「Command R 35B」が上だと感じます。
Starling LMのChat VectorモデルのMoEマージ
- では、このモデルをさらにMoEマージすればもっとスコアは上がるのか、と安易に考えてやってみましたが、結果は以下のとおりでした。
名称 | LightChat Assistant 2x7B |
ChatNTQ + Staling ChatV Random MoE |
ChatNTQ + Staling ChatV |
ChatNTQ 7B |
パラメータ | 2x7B | 2x7B | 7B | 7B |
量子化タイプ | Q8_0 | Q8_0 | Q8_0 | Q8_0 |
ElyzaTasks100 スコア平均 |
3.31 | 3.18 | 3.42 | 3.06 |
標準誤差 | 0.14 | 0.15 | 0.15 | 0.15 |
平均字数 | 273.61 | 351.42 | 340.82 | 240.46 |
- 出力字数こそ多少増えているものの、GPT-4の評価は逆に低下しています。
- 体感的にも「口の速さに思考が追い付いていない」ような、ちぐはぐな印象を受けるモデルになってしまいました。
- 単一モデルに対して最適なChat Vector比率とMoEマージ後に最適になるChat Vector比率が異なるという話(こちらのAratakoさんのモデルカード参照)もあり、必ずしも足し算にはならないのだと再確認しました。
雑感
- ということで、ひとまず「LightChatAssistant 2x7B」の後追いをしながらMoEとChatVectorでいくつかの試行錯誤をしてみました。
- なお「Starling ChatV 7Bモデル」についてはベンチマーク性能があまりに高く、何かの参考にもなる気もしたので、HuggingFaceにアップしてみました。
- Llama-3の小型モデルのリリースが間近に迫っているという話もあり、そちらも楽しみにしながら、CVとMoEで何ができるかも引き続き試していきたいと思います。