https://arxiv.org/abs/2310.06201
Introduction
LLMの回答を音声合成して発声したいが、内容や文脈や解答のガイドラインを踏まえて声にしたい。しかし、現状ではLLMへの指示が多すぎて、プロンプトが長くそれに応じてお金がどんどんかかる。
しかし、すでにLLMが知っている知識についてプロンプトに入れなくていい。これをうまいこと残す/消すを考えて、トークンの圧縮を考えたい。

LLM自身に、知っている知識の部分をPromptから削除させることができる。そして、そうやって洗練させたプロンプトを末永く使っていくことによって、(最初のpruningでお金がかかっても)ゆくゆくはToken数が減って全体的に節約できる。
Self-Information
一連の事象が与えられたときに時刻で起きる確率が低いほど、自己情報量が増える。ちなみに事故情報量は加算してもいい。
ここで、がトークンだと考えると、自己情報量が高いトークンだけ与えたくないですか?
だが、このままではまずい。現在のLLMのTokenizerは、irrelevantなどをir/rele/vantのように分割させてTokenにしている。恣意的に消すと、そもそもこの単語をを認識できなくなり、つらい。そこで、Lexical Unitという複数のTokenをまとめて残すなら残す、削除するなら削除する塊をかんがえる。
Method
自己情報量の計算は、LLMが各単語の条件付きの生成確率がわかっているのであれば、そのまま自己情報量を計算できて、それで低い値を持つデータを消せばいい。
条件付の生成確率自体は、Transformerが前のTokenを受けて、与えられたTokenの出力確率をモデルとして出力する以上、簡単に得られる。
どのようにLexical Unitを作るか
ひとまとまりで削除か残すかの単位となるLexical Unitはどう作るか?Natural Language Toolkitを使うことで実現できる。Lexical Unitの自己情報量は、Tokenの自己情報量は加算できることから、単純に足せばよい。
そして、これの自己情報量のが多い順から残していくことになる。
実際実験で57.2%のTokenだけ残るみたいなことに。
Experiments
- だが残念なことに、冗長だと思われるものを削除したら、意外に性能も下がっちゃう。
Arxivの論文での削除の一例↓。濃い赤ほど情報量が濃い。

