【LLM論文を読む】Chat Vector:LLMに新たな言語での指示追従とアラインメントを付与するシンプルなアプローチ

  • 前回の記事につづき、「LightChatAssistant 2x7B」に高いチャット性能をもたらした要素について調べています。
  • 基本的には、1)ベースモデルとしての「ChatNTQ JA 7B」の日本語性能の高さ、2) MoEマージで総パラメータ数が増えることによる全般的な性能向上、3) 小説生成モデル「Antler-7B」とのマージによるモデル特長の相互補完、の3点でかなりの部分が説明できそうです。
  • 一方で、モデル作者のSdff-Ltbaさんはマージ前のモデルに対してChat Vectorという処理を施し、チャット能力を高めたと説明されています。よって、Chat Vectorがどの程度の性能向上に寄与しているのかもざっくり知りたい気がします。
  • さしあたって、そもそもChat Vectorとは何かについて簡単に予習しておきたいと思います。元のarXiv論文は、2023年10月に台湾の研究グループから投稿されています。

arxiv.org

要旨

近年、オープンソースの大規模言語モデル(LLM)の開発が急速に進んでいる。しかしながら、データの制約から、オープンソースのLLMの多くは主に英語に特化している。この問題に対処するため、我々はChat Vectorという概念を導入し、単純なモデル演算によって、事前学習された言語モデルに指示追従と人間の価値観のアラインメントを付与させる。Chat Vectorは、事前に訓練されたベースモデル(例えばLLaMA2)の重みから、対応するチャットモデル(例えばLLaMA2-chat)の重みを引くことで得られる。継続的に事前訓練されたモデルの重みにChat Vectorを追加するだけで、さらなる訓練を必要とせずに、新しい言語でのチャット機能をモデルに与えることができる。我々の実証的研究は、3つの異なる側面からChat Vectorの優れた有効性を実証している:すなわち、指示追従、毒性緩和、マルチターン対話である。さらに、本アプローチの適応性を示すために、様々な言語、ベースモデル、Chat Vectorを包含するように実験を拡張した。その結果、Chat Vectorのシンプルさ、有効性、適用範囲の広さが強調され、事前に学習された言語モデルにおいて会話機能を効率的に実現するための説得力のあるソリューションであることが分かった。

メモ

  • Sdff-Ltbaさんがモデルカードにリンクされているこちらの記事に、概要から手順までわかりやすく解説されていました。半月ほど前にかなり話題になっていたんですね。

qiita.com

  • 簡単に言うと「深層学習モデルの重みに対して足し算引き算が成り立つ」という前提から、英語チャットモデルの「チャット能力」に関するベクトルを取り出し、別の言語のチャットモデルに適用する、という手法だそうです。

ほかに元論文に目を通して気になった点も列挙します。

  • すでに「Task Vector」というアプローチがあり(微調整済みモデルの重みから事前学習済みモデルの重みを引き算して得る)、この研究ではこれを英語から別言語へのチャット能力転移に利用した。
  • Vicunaベンチマークで指示追従能力をテストし、以下のことが確認された。
    • llama2 → 継続事前学習 + Chat Vectorは、繁体中国語LLaMAとChineseLLaMAの両方において、llama2 → 継続事前学習 → ファインチューンと同等の結果を示した。
    • ファインチューンとChat Vectorは相補的な効果がある: FTとChat Vectorを一緒に行うことで、どちらか一方だけを行うよりも良いパフォーマンスが得られる。
    • llama2-chat → 継続事前学習 + FT はチャットの能力を失わせる:llama2 → 継続事前学習 → FT よりも性能が良いが、llama2 CP + Chat Vectorや llama2 → 継続事前学習 → FT + Chat Vectorよりも性能が悪い。これは、llama2-chat → 継続事前学習 + FTは情報損失を引き起こすことを示しており、また、Chat Vectorを使用することの重要性を示している。

まとめ

  • Chat Vectorは単体でも効果があるものの、ファインチューンと併用するほうがよいみたいです。「LightChatAssistant 2x7B」では、片方がチャットファインチューンモデルの「ChatNTQ JA 7B」です(もう片方は小説ファインチューンモデルの「Antler-7B」)。
  • ChatVectorを取り出す英語チャットモデルについて、元論文ではMistralモデルに関しては公式の「Mistral Instruct v0.2」を使っていて、これは「LightChatAssistant 2x7B」でも踏襲されています。
  • なお、チャットモデルをベースにしてChatVectorをかけると情報損失が起きるリスクがあるので、ベースにはあくまで共通のベースモデルを使うべきとしています。「LightChatAssistant 2x7B」ではおおもとの「Mistral-7B-v0.1」をベースに使っています。
  • ChatVectorの重みをどれらい強くかけるかはケースバイケースのようで(論文で使われているのは1.0と0.5)、1でかけると出力に英語が混ざったりするようです。「LightChatAssistant 2x7B」では0.8を採用しています。

ということで、次回はChatVectorを使って実際に「LightChatAssistant 2x7B」を再現してみたいと思います。