idea_world_labDEV JOURNAL
Sonntag, 28. Juni 2026

Alternative B: Nur BM25

Ablauf

raw chunkText
  -> tokenizer
  -> BM25
  -> top JSONL zurückgeben

Was BM25 sieht

BM25 erstellt den Score ungefähr aus den folgenden Elementen.

TF: Wie oft ein Wort in diesem Dokument vorkommt  
IDF: Wie selten dieses Wort im gesamten Korpus ist  
Length normalization: Korrektur, damit lange Dokumente nicht automatisch im Vorteil sind

Deshalb werden die nächsten Wörter des Referenz‑Chunks wichtig.

animatedsprite2d
is_action_pressed
move_left
move_right
normalized
clamp
screen_size
vector2
zero

Warum es im Basis‑Chunk erfolgreich ist

In der Simulation der Originalnotiz erscheint das folgende Dokument oben.

outputs/godot_docs_full/pages/getting_started__first_2d_game__03.coding_the_player__161d377b.md

Das direkt passende Token ist wie folgt.

animatedsprite2d
is_action_pressed
move_left
move_right
normalized
play
stop
input
speed
length
velocity
vector2
zero

Insbesondere trägt das folgende Token, da es im Korpus selten ist, stark zur Punktzahl bei.

animatedsprite2d
move_left
move_right
is_action_pressed
screen_size
clamp

Fehlgeschlagene Kandidaten

Im BM25‑only‑Modus können auch 3D‑Bewegungs‑Dokumente erscheinen.

Der Grund dafür sind die folgenden gemeinsamen Tokens.

Input.is_action_pressed
move_right
move_left
normalized
speed

Aber das Referenz‑Chunk ist 2D und der folgende Hinweis ist wichtig.

AnimatedSprite2D
Vector2
position.clamp
screen_size

BM25 ist wortpunktbasiert und kann den 2D/3D‑Kontext nicht vollständig erfassen.

PoC‑Simulation

Den Referenz‑Chunk als BM25‑Abfrage eingeben.

Eingabe:

func _process(delta):
  Input.is_action_pressed(...)
  velocity.normalized() * speed
  $AnimatedSprite2D.play()
  position.clamp(Vector2.ZERO, screen_size)

Tokens, die einen hohen BM25-Score ergeben:

animatedsprite2d
is_action_pressed
move_left
move_right
normalized
clamp
screen_size
vector2
zero

Erwartete Kandidaten:

Rang Kandidat Warum erscheint es Bewertung
1 first_2d_game / coding_the_player Input.is_action_pressed, move_left, move_right, velocity.normalized, AnimatedSprite2D.play/stop passen direkt akzeptieren
2 first_2d_game / clamp/screen section position.clamp, Vector2.ZERO, screen_size, AnimatedSprite2D passen akzeptieren
3 first_3d_game / player_movement_code Input.is_action_pressed, move_left, move_right, normalized, speed überschneiden sich falsches Positiv

Warum der Kandidat auf Platz 1 erscheint:

animatedsprite2d:
  Da es im gesamten Dokument ein seltener Token ist, ist die IDF groß

move_left / move_right:
  Erscheint direkt im Eingabecode des Tutorials

is_action_pressed:
  Entspricht exakt dem Eingabeverarbeitungscode

velocity.normalized:
  Entspricht exakt dem Fluss der Normalisierung des Bewegungsvektors

Grund, warum der 3. Kandidat zusammen angezeigt wird:

Das 3D‑Bewegungsdokument erklärt ebenfalls die Eingabeverarbeitung und den normalisierten Bewegungsablauf.  
Aus der Sicht von BM25 ist die Überlappung der Abfrage‑Token ziemlich groß.  
Aber es passt nicht zu den Kernkomponenten des Referenz‑Chunks wie AnimatedSprite2D, Vector2, screen_size, position.clamp.

Protokolle, die im PoC zu überprüfen sind

Im BM25 PoC ist es wichtig, den Token‑Beitrag für jeden Kandidaten anzuzeigen.

Beispiel:

candidate: first_2d_game / coding_the_player
matched_terms:
  animatedsprite2d   high
  is_action_pressed  high
  move_left          high
  move_right         high
  normalized         medium
  play               medium
  stop               medium

candidate: first_3d_game / player_movement_code
matched_terms:
  is_action_pressed  high
  move_left          high
  move_right         high
  normalized         medium
missing_terms:
  animatedsprite2d
  screen_size
  position.clamp

Sichtbare Schlussfolgerung:

BM25 ruft relevante Dokumente gut ab.  
Aber es liefert auch ähnliche Eingaben/Bewegungscodes.  
Deshalb wird im nächsten Schritt nach BM25 ein Reranker oder Validator benötigt.

Vorteile

  • Das Prinzip ist transparent.
  • Das Debuggen ist einfach.
  • Es fallen keine Modellkosten an.
  • Roh‑Chunks können unverändert verwendet werden.
  • Starke Unterstützung für genaue String‑Suche in Code/API.

Nachteile

  • Schwach bei Synonymen und erläuternden Texten.
  • Wenn der API‑Name nicht explizit genannt wird, kann er übersehen werden.
  • Ähnliche Code‑Muster wie bei „3D movement“ können zu Fehlalarmen führen.

Bewertung

Unbedingt zu prüfende erste Kandidatensuche  
Aber die alleinige Verwendung ist unzureichend