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 :)
nlp
clustering
word2vec
similarity
DaveTheAl
źródło
źródło
Odpowiedzi:
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
źródło
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 .
źródło
bert-as-service ( https://github.com/hanxiao/bert-as-service#building-a-qa-semantic-search-engine-in-3-minutes ) oferuje właśnie to rozwiązanie.
Aby odpowiedzieć na twoje pytanie, samodzielne wdrożenie go od zera byłoby dość trudne, ponieważ BERT nie jest trywialnym NN, ale dzięki temu rozwiązaniu możesz po prostu podłączyć go do swojego algo, który używa podobieństwa zdań.
źródło
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
źródło
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
źródło