Po pierwsze, zanim zaczniemy, polecam zapoznać się z podobnymi pytaniami w sieci, takimi jak /datascience/25053/best-practical-algorithm-for-sentence-similarity i https: // stackoverflow. com / pytania / 62328 / is-there-an-algorytm-that-tells-the-semantic-podobieństwo-dwóch-fraz
Aby określić podobieństwo zdań, musimy rozważyć, jakie mamy dane. Na przykład, jeśli posiadasz oznaczony zestaw danych, tj. Podobne zdania i zdania niepodobne, wówczas prostym podejściem mogłoby być użycie nadzorowanego algorytmu do klasyfikacji zdań.
Podejściem, które mogłoby określić strukturalne podobieństwo zdań, byłoby uśrednienie wektorów słów generowanych przez algorytmy osadzania słów, tj. Word2vec. Algorytmy te tworzą wektor dla każdego słowa, a podobieństwo cosinusowe reprezentuje podobieństwo semantyczne między słowami. (Daniel L 2017)
Korzystając z wektorów słów, możemy użyć następujących wskaźników do określenia podobieństwa słów.
- Odległość cosinusowa między osadzaniem słów
- Euklidesowa odległość między osadzeniami słów
Podobieństwo cosinus jest miarą podobieństwa między dwoma niezerowymi wektorami wewnętrznej przestrzeni produktu, która mierzy cosinus kąta między nimi. Kąt cosinus jest miarą nakładania się zdań pod względem ich zawartości.
Odległość euklidesowa między dwoma wektorami słów zapewnia skuteczną metodę pomiaru podobieństwa językowego lub semantycznego odpowiednich słów. (Frank D 2015)
Alternatywnie można obliczyć wektor własny zdań, aby określić podobieństwo zdań.
Wektory własne to specjalny zestaw wektorów związanych z liniowym układem równań (tj. Równanie macierzowe). Tutaj generowana jest macierz podobieństwa zdań dla każdego skupienia i obliczany jest wektor własny macierzy. Więcej informacji na temat podejścia do rankingu zdań opartego na oprogramowaniu Eigenvector można znaleźć w tym dokumencie https://pdfs.semanticscholar.org/ca73/bbc99be157074d8aad17ca8535e2cd956815.pdf
Dla kodu źródłowego Siraj Rawal ma notatnik w języku Python do tworzenia zestawu wektorów słów. Wektory słów można następnie wykorzystać do znalezienia podobieństwa między wyrazami. Kod źródłowy jest dostępny tutaj https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE
Inną opcją jest samouczek od Oreily, który wykorzystuje bibliotekę gensin Python do określania podobieństwa między dokumentami. Ten samouczek używa NLTK do tokenizacji, a następnie tworzy z korpusu model tf-idf (termin częstotliwość-odwrotna częstotliwość dokumentów). Następnie tf-idf służy do określenia podobieństwa dokumentów. Samouczek jest dostępny tutaj https://www.oreilly.com/learning/how-do-i-compare-document-similarity-using-python