Najlepszy praktyczny algorytm podobieństwa zdań


18

Mam dwa zdania, S1 i S2, oba o liczbie słów (zwykle) poniżej 15.

Jakie są najbardziej praktyczne i skuteczne algorytmy (uczenie maszynowe), które są prawdopodobnie łatwe do wdrożenia (sieć neuronowa jest w porządku, chyba że architektura jest tak skomplikowana jak Google Inception itp.).

Szukam algorytmu, który będzie działał dobrze bez poświęcania mu zbyt wiele czasu. Czy są jakieś algorytmy, które okazały się skuteczne i łatwe w użyciu?

Może to, ale nie musi należeć do kategorii klastrowania. Moje doświadczenie wywodzi się z uczenia maszynowego, więc wszelkie sugestie są mile widziane :)


Co wdrożyłeś? Ja też mam do czynienia z tym samym, muszę znaleźć rozwiązanie dla artykułów związanych z „k” w korpusie, który ciągle się aktualizuje.
Dileepa

Odpowiedzi:


16

Cosinus podobieństwo do Vector Space może być odpowiedzią: http://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/

Lub możesz obliczyć wektor własny każdego zdania. Ale problem polega na tym, jakie jest podobieństwo?

„To jest drzewo”, „To nie jest drzewo”

Jeśli chcesz sprawdzić semantyczne znaczenie zdania, potrzebujesz zestawu danych wordvector. Za pomocą zestawu danych wordvector można sprawdzić związek między słowami. Przykład: (król - mężczyzna + kobieta = królowa)

Siraj Raval ma dobry notatnik Pythona do tworzenia zestawów danych wordvector: https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE


8

Jednym z podejść, które można wypróbować, jest uśrednianie wektorów słów generowanych przez algorytmy osadzania słów (word2vec, rękawica itp.). Algorytmy te tworzą wektor dla każdego słowa, a podobieństwo cosinusowe reprezentuje podobieństwo semantyczne między słowami. W przypadku średnich wektorów wśród zdań. Dobrym punktem wyjścia do dowiedzenia się więcej o tych metodach jest ten artykuł: Jak dobrze osadzone zdania mają znaczenie . Omówiono niektóre metody osadzania zdań. Sugeruję również, abyś przyjrzał się nieautoryzowanemu uczeniu się osadzania zdań przy użyciu funkcji n-gramów kompozytorskich, których autorzy twierdzą, że ich podejście pokonało najnowocześniejsze metody. Zapewniają również kod i niektóre instrukcje użytkowania w tym repozytorium github .



2

Powinieneś sprawdzić https://github.com/seatgeek/fuzzywuzzy#usage . fuzzywuzzy to niesamowita biblioteka do dopasowywania ciągów / tekstu, która daje liczbę od 0 do 100 w oparciu o to, jak podobne są dwa zdania. Wykorzystuje Levenshtein Distance do obliczenia różnic między sekwencjami w prostym w użyciu pakiecie. Sprawdź również ten post na blogu, aby uzyskać szczegółowe wyjaśnienie, w jaki sposób fuzzywuzzy wykonuje swoją pracę. Ten blog jest również napisany przez autora fuzzywuzzy


1

Ten blog ma rozwiązanie dla krótkiego podobieństwa tekstu. Używają głównie modelu sieci neuronowej BERT, aby znaleźć podobieństwa między zdaniami. https://medium.com/@vimald8959/sentence-categorization-short-text-similarity-61bb88fae15e


Cześć, witamy w Data Science Stack Exchange! Odnosząc się do rozwiązania z zewnętrznej strony internetowej, rozważ napisanie streszczenia w swojej odpowiedzi. Rzeczywiście, będzie to łatwiejsze do odczytania i zapobiegnie utracie ważności odpowiedzi w przypadku zmiany strony docelowej lub przerwania łącza.
Romain Reboulleau,

Fajnie, to naprawdę dobre rzeczy. Więc w zasadzie używają BERT? @RomainReboulleau ma zdecydowanie rację!
DaveTheAl
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.