Alternativa B: solo BM25
Flujo
raw chunkText
-> tokenizer
-> BM25
-> top JSONL devueltoLo que ve BM25
BM25 crea la puntuación aproximadamente con los siguientes elementos.
TF: cuántas veces aparece la palabra en este documento
IDF: cuán rara es la palabra en todo el corpus
Length normalization: corrección para que los documentos largos no tengan ventaja automáticaPor lo tanto, las palabras siguientes al chunk de referencia se vuelven importantes.
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
clamp
screen_size
vector2
zeroPor qué tiene éxito en el chunk de referencia
En la simulación de la nota original, el siguiente documento aparece en la parte superior.
outputs/godot_docs_full/pages/getting_started__first_2d_game__03.coding_the_player__161d377b.mdLos tokens que coinciden directamente son los siguientes.
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
play
stop
input
speed
length
velocity
vector2
zeroEn particular, los siguientes tokens son poco frecuentes en el corpus, por lo que contribuyen fuertemente a la puntuación.
animatedsprite2d
move_left
move_right
is_action_pressed
screen_size
clampCandidato a fracaso
En BM25 only también pueden aparecer documentos de movimiento 3D.
La razón es el siguiente token común.
Input.is_action_pressed
move_right
move_left
normalized
speedSin embargo, el chunk de referencia es 2D y la siguiente pista es importante.
AnimatedSprite2D
Vector2
position.clamp
screen_sizeBM25 es basado en puntuación de palabras, por lo que no comprende perfectamente el contexto 2D/3D.
Simulación de PoC
Introduce el chunk de referencia como consulta BM25.
Entrada:
func _process(delta):
Input.is_action_pressed(...)
velocity.normalized() * speed
$AnimatedSprite2D.play()
position.clamp(Vector2.ZERO, screen_size)Tokens que otorgarán una puntuación alta en BM25:
animatedsprite2d
is_action_pressed
move_left
move_right
normalized
clamp
screen_size
vector2
zero| Posición | Candidato | Por qué aparece | Decisión |
|---|---|---|---|
| 1 | first_2d_game / coding_the_player |
Input.is_action_pressed, move_left, move_right, velocity.normalized, AnimatedSprite2D.play/stop coinciden directamente |
accept |
| 2 | first_2d_game / clamp/screen section |
position.clamp, Vector2.ZERO, screen_size, AnimatedSprite2D son correctos |
accept |
| 3 | first_3d_game / player_movement_code |
Input.is_action_pressed, move_left, move_right, normalized, speed se superponen |
false positive |
Razón por la que el candidato número 1 aparece:
animatedsprite2d:
Como es un token raro en todo el documento, el IDF es grande
move_left / move_right:
Aparece directamente en el código de entrada del tutorial
is_action_pressed:
Coincide directamente con el código de procesamiento de entrada
velocity.normalized:
Coincide directamente con el flujo de normalización del vector de movimientoRazón por la que el candidato en tercer lugar aparece junto con los demás:
El documento de movimiento 3D también describe el procesamiento de entrada y el flujo de movimiento normalizado.
Por lo tanto, desde la perspectiva de BM25, la superposición de tokens de consulta es bastante grande.
Sin embargo, no coincide con los elementos clave del chunk de referencia, como AnimatedSprite2D, Vector2, screen_size y position.clamp.Registro a verificar en PoC
En el PoC de BM25, es importante mostrar la contribución de tokens para cada candidato.
Ejemplo:
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.clampConclusión visible:
BM25 recupera bien los documentos relevantes.
Sin embargo, también sube códigos de entrada/movimiento similares.
Por lo tanto, se necesita un reranker o validador en la siguiente etapa de BM25.Ventajas
- El principio es transparente.
- Depurar es fácil.
- No hay costo de modelo.
- Se puede usar el fragmento sin procesar tal cual.
- Es fuerte en la búsqueda exacta de cadenas en código/API.
Desventajas
- Es débil con sinónimos y descripciones.
- Si el nombre de la API no aparece directamente, puede pasarse por alto.
- Código similar, como 3D movement, puede mezclarse como falsos positivos.
Evaluación
Búsqueda del candidato de primera fase que debe revisarse obligatoriamente
Sin embargo, su uso aislado es insuficiente