Bester praktischer Algorithmus für Satzähnlichkeit

17

Ich habe zwei Sätze, S1 und S2, die beide (normalerweise) eine Wortanzahl unter 15 haben.

Was sind die praktischsten und erfolgreichsten (maschinelles Lernen) Algorithmen, die möglicherweise einfach zu implementieren sind (neuronales Netzwerk ist in Ordnung, es sei denn, die Architektur ist so kompliziert wie Google Inception usw.).

Ich suche einen Algorithmus, der gut funktioniert, ohne zu viel Zeit in ihn zu stecken. Gibt es Algorithmen, die für Sie erfolgreich und einfach zu bedienen sind?

Dies kann, muss aber nicht in die Kategorie Clustering fallen. Mein Hintergrund ist maschinelles Lernen, also sind alle Vorschläge willkommen :)

DaveTheAl
quelle
Was haben Sie umgesetzt? Ich stehe auch vor dem gleichen Problem und muss eine Lösung für "k" -bezogene Artikel in einem Korpus finden, der ständig aktualisiert wird.
Dileepa

Antworten:

16

Cosine Ähnlichkeit für Vector Space könnte man beantworten: http://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/

Oder Sie könnten den Eigenvektor jedes Satzes berechnen. Aber das Problem ist, was ist Ähnlichkeit?

"Dies ist ein Baum", "Dies ist kein Baum"

Wenn Sie die semantische Bedeutung des Satzes überprüfen möchten, benötigen Sie einen Wortvektor-Datensatz. Mit dem Wortvektor-Datensatz können Sie die Beziehung zwischen Wörtern überprüfen. Beispiel: (König - Mann + Frau = Königin)

Siraj Raval hat ein gutes Python-Notizbuch zum Erstellen von Wordvector-Datasets: https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE

Christian Frei
quelle
8

Ein Ansatz, den Sie versuchen könnten, ist die Mittelung von Wortvektoren, die durch Worteinbettungsalgorithmen (word2vec, glove usw.) generiert wurden. Diese Algorithmen erzeugen einen Vektor für jedes Wort und die Kosinusähnlichkeit zwischen ihnen repräsentiert die semantische Ähnlichkeit zwischen den Wörtern. Im Fall der Durchschnittsvektoren unter den Sätzen. Ein guter Ausgangspunkt, um mehr über diese Methoden zu erfahren, ist dieses Papier: Wie gut Satzeinbettungen die Bedeutung erfassen . Es werden einige Methoden zum Einbetten von Sätzen erörtert. Ich schlage auch vor, dass Sie sich mit dem unbeaufsichtigten Lernen von Satzeinbettungen unter Verwendung von kompositorischen n-Gramm-Merkmalen befassen . Außerdem enthalten sie den Code und einige Verwendungsanweisungen in diesem Github-Repo .

feynman410
quelle
1

Sie sollten https://github.com/seatgeek/fuzzywuzzy#usage überprüfen . fuzzywuzzy ist eine großartige Bibliothek für den String / Text-Abgleich, die eine Zahl zwischen 0 und 100 ergibt, basierend auf der Ähnlichkeit zweier Sätze. Mit Levenshtein Distance werden die Unterschiede zwischen Sequenzen in einem einfach zu verwendenden Paket berechnet. Schauen Sie sich auch diesen Blog-Beitrag an, um eine detaillierte Erklärung zu erhalten, wie fuzzywuzzy die Arbeit macht. Dieser Blog wird auch vom Fuzzywuzzy-Autor geschrieben

karthikeyan mg
quelle
1

Dieser Blog hat die Lösung für Kurztextähnlichkeit. Sie verwenden hauptsächlich das BERT-Modell für neuronale Netze, um Ähnlichkeiten zwischen Sätzen zu finden. https://medium.com/@vimald8959/sentence-categorization-short-text-similarity-61bb88fae15e

vimal Dharmalingam
quelle
Hallo, willkommen bei Data Science Stack Exchange! Wenn Sie von einer externen Website auf eine Lösung verweisen, sollten Sie in Ihrer Antwort eine Zusammenfassung schreiben. Dies ist in der Tat einfacher zu lesen und verhindert, dass Ihre Antwort veraltet, wenn sich die Zielseite ändert oder der Link abbricht.
Romain Reboulleau
Schön, das ist wirklich gutes Zeug. Sie verwenden also grundsätzlich BERT? @ RomainReboulleau ist auf jeden Fall richtig!
DaveTheAl