概要
gzip のような圧縮ツールが 言語モデル として使えるかを検証。 圧縮と予測 の理論的な等価性について解説。 DEFLATE アルゴリズムの仕組みとスコアリング手法を説明。 ビームサーチ による生成プロセスの工夫とその効果を紹介。 実験コードは GitHub で公開。
圧縮アルゴリズムによる言語モデリング
- ニューラルネットワーク を使わず、n-gramやgzipなどの 圧縮アルゴリズム で言語モデル構築を試みた事例
- 圧縮と予測の等価性 :あらゆる予測モデルは圧縮器であり、全ての圧縮アルゴリズムは予測モデルであるという理論
- gzip (DEFLATEアルゴリズム)は、直近32KiBのスライディングウィンドウ内で過去の一致を探し、繰り返し部分を効率的に圧縮
- 圧縮率が高い=モデルが「予測」した(=コーパスに似ている)というスコアリング
- 実際に tiny Shakespeare で試すと、完全な意味は通らないが、明らかにテキストの特徴を捉えている出力を生成
圧縮によるスコアリングと生成手法
- 圧縮器は「予測しやすい」データは少ないバイト数で表現し、「予測しにくい」データは多くのバイト数を必要とする
- 符号化に必要なビット数は $-\log_2 p$(pはモデルが割り当てた確率)で決まる
- gzip(context + candidate) の圧縮後サイズをスコアとし、サイズが小さいほど「より予測された」継続とみなす
- コーパスをウィンドウに読み込み、プロンプトに続く候補を圧縮してスコアリング
ビームサーチによる生成の工夫
- 1バイトごとに最良を選ぶ単純な方法では、gzipの圧縮長が整数単位でしか変化しないため、候補の差が埋もれやすい
- ビームサーチ を導入し、複数の候補を並行して評価しながら、最も圧縮率の高い継続を選択
- プロンプトを初期テキストとし、コーパスウィンドウ+直近の生成テキストをコンテキストとして利用
- コーパス中に現れる全てのバイトを次候補とし、圧縮後サイズでスコアリング
- 最良のビーム幅分だけ候補を残し、所定の長さまで繰り返す
- 最終的に最も圧縮率の高い継続を生成結果として採用
- DEFLATEは直近の一致に強く反応するため、スコアリング時は直近のテキストのみをコンテキストに残すことで、単純な繰り返しを防止
実験結果と考察
- 論文でも類似の試みがなされていたが、単純な生成では品質が低い
- ビームサーチ の導入により、生成品質が大きく向上
- 実装は 標準ライブラリのzlib で完結し、GitHubで公開
- gzip(またはDEFLATE)が持つ「予測モデルとしての本質」を体験的に理解できる実験
まとめ
- 圧縮アルゴリズムは、実質的に確率モデルとして機能
- 言語モデルの「予測力」と圧縮率は密接に関連
- ニューラルネットワークなしでも、圧縮器を工夫すれば「それらしい」テキスト生成が可能
- ただし、意味的な一貫性や流暢さはニューラルモデルに及ばない
- 圧縮と生成の理論的背景や実装の工夫を学べる好例
WinRARがOpenAIよりも利益が出てるってのは、偶然なのかな…?そんなわけないよね!