はじめに
BTMは大規模言語モデル(LLM)を効率的に訓練・推論する際の有効な手法の一つです。
学習用テキストを専門ごとにN分割
N個のモデルをそれぞれ独立に訓練
全てのモデルをマージして利用
というフローで学習・活用されます。「専門家を集めてAIを作る」というイメージがピッタリの手法です。
有名所だと、Mixture of Experts (MoE)が知られていますが、これはトークンレベルでモデルを入れ替えます。それに対し、BTMは文章レベルで入れ替えるのが大きな違いのようです。
MoEはハードウェアの特性を踏まえた高度なシステム設計が必要になってくる課題があります。
(基本的な背景情報は以下の記事を参照)
本記事では、BTMについて論文を参照しながら掘り下げて行きます。
1. 元祖BTM
LLMとしては以下のプレプリント(2022)が元祖のようです。
データセット分割
N個のモデルを訓練するにあたり、学習用のデータセットをN分割する必要があります。
似たようなジャンルのテキストを集めて分割すると良いとされています。
ランダム分割では精度が出ないようです。
この分割作業どどうやるかが、BTMの難しさのようです。
この論文では、人間が手作業でジャンルを決め、データセットを分割したようです。
分割したデータセットを各々の独立なモデルで訓練することで、学習が完了します。
モデル活用
モデルの利用段階では、訓練済みの各エキスパートモデルのどれを使うかが、推論性能に直結する大きな課題になります。
あまり深く理解できていないのですが、論文では二通りの方法が提案されていました。
1つ目は、単に出力の平均を利用する方法、
2つ目は、ターゲットとなるテキストと専門モデルの親和性を評価しながら、必要なものをピックアップする方法のようです。
以下、2つ目の手法をGPT-4で要約したものです。
実装
実装コードはGitHubで公開されています。
fairseqというモジュールを使っている点が気になります。
Fairseqは、seq2seqをターゲットにしたライブラリで、大規模言語モデルが流行る前によく使われていた印象です。
2. Cluster-BTM (C-BTM)
元祖BTMではデータセット分割を手動で行いましたが、C-BTMでは分割を自動化するようです。
参考記事も出ています。
データセット
手作業でデータを分割する代わりに、教師なし学習でテキストをクラスタリングするようです。
用語説明
単語レベルのクラスタリングですが、それでもわりとジャンル分けできるようです。
推論
ちゃんと読んでませんが、クラスタリングアルゴリズムを使って学習させるモデルを割り振るようです。
結果
MoEよりも良いそうです。
実装
metaseqというライブラリを使うようです。
このあたりのライブラリ、あまり馴染みがないので、勉強が必要そうです。
まとめと考察
BTMの勉強をしました。トークンごとにタスクの振り分けが必要なMoEに対し、テキストごとにエキスパートモデルを割り当てるBTMは、並列計算性に優れているようです。2つの論文を読みました。
テキスト分割の方法について
1つ目の論文では、手作業で学習用テキストを分割する手法、2つ目の論文では、単語の類似度をもとに文章を自動クラスタリングする手法が適用されました。
文章の分割法としては、自動クラスタリング(後者)の方がスマートな気もしますが、なんだかんだで手作業(前者)の方が、使い勝手が良いかもしれません。
自動分割の利点
マニュアル分割の利点
例えば、日英のテキストが混在する場合、単純な単語ベースのナイーブなクラスタリングだと、「日本語の法律文書と俳句」と「英語の法律文書と俳句」のような感じで、ジャンルではなく言語が優先されて分割される恐れがありそうです。
モデル統合(ルーティング)のアルゴリズムについて
実際の推論時に、どのエキスパートモデルを用いるかが課題になっています。
提案されていた手法は、、
各モデルの出力の平均を取る
各モデルとテキストの親和性を見る
教師なし学習(クラスタリング)を使う
のようでした。
普通のMoEでは、もっとニューラルネットなどを用いた、もっと高度なタスク振り分け(ルーティング)を行っている印象です。このあたりは、色々と改善の余地がありそうです。
実装コードについて
実装面では、どちらも著者がMetaということで、fairseq, metaseqという、自分にはあまり馴染みのなかったライブラリを使っている点が気になりました。