Ich versuche Cosinus-Ähnlichkeitswerte zwischen allen möglichen Kombinationen von Textdokumenten aus einem Korpus zu berechnen. Ich verwende scikit-learn's cosine_similarity
Funktion, um dies zu tun. Da mein Korpus riesig ist (30 Millionen Dokumente), ist die Anzahl möglicher Kombinationen zwischen den Dokumenten im Korpus einfach zu hoch, um sie als Datenrahmen zu speichern. Daher möchte ich die Ähnlichkeitswerte unter Verwendung eines Schwellenwerts filtern, während sie erstellt werden, bevor sie in einem Datenrahmen für die zukünftige Verwendung gespeichert werden. Während ich das tue, möchte ich auch die entsprechenden IDs jedes dieser Dokumente den Index- und Spaltennamen des Datenrahmens zuweisen. Für einen Datenwert im Datenframe sollte jeder Wert Index- (Zeilen-) und Spaltennamen haben, die die Dokumenten-IDs sind, für die der Wert ein Kosinus-Ähnlichkeits-Score ist.Filtern von Kosinus-Ähnlichkeitswerten in einen Pandas-Datenrahmen
similarity_values = pd.DataFrame(cosine_similarity(tfidf_matrix), index = IDs, columns= IDs)
Dieses Stück Code funktioniert gut ohne den Filterteil. IDs
ist eine Listenvariable, bei der alle Dokument-IDs entsprechend der tfidf-Matrix sortiert sind.
Diese Änderung hilft beim Filtern, aber die Ähnlichkeitswerte werden in boolesche (Wahr/Falsch) -Werte umgewandelt. Wie kann ich anstelle der booleschen True/False-Werte die tatsächlichen Cosinus-Ähnlichkeitswerte beibehalten?
cosine_similarity ausgibt eine quadratische Matrix ist und daß es möglich sein kann, dass in einer einzigen Spalte ein Wert> 0,65 und andere weniger. Also, in diesem Fall, wie willst du die Spalte im Dataframe erscheinen? –
@VivekKumar Gute Frage. Ich möchte, dass der Datenrahmen alle Werte übereinander gestapelt hat. d.h. jede Zeile in dem Datenrahmen sollte nur einen Ähnlichkeitswert und die entsprechenden Dokument-IDs aufweisen. 'similarity_values = similarity_values.stack(). reset_index(). umbenennen (columns = {'level_0': 'ID1', 'level_1': 'ID2', 0: 'Score'})' – Minu