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 :)


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


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 .



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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.