Zenn
🧠

User-LLM(PRELUDEフレームワークとCIPHERアルゴリズム)の機能と活用

に公開

User-LLMとは

https://research.google/blog/user-llm-efficient-llm-contextualization-with-user-embeddings/

User-LLMとは、ユーザー自身の編集(フィードバック)から学習して出力をユーザーの好みに合わせて最適化するためのLLMエージェント手法です。

ユーザーの思考や嗜好をLLMに取り入れたい。ノイズが増えたり、他の話題で忘却せずに、長期記憶として残したい。を解決するアプローチだと思いました。

下の図は、USER-LLM がすべてのシーケンス長でテキスト プロンプト ベースラインを一貫して上回っていることを示しています。重要なのは、テキスト プロンプト ベースラインで観察されたパフォーマンスの低下とは対照的に、USER-LLM はシーケンス長が長くなるにつれてパフォーマンスが向上することです。この矛盾は、広範な入力コンテキストを処理する際の LLM の固有の制限に起因する可能性があります。シーケンスが長くなるにつれて、データの多様性と潜在的なノイズの増加により、テキスト プロンプト アプローチの有効性が低下します。

こちらの記事を参考にしています。
https://note.com/ainest/n/nfbe7505e6b65

User-LLM(PRELUDE)の概要と目的

ユーザーがLLMエージェントの出力を編集する際に現れる「潜在的な好み(latent preference)」を推測し、それを次の応答生成に反映するPRELUDE(PREference Learning from User’s Direct Edits)というフレームワークによって実現されます。

https://github.com/gao-g/prelude

このフレームワーク上で実装されたアルゴリズムがCIPHER(Consolidates Induced Preferences based on Historical Edits with Retrieval)です。

PRELUDEの基本的なアイデアは、ユーザーがエージェントの回答を手直しした履歴(編集内容)を活用し、ユーザーの潜在的な嗜好をテキストで表現した記述として学習することにあります。

例えば、ユーザーが「箇条書き」での出力を好むなら、エージェントの出力を箇条書きに編集するでしょう。その編集履歴から「このユーザーは箇条書きのフォーマットを好む」といった記述を導き出し、以降の出力生成時にプロンプトへ反映します。このようにユーザーごとに異なる好みを動的に学習し、出力をパーソナライズすることで、ユーザーの編集負担を時間とともに減らしていくことが可能になります。

従来のRLHF(人間のフィードバックによる強化学習)のような手法では、明示的な比較評価フィードバックの収集にコストがかかりました。しかしPRELUDEではユーザーが自然に行う編集そのものを学習信号として利用するため、追加の負担なくエージェントをユーザーに寄り添わせることができます。

さらに本手法ではモデルのファインチューニングを行わずに、プロンプトを調整するポリシー(方針)を学習するため、多数のユーザーにスケールさせやすく安全性や汎用性能を維持できる利点があります。

学習されたユーザーの嗜好は自然言語テキストで表現されるため解釈可能性が高く、ユーザー自身がその内容を確認・修正することも可能で透明性が向上します。

加えて、文脈に依存して変化する嗜好にも対応できるよう設計されており、状況ごとに適切なスタイルやトーンを学習・適用できる点も特徴です。

PRELUDEフレームワークのアーキテクチャ

PRELUDEフレームワークは、LLMエージェントにユーザーの好みを学習させる一連のインタラクティブなプロセスを定義しています

  1. エージェントが応答を生成する(ユーザーからのプロンプトやコンテキストに基づく)
  2. ユーザーがその応答を編集する(自分の好みや必要に合わせて手直しする)
  3. エージェントが編集内容を分析し、ユーザーの潜在的な好みを推測する
  4. 推測した好みを反映した応答を次回生成する(以降のラウンドで活用)

このサイクルにより、エージェントはまるでユーザーから間接的に指導を受ける生徒のように、使えば使うほどユーザーの好みに適応していきます。

CIPHERアルゴリズムの特徴と学習方法

PRELUDEの概念を具体的に実装したのがCIPHERアルゴリズムです。
CIPHERはリトリーバル(検索)強化されたシンプルかつ効果的な学習アルゴリズムで、以下のような手順でユーザー嗜好を学習・適用します。

  1. 文脈ベクトル化と類似検索:まず、各ラウンドのコンテキスト(ユーザーからの入力や状況)を埋め込みベクトルに変換します。

これにより過去のコンテキストとの類似度を計算し、「過去にどのようなケースが現在の状況に近いか」を検索できるようにします。実装ではBERTやMPNetといったモデルでコンテキストをベクトル表現し、履歴から上位kk件の類似コンテキストを取得します。

  1. 潜在的嗜好の推論(LPI):ユーザーがエージェントの出力を編集した場合、その出力と編集後テキストの差分から、LLMを用いて編集を最もよく説明するユーザー嗜好をテキストとして推論します。

例えば出力に箇条書きが追加されたなら「出力を箇条書き形式にすることを好む」といった嗜好記述が得られます。この処理をLatent Preference Induction (LPI) ステップと呼び、編集が行われた場合に嗜好記述を生成し、履歴の「嗜好履歴」リストに保存します。なお、編集が行われなかった場合(ユーザーが出力に満足しそのまま使用した場合)は、新たな嗜好を推論せず既存の嗜好を維持します(ゼロ編集検出に基づく判断)。

  1. 履歴からの嗜好検索と集約:新たな入力コンテキストに対してエージェントが応答を生成する際、先ほどの類似コンテキスト検索によって得られた過去の類似ケース上位kk件に注目します。それらのケースで推論・蓄積されていたユーザー嗜好記述(履歴からのインデュースド嗜好)を集め、総合的な嗜好プロンプトを構築します。

    簡単に言えば、「過去に似た状況ではユーザーは○○を好んだ」という情報を複数参照し、現在の文脈に合いそうな好みをまとめて追加プロンプトとして与えるのです。

  2. 好み反映プロンプトによる応答生成:最後に、上記で得た集約嗜好を現在のコンテキストとともにLLMに入力し、好みに沿った応答yty_tを生成します。こうして出力された応答はユーザーの潜在嗜好を反映しているため、従来よりもユーザーの期待に沿ったものになります。

もしこの応答にもユーザーが編集を加えれば、再びステップ2に戻って嗜好履歴を更新し、次のターンに活かします。この継続学習により使えば使うほどユーザーの編集箇所が減っていき、最終的には編集不要な状態を目指します。

活用

「ユーザーの編集を取り込む」が、テキストの編集はなかなか難しいと思ったので、
他のユーザー操作(特に思考を記録できるようなUIだったら・・)を記憶する。

「潜在的嗜好の抽出(LPI)」は嗜好だけでなく、思考まで抽出する方法がないかなと。
また、リストでテキストで履歴を保持するだけでなく、テキスト以外の情報もタスクとセットで保持しておきたい。

User-LLMのコンテキストが増えても精度が落ちないは良いけど、コールドスタート問題はあると思うので、タスクや組織ごとにある程度テンプレートのリストを作成する。

上記のような点を改善するといろんなタスクで応用できそうだなと思いました。

所感

LLMのPersonalize利用のフレームワークとして1年前に出てきた内容ですが、最近のAgentパターンと組み合わせて、強力なエージェントができそうな気がしました。

ヘッドウォータース

Discussion

ログインするとコメントできます