Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Kosinusähnlichkeit: Texte vergleichen

Nach dieser Lektion: Ich kann messen, wie ähnlich zwei Texte sind.

Lektion, 55 Min.2 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Was ist die Kosinusähnlichkeit?

Die Kosinusähnlichkeit (englisch cosine similarity) misst, wie ähnlich zwei Texte sind, als Zahl von 0 bis 1. Je näher an 1, desto mehr gleichen sich ihre Wörter in ihren Anteilen.

Damit findet ein Programm doppelte Fragen in einem Studierendenforum oder die Seite, die zu einer Suche passt.

Am Ende dieser Lektion

Notiz

Ich kann messen, wie ähnlich zwei Texte sind.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Vektoreine Liste von Zahlen[1, 0, 2]
Skalarproduktdie Summe der Produkte gleicher Stellen zweier Vektoren
Längedie Wurzel aus dem Skalarprodukt eines Vektors mit sich selbst
KosinusähnlichkeitSkalarprodukt geteilt durch das Produkt der Längen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Text wird zu einer Liste von Zahlen

Legen Sie ein gemeinsames Vokabular fest, zum Beispiel fünf Wörter in fester Reihenfolge. Zählen Sie für jeden Text, wie oft jedes dieser Wörter vorkommt. Die Zählungen sind ein Vektor.

Zwei Texte mit demselben Vokabular haben Vektoren gleicher Länge. Nur so lassen sich ihre Stellen paarweise vergleichen.

Einen Text in einen Vektor verwandeln

Code: python
# Das gemeinsame Vokabular legt die Reihenfolge der Zahlen fest.
vokabular = ["wann", "öffnet", "schließt", "die", "mensa"]
text = "wann öffnet die mensa".split()
vektor = []
for wort in vokabular:
    vektor.append(text.count(wort))
print(vektor)
# Setzen Sie den Text auf "wann schließt die mensa". Was ändert sich?

Das Skalarprodukt zählt, was zwei Vektoren teilen

Multiplizieren Sie zwei Vektoren Stelle für Stelle und addieren Sie die Ergebnisse. Das ist das Skalarprodukt. Ein Wort, das in beiden Texten steht, trägt etwas bei. Ein Wort, das nur in einem steht, trägt 0 bei.

Die Länge eines Vektors ist die Wurzel aus seinem Skalarprodukt mit sich selbst.

Beispiel: drei Fragen an die Hochschule

FrageVektor (wann, öffnet, schließt, die, mensa, wo, ist, bibliothek)Länge
A: wann öffnet die mensa[1, 1, 0, 1, 1, 0, 0, 0]Wurzel aus 4 = 2
B: wann schließt die mensa[1, 0, 1, 1, 1, 0, 0, 0]Wurzel aus 4 = 2
C: wo ist die bibliothek[0, 0, 0, 1, 0, 1, 1, 1]Wurzel aus 4 = 2
Skalarprodukt A mit Bwann, die und mensa teilen sich3
Skalarprodukt A mit Cnur die teilen sich1

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Skalarprodukt und zwei Längen

Befehl
docker exec jupyter python3 -c "print(1 * 1 + 1 * 0 + 0 * 1 + 1 * 1 + 1 * 1, 4 ** 0.5)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, eine Ähnlichkeit von 0 heiße „gegensätzlich“. Bei Wortzählungen heißt sie nur: Die Texte teilen kein Wort. „Wann öffnet die Mensa“ und „Ab wieviel Uhr gibt es Essen“ meinen dasselbe und können trotzdem 0 ergeben.

Die Länge macht den Vergleich gerecht

Ein langer Text teilt schon durch Zufall mehr Wörter mit anderen. Teilen Sie deshalb das Skalarprodukt durch das Produkt der beiden Längen. Das Ergebnis ist die Kosinusähnlichkeit.

Zwei gleiche Texte ergeben 1. Texte ohne gemeinsames Wort ergeben 0. Dazwischen liegt alles, was sie teilen.

Die Kosinusähnlichkeit berechnen

Code: python
a = [1, 1, 0, 1, 1]
b = [1, 0, 1, 1, 1]
skalarprodukt = 0
laenge_a = 0
laenge_b = 0
for n in range(len(a)):
    skalarprodukt = skalarprodukt + a[n] * b[n]
    laenge_a = laenge_a + a[n] * a[n]
    laenge_b = laenge_b + b[n] * b[n]
print("Skalarprodukt:", skalarprodukt)
print("Kosinus:", skalarprodukt / (laenge_a ** 0.5 * laenge_b ** 0.5))
# Setzen Sie b gleich a. Was kommt heraus?

Aus Skalarprodukt und Längen die Ähnlichkeit

Befehl
docker exec jupyter python3 -c "print(3 / (4 ** 0.5 * 4 ** 0.5), 1 / (4 ** 0.5 * 4 ** 0.5))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.