Erstens empfehle ich, dass Sie sich vor Beginn mit ähnlichen Fragen im Netzwerk befassen, z. B. /datascience/25053/best-practical-algorithm-for-sentence-similarity und https: // stackoverflow. com / questions / 62328 / gibt es einen Algorithmus, der die semantische Ähnlichkeit zweier Phrasen beschreibt?
Um die Ähnlichkeit von Sätzen zu bestimmen, müssen wir überlegen, über welche Art von Daten wir verfügen. Wenn Sie beispielsweise einen beschrifteten Datensatz hatten, dh ähnliche Sätze und ungleiche Sätze, könnte ein einfacher Ansatz darin bestanden haben, einen überwachten Algorithmus zur Klassifizierung der Sätze zu verwenden.
Ein Ansatz, der die Satzstrukturähnlichkeit bestimmen könnte, wäre, die Wortvektoren zu mitteln, die durch Worteinbettungsalgorithmen, dh word2vec, erzeugt werden. Diese Algorithmen erzeugen einen Vektor für jedes Wort und die Kosinusähnlichkeit zwischen ihnen repräsentiert die semantische Ähnlichkeit zwischen Wörtern. (Daniel L 2017)
Unter Verwendung von Wortvektoren können wir die folgenden Metriken verwenden, um die Ähnlichkeit von Wörtern zu bestimmen.
- Kosinusabstand zwischen Worteinbettungen der Wörter
- Euklidischer Abstand zwischen Worteinbettungen der Wörter
Die Kosinusähnlichkeit ist ein Maß für die Ähnlichkeit zwischen zwei Nicht-Null-Vektoren eines inneren Produktraums, der den Kosinus des Winkels zwischen ihnen misst. Der Kosinuswinkel ist das Maß für die inhaltliche Überlappung der Sätze.
Der euklidische Abstand zwischen zwei Wortvektoren bietet eine effektive Methode zur Messung der sprachlichen oder semantischen Ähnlichkeit der entsprechenden Wörter. (Frank D 2015)
Alternativ können Sie den Eigenvektor der Sätze berechnen, um die Ähnlichkeit der Sätze zu bestimmen.
Eigenvektoren sind eine spezielle Menge von Vektoren, die einem linearen Gleichungssystem (dh einer Matrixgleichung) zugeordnet sind. Hier wird für jeden Cluster eine Satzähnlichkeitsmatrix erzeugt und der Eigenvektor für die Matrix berechnet. Sie können mehr über den auf Eigenvector basierenden Ansatz für das Satzranking in diesem Artikel lesen: https://pdfs.semanticscholar.org/ca73/bbc99be157074d8aad17ca8535e2cd956815.pdf
Für den Quellcode hat Siraj Rawal ein Python-Notizbuch, um eine Reihe von Wortvektoren zu erstellen. Die Wortvektoren können dann verwendet werden, um die Ähnlichkeit zwischen Wörtern zu finden. Der Quellcode ist hier verfügbar: https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE
Eine andere Option ist ein Tutorial von Oreily, das die gensin Python-Bibliothek verwendet, um die Ähnlichkeit zwischen Dokumenten zu bestimmen. In diesem Lernprogramm wird NLTK zum Tokenisieren verwendet und anschließend aus dem Korpus ein tf-idf-Modell (term frequency-inverse document frequency) erstellt. Die tf-idf wird dann verwendet, um die Ähnlichkeit der Dokumente zu bestimmen. Das Tutorial finden Sie hier https://www.oreilly.com/learning/how-do-i-compare-document-similarity-using-python