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

DaveTheAl
źródło
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

Christian Frei
źródło
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 .

feynman410
źródło
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

mg karthikeyan
źródło
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

vimal Dharmalingam
źródło
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