Es hat etwas gefunden, aber war es richtig?
Der Abruf (englisch Retrieval) findet die Textstücke, die eine Frage beantworten. Ihn zu messen heißt, Fragen zu stellen, deren Antwort Sie kennen, und zu zählen, wie oft das richtige Stück zurückkommt.
Die Seite einer Bibliothek zeigt immer drei Ergebnisse. Das Team findet, es läuft gut. Niemand hat gezählt. Ohne Zählung wissen Sie nicht, ob eine Änderung geholfen oder geschadet hat.
Am Ende dieser Lektion
Notiz
Ich kann die Textstücke finden, die eine Frage beantworten, und sagen, wie gut das ging.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Sucher | der Code, der Textstücke zu einer Frage findet | |
| Treffer | das richtige Stück kam zurück | |
| Trefferquote | der Anteil der Fragen, die Treffer waren | 80 Prozent |
| Testfall | eine Frage mit bekanntem Quellstück | |
| Mindestwert | der niedrigste Wert, der sich zurückzugeben lohnt | 0.3 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Testfall hat eine bekannte Quelle
Schreiben Sie Fragen auf und zu jeder die id des Stücks, das die Antwort enthält. Lassen Sie den Sucher über jede Frage laufen. Ein Treffer ist, wenn die richtige id unter den gelieferten Stücken ist.
Die Trefferquote ist die Zahl der Treffer geteilt durch die Zahl der Fragen. Vier Treffer bei fünf Fragen sind eine Quote von 80 Prozent.
Manche Fragen haben keine Antwort
Besucher fragen nach Dingen, die die Dokumente nicht abdecken. Für sie ist das richtige Ergebnis nichts. Liefert der Sucher sein am wenigsten schlechtes Stück, kann ein späterer Schritt eine Antwort aus dem falschen Text bauen.
Ein Mindestwert hilft. Liefern Sie ein Stück nur, wenn sein Wert den Mindestwert erreicht. Sonst liefern Sie eine leere Liste.
Beispiel: fünf Testfälle
| Frage zu | Erwartet | Gefunden | Ergebnis |
|---|---|---|---|
| Öffnungszeit | zeiten | zeiten | Treffer |
| Gebühr | gebuehren | raeume | Daneben |
| Bibliothekar | keines | nichts | Treffer |
| Parkplatz | keines | raeume | Daneben |
| Raum reservieren | raeume | raeume | Treffer |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Einen Sucher in einem Skript bewerten
Das nächste Skript baut den Bibliotheksspeicher aus Lektion 3 mit denselben Zählvektoren neu. Es fügt einen Mindestwert von 0,3 hinzu und liefert höchstens ein Stück.
Dann lässt es fünf Testfälle laufen, einen davon ohne Antwort, und gibt jedes Ergebnis und die Trefferquote aus.
Das Bewertungs-Skript schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const woerter = [\"öffnet\", \"schließt\", \"samstag\", \"sonntag\", \"ausleihen\", \"buch\", \"bücher\", \"verspätetes\", \"gebühr\", \"raum\", \"bibliothek\", \"uhr\"];' 'const stuecke = [' ' { id: \"zeiten-woche\", text: \"Von Montag bis Freitag öffnet die Bibliothek um 9 Uhr und schließt um 18 Uhr.\" },' ' { id: \"zeiten-wochenende\", text: \"Am Samstag öffnet die Bibliothek um 10 Uhr und schließt um 14 Uhr. Am Sonntag ist sie geschlossen.\" },' ' { id: \"ausleihe\", text: \"Sie können 8 Bücher für 3 Wochen ausleihen. Jedes Buch lässt sich zweimal online verlängern.\" },' ' { id: \"gebuehren\", text: \"Ein verspätetes Buch kostet 20 Cent pro Tag. Die Gebühr steigt nie über 10 Euro.\" },' ' { id: \"raeume\", text: \"Ein Raum zum Lernen bietet Platz für 6 Personen. Reservieren Sie den Raum am Schalter oder online für 2 Stunden.\" },' '];' > bewerten.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Bewertungs-Skript schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function vektorVon(text) {' ' const gefunden = text.toLowerCase().replace(/[^a-z0-9äöüß ]/g, \" \").split(\" \").filter(function (w) { return w.length > 0; });' ' return woerter.map(function (begriff) {' ' return gefunden.filter(function (wort) { return wort === begriff; }).length;' ' });' '}' 'function kosinus(a, b) {' ' let punkt = 0, sa = 0, sb = 0;' ' for (let i = 0; i < a.length; i++) { punkt += a[i] * b[i]; sa += a[i] * a[i]; sb += b[i] * b[i]; }' ' return sa === 0 || sb === 0 ? 0 : punkt / Math.sqrt(sa * sb);' '}' 'const speicher = stuecke.map(function (s) { return { id: s.id, vektor: vektorVon(s.text) }; });' 'const MINIMUM = 0.3;' >> bewerten.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Bewertungs-Skript schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function abrufen(frage) {' ' const anfrage = vektorVon(frage);' ' let bester = { id: \"\", wert: 0 };' ' speicher.forEach(function (eintrag) {' ' const wert = kosinus(anfrage, eintrag.vektor);' ' if (wert > bester.wert) bester = { id: eintrag.id, wert: wert };' ' });' ' return bester.wert >= MINIMUM ? [bester.id] : [];' '}' >> bewerten.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Bewertungs-Skript schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const faelle = [' ' { frage: \"wann öffnet die bibliothek am samstag\", erwartet: \"zeiten-wochenende\" },' ' { frage: \"wie viele bücher kann ich ausleihen\", erwartet: \"ausleihe\" },' ' { frage: \"was kostet ein verspätetes buch\", erwartet: \"gebuehren\" },' ' { frage: \"kann ich einen raum reservieren\", erwartet: \"raeume\" },' ' { frage: \"wer ist der bibliothekar\", erwartet: null },' '];' 'let treffer = 0;' 'faelle.forEach(function (fall) {' ' const gefunden = abrufen(fall.frage);' ' const ok = fall.erwartet === null ? gefunden.length === 0 : gefunden.indexOf(fall.erwartet) >= 0;' ' if (ok) treffer = treffer + 1;' ' console.log((ok ? \"TREFFER \" : \"DANEBEN \") + fall.frage + \" -> \" + (gefunden.join(\" \") || \"nichts\"));' '});' 'console.log(\"Trefferquote:\", treffer, \"von\", faelle.length);' >> bewerten.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ausführen und die Quote lesen
docker exec -w /home/node/project agent node bewerten.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Drei der sechs Zeilen der Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| TREFFER wann öffnet die bibliothek am samstag -> zeiten-wochenende | Das richtige Stück |
| TREFFER wer ist der bibliothekar -> nichts | Nichts gefunden, und das ist richtig |
| Trefferquote: 5 von 5 | Jeder Fall war ein Treffer |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, der Abruf funktioniere, wenn er immer etwas liefert. Bei einer Frage, die die Dokumente nicht beantworten, ist etwas zu liefern daneben. Zählen Sie auch diese Fragen und geben Sie dem Sucher eine Möglichkeit, nichts zu sagen.