HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

Jev風モデルのリバースエンジニアリング

Reverse-engineered Jev-like model (github.com)

8 pointsby rochansinha2 コメント

要約

このリポジトリは、変化するテキストオプションのリストから1つを選択する、Jev風のモデルのスターター実装です。TypeSafeの商用モデルJevに触発されていますが、独立した設計です。このモデルは、単語ごとに回答を生成するのではなく、1回のパスで確率を計算するため、高速な処理が可能です。Doomやチェスなどのデモ、インストール方法、データ形式、クイックスタート、カスタムデータや事前学習済みエンコーダーの使用方法などが詳細に説明されています。

全文翻訳

Jev風モデルのトレーニング 小さなモデルをトレーニングして、変化するテキストオプションのリストの中から選択させます。Jev風モデルは、テキストとN個のテキストオプションのリストを受け取り、各オプションの確率を返します。これは、単語ごとに回答を生成するのではなく、1回のパスで行われます。JevはTypeSafeのこの種のタスク向けの商用モデルですが、TypeSafeはその設計を公開していません。このリポジトリは、同じ入力と出力形状を持つ独立したスターターモデルです。 デモ 同じオプションアテンションヘッドが、画像パッチからコントローラーボタンをスコアリングできます。この10秒間のフィルムは、選択された2つの5秒間のウィンドウを結合したものです。最初のウィンドウでは7つのDoomボタンでのライブで致命的な戦闘、次にチェスコントローラーが5つのキーを使って移動し、プレイする様子が映し出されます。図は、各決定に使用されるテンソルを示しています。Doomウィンドウは提供された共同チェックポイントから取得され、10回の記録されたエピソード全体で平均0.60キルと-97.50の報酬を達成しました。チェスウィンドウは、より強力なチェス専用チェックポイントから取得され、ランダムなプレイヤーに対して50回のサンプリングゲームで4勝、46引き分け、0敗を記録しましたが、Stockfishレベル0に対しては0勝、2引き分け、48敗でした。ウィンドウはアクティビティのために選択されており、典型的なプレイや能力の主張ではありません。 ゲームの追加機能をインストールし、リリースされた共同チェックポイントから新しい640x480のDoomトレースを記録します。 ``` pip install -e '.[games]' python examples/doom/play.py examples/checkpoints/joint-imitation.pt --episodes 10 --game-seconds 35.3 --device cpu --capture-resolution 640x480 --output runs/doom.mp4 --trace runs/doom-trace.json ``` 同じ視覚レイアウトでトレースをレンダリングします。これは、作者所有のサウンドトラックソースがリポジトリの一部ではないため、サイレントフィルムとして書き出されます。 ``` (cd examples/film && npm install && npx playwright install chromium) examples/film/make-film.sh runs/doom-trace.json runs/doom-film.mp4 10 ``` リリースには、Doomの例、チェスの例、単一ゲームのチェックポイント、および共有12オプションのチェックポイントが含まれています。どちらのゲームもjevlike.visionからビジュアルスコアラーをインポートしており、どちらの例にも2番目のモデルコピーはありません。 アーキテクチャ 各オプションはクエリベクトルになります。これは、そのテキストを表す短い数値リストです。クエリはコンテキストトークンにアテンションウェイトを割り当てます。これらのウェイトは、そのオプションのコンテキストベクトルを1つ作成します。共有ドット積は、各オプションとコンテキストのペアを1つのスコアに変換します。スコアを合計1になる確率に変換するソフトマックス関数がオプション全体で実行されます。デフォルトのエンコーダーは、バイト埋め込みをゼロから学習します。エンコーダーは、テキストをベクトルに変換する部分です。オプションのHugging Faceパスは、凍結された事前学習済みエンコーダーを使用します。このエンコーダーは、既存の重みが固定されたまま、小さなスコアラーが学習します。 データ形式 1行に1つのJSONオブジェクトを使用します。 ```json {"context":"The customer needs a refund.","options":["refund","sales","technical support"],"label":0} ``` labelは、正しいオプションのゼロベースのインデックスです。各行は異なる数のオプションを持つことができ、最小値は2です。 クイックスタート リポジトリのルートからこれらのコマンドを実行します。ローカルの合成データを生成し、それをトレーニングし、保存されたモデルを評価し、新しいメニューを1つスコアリングします。 ``` uv venv source .venv/bin/activate uv pip install -e '.[dev]' jevlike-data synthetic --output data/synthetic jevlike-train data/synthetic/train.jsonl \ --validation data/synthetic/validation.jsonl \ --output runs/synthetic.pt jevlike-eval runs/synthetic.pt data/synthetic/test.jsonl jevlike-predict runs/synthetic.pt \ --context "Choose the exact badge amber badger. Badge: amber badger." --option "azure crane" --option "amber badger" --option "gold heron" ``` 評価では、トップ1精度(正しい最初の選択肢の割合)が表示されます。トップ3精度は、上位3つのスコアの中に正解が含まれる割合です。期待されるキャリブレーション誤差は、信頼度と観測された精度を比較します。コマンドは、シャッフルされたコンテキスト制御も出力します。これは、各メニューに間違ったコンテキストをペアリングするものです。有用なモデルはこの制御を上回るはずです。 独自のデータを使用する 上記形式で、トレーニング、検証、テスト用のJSONLファイルをエクスポートします。予測時にモデルが表示するすべてのオプションを各行に含めてください。関連するレコードを一緒に分割します。たとえば、1人の顧客または1つのターゲットページに関するすべてのレコードを1つの分割に含めます。これにより、ほぼ重複するデータがテストセットに漏洩するのを防ぎます。 トレーニングファイルと検証ファイルを使用してjevlike-trainを実行します。保持されたテストファイルでjevlike-evalを1回実行します。保持されたファイルとは、トレーニングまたはモデル選択のために使用されなかったファイルのことです。 デフォルトのバイトエンコーダーは、コンテキストを192バイト、各オプションを32バイトに切り詰めます。テキストにもっとスペースが必要な場合は、--context-tokensまたは--option-tokensを増やしてください。 トレーニングは、CPU、Mac GPU用のApple MPS、NVIDIA GPU用のCUDAを--device経由でサポートします。 凍結された事前学習済みエンコーダーを使用する オプションの依存関係をインストールし、Hugging Faceから互換性のあるエンコーダーを名前で指定します。 ``` uv pip install -e '.[transformers]' jevlike-train data/synthetic/train.jsonl \ --validation data/synthetic/validation.jsonl \ --output runs/qwen-head.pt \ --encoder hf \ --hf-model Qwen/Qwen2.5-0.5B \ --rank 256 \ --batch-size 8 ``` チェックポイントは、トレーニングされたスコアヘッドとエンコーダー名を保存します。凍結されたエンコーダーの重みはコピーしません。したがって、チェックポイントをロードするには、同じHugging Faceモデルにアクセスする必要があります。--rankは、小さなスコアヘッドの幅を設定します。幅の広いヘッドは、より多くのトレーニング可能な重みとより多くのメモリを使用します。 Wikispeediaの例 scripts/get_wikispeedia.shは、公開されているSNAPアーカイブをダウンロードし、次のクリックJSONLファイルを構築します。データは、このリポジトリの外に保存されます。 ``` scripts/get_wikispeedia.sh jevlike-train data/wikispeedia/jsonl/train.jsonl \ --validation data/wikispeedia/jsonl/validation.jsonl \ --output runs/wikispeedia.pt ``` Robert WestとJure Leskovec著、Human Wayfinding in Information Networks, WWW 2012を引用してください。SNAPデータセットページのソースデータ規約を確認してください。 期待される結果 このスターターにつながった実験では、1パススコアラーは合成メニューで約98%の精度に達しました。ターゲットと無関係なWikispeediaの次のクリックデータでは、凍結されたQwen2.5-0.5Bエンコーダーとスコアラーの組み合わせは26%に達し、シャッフルされたランダムエンコーダー制御の約8%と比較されました。40,000回のクリックでトレーニングされた小さなモデルは29%に達しました。8つのオプションの場合、1パスは400トークンを生成する必要がある小さなデコーダーよりも約100倍高速でした。これらの数値はローカル実験を表しており、このクイックスタートの実行ではありません。Jevと同等の品質を達成したり、TypeSafeのプライベートトレーニング方法を再現したりすることは示していません。 制限事項 これは研究用スターターであり、Jevのコピーではありません。精度は、データの品質、分割の品質、およびエンコーダーに依存します。バイトエンコーダーは安価ですが、言語の意味に対する能力は弱いです。事前学習済みパスは大きなモデルをダウンロードする可能性があり、より多くのメモリが必要です。1パススコアリングでは、予測前に完全なオプションリストが必要です。速度比較では、大規模な商用モデルではなく、小さなローカルデコーダーを使用しました。 ライセンス コードはMITライセンスの下でリリースされています。ダウンロードされたデータセットと事前学習済みモデルは、独自の規約を保持します。