Haben Sie Korpus von über Millionen Dokumenten
Für ein bestimmtes Dokument möchten Sie ähnliche Dokumente mit Cosinus wie im Vektorraummodell finden
Alle tf wurden mit erhöhter Frequenz normalisiert, um eine Tendenz zu längeren Dokumenten wie in diesem tf-idf zu vermeiden :
Habe alle vorberechnet
Lassen Sie die Werte für den Nenner vorberechnen.
Für ein gegebenes d 1 muss also mehr als 1 Million d 2 erzielt werden.
Haben Sie einen Schwellenwert von 0,6 Kosinus für Ähnlichkeit
Ich kann das für eine gegebene es gibt einen ziemlich engen Bereich von | | d 2 | | für Cosinus ≥ 0,6
Zum Beispiel in einer Suche nach ähnlichem für einen Cosinus von ≥ 0,6 und a | | d 1 | | von 7,7631 dann | | d 2 | | Bereich von 7,0867 bis 8,8339
Wo außerhalb der Kosinusschwelle 0,6 | | d 2 | | Bereich von bis 0,7223 bis 89,3395
Dies war mit Standard-tf-Dokumentnormalisierung.
Es wird eine Menge von das hat keine Chance, ein Cosinus 0.6 Match zu sein
Zum Schluss die Frage:
Für ein Geben und Kosinus von> = 0,6, wie kann der Bereich von | bestimmt werden | d 2 | | das hat eine Chance?
Welche | | d 2 | | kann ich sicher beseitigen?
Ich kenne auch die Anzahl der Terme in und d 2, wenn es einen Termzählbereich gibt.
Durch Experimentieren
und | | d 2 | | < | | d 1 | | / .8
scheint sicher zu sein, aber hoffentlich gibt es eine Reichweite, die sich als sicher erwiesen hat
Erstellt einige Testfälle mit sehr eindeutigen Begriffen, einige nicht so eindeutig und einige häufig. Sicher genug, Sie können den einzigartigsten Begriff verwenden und diese Häufigkeit im Vergleich erhöhen. Der Zähler steigt (Punktprodukt) und || vergleicht || und wird einen Kosinus sehr nahe an 1 bekommen.
Art verwandt und NICHT die Frage.
Ich benutze auch die tf-idf, um Dokumente in Gruppen zu gruppieren. Der Kundenstamm, an den ich verkaufe, ist es gewohnt, in der Nähe von Dup-Gruppen zu sein. Dort verfolge ich einen ähnlichen Ansatz, indem ich die kleinste Anzahl von Begriffen betrachte und sie gegen die Anzahl der Begriffe bis zu 3x bewerte. Eine Laufzeit von 10 sieht also zwischen 10 und 30 aus (4-9 hatten bereits einen Schuss auf 10). Hier kann ich es mir leisten, einen zu verpassen, der in einem anderen aufgenommen wurde. Ich bin zu 10% fertig und die größte Quote ist 1,8.
Bitte identifizieren Sie die Fehler in dieser Analyse.
Wie in AN6U5 ausgeführt, gibt es einen Fehler in dieser Analyse.
Es ist kein Kosinus mehr, wenn das Dokument auf gewichtet normalisiert ist.
Und wie von Mathew herausgestellt, kann
ich auch nicht auf d1⋅d2≤d1⋅d1 schließen Ich hoffe immer noch auf etwas, das mir eine harte Bindung gibt, aber Leute, die dieses Zeug zu kennen scheinen, sagen mir nein,
ich möchte die Frage nicht ändern, also ignoriere dies einfach.
Ich werde eine Analyse durchführen und vielleicht eine separate Frage zur Dokumentnormalisierung
für stellen Der Zweck dieser Frage ist die Annahme, dass das Dokument auf raw tf normalisiert ist.
Entschuldigung, aber ich bin einfach nicht gut mit dem Markup, das zur Erstellung der Gleichungen verwendet wird.
Also in meiner Notation
|| d1 || = sqrt (Summe (w1 x w1))
d1 Punkt d2 = Summe (w1 X w2)
Angenommen, d1 ist das kürzere Dokument.
Der beste d1 Punkt d2, der erreicht werden kann, ist d1 Punkt d1.
Wenn d1 100 paul 20
heiratet und d2 100 paul 20 peter 1
heiratet.
Normalisiert
d1 ist heiraten 1 paul 1/5
d2 ist heiraten 1 paul 1/5 peter 1/100
Heiraten und paul haben eindeutig die gleiche ID in beiden Dokumenten.
Die bestmögliche d1 Punkt d2 ist d1 Punkt d1
Die maximal mögliche Übereinstimmung mit d1 ist d1
cos = d1 Punkt d1 / || d1 || || d2 ||
Quadrat beide Seiten
cos X cos = (d1 Punkt d1) X (d1 Punkt d1) / ((d1 Punkt d1) X (d2 Punkt d2)) cos X cos = (d1 Punkt d1) / (d2 Punkt d2)
nimm das Quadrat Wurzel beider Seiten
cos = || d1 || / || d2 ||
ist || d2 || nicht durch die cos begrenzt?
Wenn ich nur || d2 || benutze > = cos || d1 || und || d2 || <= || d1 || / cos Ich bekomme die Rechengeschwindigkeit, die ich brauche
quelle
Antworten:
Leider vereinfacht sich die Mathematik, um zu zeigen, dass Sie die Einschränkung des Kosinus-Ähnlichkeitsvergleichs der Vektoren anhand ihrer Länge nicht rigoros rechtfertigen können.
Der entscheidende Punkt ist, dass sich die Kosinus-Ähnlichkeitsmetrik basierend auf der Länge normalisiert, so dass nur die Einheitsvektoren berücksichtigt werden. Ich weiß, dass dies nicht unbedingt die Antwort ist, die Sie wollten, aber die Mathematik zeigt deutlich, dass die Kosinus-Ähnlichkeitsmetriken unabhängig von der Vektorlänge sind.
Schauen wir uns die Mathematik genauer an:
Sie wenden eine Kosinus-Ähnlichkeitsmetrik an und müssen diese Metrik größer als 0,6 sein:
Die skalaren Längen auf der Unterseite können jedoch auf die obigen Kreuzprodukte verteilt werden (Verteilungseigenschaft):
Dafür:
hängt nur von der Ausrichtung der Vektoren ab und nicht von ihrer Größe (dh Länge).
Versöhnen Sie dies mit dem, was Sie tun:
Sie können vielleicht das, was Sie getan haben, mit Entfernungsmetriken in Einklang bringen, indem Sie auch die euklidische Entfernung berücksichtigen. Während die Kosinusähnlichkeit nur einen Wert zwischen -1 und 1 basierend auf dem Winkel zwischen den beiden Vektoren zurückgibt, geben die euklidischen Abstände Werte zurück, die von den Längen der beiden Vektoren abhängen. In gewissem Sinne kombinieren Sie Aspekte der euklidischen Distanz mit Kosinusähnlichkeit.
Es ist ziemlich sinnvoll zu verlangen, dass die relativen Längen innerhalb von 25% voneinander liegen, in dem Sinne, dass dies einen Aspekt der euklidischen Distanz kombiniert, um gruppierte Überdachungen zu erzeugen, die die Rechenzeit verkürzen, und dann kann die längenunabhängige Kosinusähnlichkeit als verwendet werden die endgültige Determinante.
Beachten Sie, dass 1 / .8 = 1,25 ist, also ist d2> =. 8d1 eine strengere Einschränkung als d2 <= d1 / .8. Ich schlage vor, d2> =. 75d1 und d2 <= 1.25d1 zu verwenden, da dies symmetrisch ist.
Hoffe das hilft!
quelle
Um einige Algebra durchzuarbeiten, möchte ich einige weitere Begriffe einführen (und einige in kürzere umbenennen):
quelle
Ich poste eine Antwort, aber natürlich werde ich den Bonus an jemand anderen vergeben
Ich denke, es gibt einen maximalen Zähler, wenn das Dokument tf normalisiert ist
d1⋅d2 / (|| d1 |||| d2 ||)
Angenommen, d1 hat gleiche oder weniger Terme (oder nimm einfach das d mit weniger Termen).
Die maximal mögliche normalisierte tf ist 1.
Die maximal mögliche Zählersumme (tf1, i * idf, i * 1 * idf, i)
|| d2 || = Summe (tf1, i * idf, i * 1 * idf, i) / || d1 || / .6
Zumindest arbeite ich daran, aber es gibt eindeutig ein Minimum.
Wenn Sie übereinstimmen, haben Sie || d ||
quelle