idea_world_labDEV JOURNAL
2026年6月28日日曜日

代替 C: embedding only

フロー

raw chunkText
  -> embedding vector
  -> docs_chunks/api_mapping/label_prototypes embedding と cosine search
  -> top JSONL 返却

埋め込みが必要な理由

BM25は正確な文字列に強いですが、説明文とコード表現が異なると弱くなることがあります。

例えば、chunkには次のコードがあります。

position = position.clamp(Vector2.ZERO, screen_size)

ドキュメントには次のように説明されている場合があります。

prevent the player from leaving the screen
clamping a value means restricting it to a given range

この場合、embeddingは意味的なつながりを捉えることができます。

基準チャンクで予想される成功

embeddingは次のトピックを見つける可能性があります。

2D player movement
moving inside screen
animation based on movement
player movement tutorial

基準チャンクで予想される失敗

embeddingは意味が似ている候補も一緒に高く与えることができる。

予想される false positive:

3D player movement
scripting player input
vector math
animation player docs

つまり「player movement」という意味が似ていれば、2D/3D の違いをぼやかすことができる。

PoC シミュレーション

基準チャンクを埋め込みベクトルに変換する。

入力の意味:

2D player movement
keyboard input
velocity normalization
animation while moving
keep player inside screen

embeddingが見つかる可能性が高い候補:

候補 なぜ出てくるか 判定
first_2d_game / coding_the_player 2D プレイヤーの移動、入力、アニメーション、画面クランプの意味が近い accept
first_2d_game / clamp explanation プレイヤーが画面外に出ないようにする意味が近い accept
first_3d_game / player_movement_code プレイヤーの移動、入力、正規化された方向の意味が近い false positive
Vector math / movement tutorial 速度、ベクトル、正規化の意味が近い maybe
Animation player docs 再生/停止アニメーションの意味が近い maybe

embedding onlyで目立つ問題:

文字列が直接合っているかより、意味が近いかを見る。  
そのため、2D/3D、Godot3/Godot4、マイグレーションの有無のように正確に分ける基準が曖昧になることがある。

例として、基準チャンクと3Dムーブメント文書はどちらも同じ意味を共有しています。

keyboard input
movement direction
normalized velocity
player movement

しかし、基準チャンクには次の直接的な手がかりがあります。

AnimatedSprite2D
Vector2.ZERO
position.clamp
screen_size

embedding onlyはこの直接的な手がかりをBM25ほど透明に説明できない可能性があります。

PoCで確認するログ

embedding PoCでは次のように示す必要があります。

1. query chunkText  
2. 候補文書の見出し/コンテンツ要約  
3. コサイン類似度  
4. 直接一致した文字列の一覧  
5. 直接一致文字列がないが意味が近い候補を表示

目に見える結論:

embeddingはBM25が見逃した説明型文書を補完する。  
しかし、直接的根拠の判定には弱いため、単独で使用してはいけない。

長所

  • 表現が違っても見つける。
  • 文書説明型コンテンツに強い。
  • 生のチャンクをそのまま入れやすい。
  • BM25が0件のときフォールバックになることがある。

短所

  • 正確なAPI判定が弱い。
  • Godot 3/Godot 4 バージョンの違いが混ざる可能性がある。
  • 2D/3D の文脈が混ざる可能性がある。
  • なぜこの結果になったのか説明しにくい。
  • api_mappingでは偽陽性のリスクが大きい。

判定

単独使用禁止  
BM25候補の補完用として使用