Alternative B : BM25 uniquement
Flux
raw chunkText
-> tokenizer
-> BM25
-> top JSONL retournéCe que voit BM25
BM25 crée un score à partir des éléments suivants.
TF: combien de fois le mot apparaît dans ce document
IDF: à quel point le mot est rare dans l'ensemble du corpus
Length normalization: correction pour que les documents longs ne soient pas automatiquement avantagésDonc les mots suivants du chunk de référence deviennent importants.
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
clamp
screen_size
vector2
zeroPourquoi cela réussit‑il dans le chunk de référence
Dans la simulation de la note originale, le document suivant apparaît en haut.
outputs/godot_docs_full/pages/getting_started__first_2d_game__03.coding_the_player__161d377b.mdLe token correspondant directement est le suivant.
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
play
stop
input
speed
length
velocity
vector2
zeroParticulièrement, ces jetons sont rares dans le corpus et contribuent fortement au score.
animatedsprite2d
move_left
move_right
is_action_pressed
screen_size
clampCandidat à l'échec
Même avec BM25 only, le document 3D movement peut être remonté.
La raison en est le token commun suivant.
Input.is_action_pressed
move_right
move_left
normalized
speedCependant, le chunk de référence est en 2D et l'indice suivant est important.
AnimatedSprite2D
Vector2
position.clamp
screen_sizeBM25 est basé sur le score des mots, il ne comprend pas parfaitement le contexte 2D/3D.
Simulation PoC
Insérez le chunk de référence comme requête BM25.
Entrée:
func _process(delta):
Input.is_action_pressed(...)
velocity.normalized() * speed
$AnimatedSprite2D.play()
position.clamp(Vector2.ZERO, screen_size)Token qui donnera un score élevé avec BM25 :
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
clamp
screen_size
vector2
zeroPrévisions des candidats :
| Rang | Candidat | Pourquoi cela apparaît | Jugement |
|---|---|---|---|
| 1 | first_2d_game / coding_the_player |
Input.is_action_pressed, move_left, move_right, velocity.normalized, AnimatedSprite2D.play/stop correspondent directement |
accept |
| 2 | first_2d_game / clamp/screen section |
position.clamp, Vector2.ZERO, screen_size, AnimatedSprite2D sont corrects |
accept |
| 3 | first_3d_game / player_movement_code |
Input.is_action_pressed, move_left, move_right, normalized, speed se chevauchent |
false positive |
Raison pour laquelle le candidat classé premier apparaît :
animatedsprite2d:
Comme il s'agit d'un token rare dans l'ensemble du document, l'IDF est élevé
move_left / move_right:
Apparaît directement dans le code d'entrée du tutoriel
is_action_pressed:
Correspond directement au code de traitement des entrées
velocity.normalized:
Correspond directement au flux de normalisation du vecteur de déplacementRaison pour laquelle le troisième candidat apparaît avec les autres :
Le document de mouvement 3D explique également le traitement des entrées et le flux de déplacement normalisé.
Donc, du point de vue de BM25, le chevauchement des jetons de requête est assez important.
Cependant, cela ne correspond pas aux éléments clés du chunk de référence tels que AnimatedSprite2D, Vector2, screen_size, position.clamp.Vérifier les journaux dans le PoC
Dans le PoC BM25, il est important d'afficher la contribution des tokens pour chaque candidat.
Exemple:
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.clampConclusion visible :
BM25 récupère bien les documents pertinents.
Cependant, il récupère également des entrées/codes similaires.
Ainsi, une étape de reranker ou de validateur est nécessaire après BM25.Avantages
- Le principe est transparent.
- Le débogage est facile.
- Aucun coût de modèle.
- Vous pouvez utiliser le chunk brut tel quel.
- Fort pour la recherche exacte de chaînes dans le code/API.
Inconvénients
- Faible avec les synonymes et les descriptions.
- Si le nom de l'API n'apparaît pas directement, il peut être manqué.
- Des codes similaires comme « 3D movement » peuvent être mélangés comme faux positifs.
Jugement
Recherche du premier candidat à examiner impérativement
Cependant, l'utilisation seule est insuffisante