Die Seite ohne ein gemeinsames Wort
Eine Einbettung (englisch Embedding) ist eine Zahlenliste, die die Bedeutung eines Textes darstellt. Texte mit ähnlicher Bedeutung bekommen Listen, die in dieselbe Richtung zeigen. Ein Programm kann Bedeutungen dann mit Rechnen vergleichen.
Eine Besucherin sucht auf der Bibliotheksseite nach „Regeln zum Mitnehmen von Büchern“. Die passende Seite heißt „Leihbedingungen“. Beide teilen kein Wort, also findet eine Wortsuche nichts. Zahlen können sie finden.
Am Ende dieser Lektion
Notiz
Ich kann erklären, was eine Einbettung ist, und zwei mit der Kosinus-Ähnlichkeit vergleichen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Einbettung | eine Zahlenliste, die eine Bedeutung darstellt | |
| Vektor | eine Zahlenliste, gesehen als Punkt oder Pfeil | |
| Skalarprodukt | die Summe der Produkte gleichstelliger Zahlen | |
| Kosinus-Ähnlichkeit | ein Wert dafür, wie gleich zwei Pfeile zeigen | 0.98 |
| Abruf | das Finden der Textstücke, die zu einer Frage passen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Echte Einbettungen und unsere Ersatzstücke
Eine echte Einbettung hat Hunderte Zahlen und kommt von einem Modell. Nichts in diesem Modul erzeugt eine.
Die Lektionen nutzen kleine Ersatzstücke: erfundene Listen mit drei Zahlen und Wortzählungen, die das Skript selbst ausrechnet. So lässt sich jeder Schritt hier ausführen und prüfen. Die Methode bleibt dieselbe.
Ein Vektor ist eine Zahlenliste
Stellen Sie sich eine Zahlenliste als Punkt auf einer Karte vor. Zwei Zahlen sind ein Punkt auf einer flachen Karte. Drei Zahlen sind ein Punkt in einem Raum.
Geben Sie jeder Stelle der Liste eine Bedeutung. Hier sind die drei Stellen Tier, Fahrzeug und Essen. Eine große Zahl heißt: Das Wort handelt stark davon.
Beispiel: vier erfundene Vektoren
| Wort | Tier | Fahrzeug | Essen |
|---|---|---|---|
| Katze | 0,9 | 0,1 | 0,1 |
| Kater | 0,8 | 0,1 | 0,2 |
| Bus | 0,1 | 0,9 | 0,0 |
| Brezel | 0,1 | 0,0 | 0,9 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Kosinus-Ähnlichkeit bewertet die Gleichheit
Um zwei Vektoren zu vergleichen, brauchen Sie drei kleine Schritte. Das Skalarprodukt multipliziert gleichstellige Zahlen und addiert sie. Die Länge ist die Quadratwurzel aus dem Skalarprodukt des Vektors mit sich selbst.
Der Kosinus ist das Skalarprodukt geteilt durch beide Längen. Er ist 1, wenn die Pfeile gleich zeigen, 0 im rechten Winkel und unter 0, wenn sie auseinanderzeigen.
Beispiel: zwei kleine Vektoren
| Schritt | Rechnung mit a = [1, 2] und b = [2, 1] | Ergebnis |
|---|---|---|
| Skalarprodukt | 1 x 2 + 2 x 1 | 4 |
| Länge von a | Wurzel aus (1 x 1 + 2 x 2) | 2,24 |
| Länge von b | Wurzel aus (2 x 2 + 1 x 1) | 2,24 |
| Kosinus | 4 geteilt durch (2,24 x 2,24) | 0,8 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Rechnung als Schleife schreiben
Das nächste Skript enthält die vier Vektoren und schreibt die drei Schritte als kleine Funktionen. Es gibt den Kosinus jedes Paares aus.
Es baut auch einen Zählvektor: eine feste Wortliste und die Zahl, wie oft jedes Wort in einem Satz vorkommt. Zwei Sätze mit denselben Wörtern geben Vektoren, die gleich zeigen.
Das Vektor-Skript schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Kleine erfundene Vektoren: [Tier, Fahrzeug, Essen]. Eine echte Einbettung hat Hunderte Zahlen.' 'const vektoren = {' ' katze: [0.9, 0.1, 0.1],' ' kater: [0.8, 0.1, 0.2],' ' bus: [0.1, 0.9, 0.0],' ' brezel: [0.1, 0.0, 0.9],' '};' 'function skalarprodukt(a, b) {' ' let summe = 0;' ' for (let i = 0; i < a.length; i++) summe = summe + a[i] * b[i];' ' return summe;' '}' 'function laenge(a) { return Math.sqrt(skalarprodukt(a, a)); }' 'function kosinus(a, b) { return skalarprodukt(a, b) / (laenge(a) * laenge(b)); }' > vektor.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 Vektor-Skript schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const namen = Object.keys(vektoren);' 'for (let i = 0; i < namen.length; i++) {' ' for (let j = i + 1; j < namen.length; j++) {' ' const wert = kosinus(vektoren[namen[i]], vektoren[namen[j]]);' ' console.log(namen[i] + \" und \" + namen[j] + \": \" + wert.toFixed(2));' ' }' '}' '// Ein Zählvektor: Wie oft kommt jedes Wort einer festen Liste vor?' 'const woerter = [\"offen\", \"spät\", \"buch\", \"gebühr\"];' 'function zaehlen(satz) {' ' const gefunden = satz.toLowerCase().split(\" \");' ' return woerter.map(function (wort) {' ' return gefunden.filter(function (eins) { return eins === wort; }).length;' ' });' '}' >> vektor.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 Vektor-Skript schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const eins = zaehlen(\"offen spät offen\");' 'const zwei = zaehlen(\"buch offen spät\");' 'console.log(\"Zählungen:\", eins.join(\" \"), \"und\", zwei.join(\" \"));' 'console.log(\"Kosinus der Zählungen:\", kosinus(eins, zwei).toFixed(2));' >> vektor.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 Werte lesen
docker exec -w /home/node/project agent node vektor.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die wichtigsten Zeilen der Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| katze und kater: 0.99 | Sehr ähnlich |
| katze und bus: 0.22 | Kaum ähnlich |
| bus und brezel: 0.01 | Fast nichts gemeinsam |
| Zählungen: 2 1 0 0 und 1 1 1 0 | Die Zählvektoren der beiden Sätze |
| Kosinus der Zählungen: 0.77 | Die Sätze teilen die Wörter offen und spät |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, ein Kosinus von 0,9 heiße „zu 90 Prozent gleich“. Das stimmt nicht. Der Wert ordnet nur: 0,9 ist näher als 0,5. Nutzen Sie ihn für eine Rangfolge, nie als Prozentwert der Wahrheit.