Alternative B: Nur BM25
Ablauf
raw chunkText
-> tokenizer
-> BM25
-> top JSONL zurückgebenWas 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 sindDeshalb werden die nächsten Wörter des Referenz‑Chunks wichtig.
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
clamp
screen_size
vector2
zeroWarum 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.mdDas direkt passende Token ist wie folgt.
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
play
stop
input
speed
length
velocity
vector2
zeroInsbesondere 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
clampFehlgeschlagene 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
speedAber das Referenz‑Chunk ist 2D und der folgende Hinweis ist wichtig.
AnimatedSprite2D
Vector2
position.clamp
screen_sizeBM25 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
zeroErwartete 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 BewegungsvektorsGrund, 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.clampSichtbare 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