2016-07-08 34 views
5

Szczególną praktyką języka naturalnego jest obliczanie podobieństwa między dwoma słowami za pomocą WordNet. Zacznę moje pytanie z następującego kodu Pythona:Jak obliczyć podobieństwo słów angielskich, które nie pojawiają się w WordNet?

from nltk.corpus import wordnet 
sport = wordnet.synsets("sport")[0] 
badminton = wordnet.synsets("badminton")[0] 
print(sport.wup_similarity(badminton)) 

Mamy dostanie 0,8421

Teraz co jeśli spojrzeć na "haha" i "lol" w następujący sposób:

haha = wordnet.synsets("haha") 
lol = wordnet.synsets("lol") 
print(haha) 
print(lol) 

Będziemy uzyskać

[] 
[] 

Następnie nie możemy uznać podobieństwa między nimi. Co możemy zrobić w tym przypadku?

+1

Jaką podobieństwa próbujesz obliczyć? Semantyczne podobieństwo? Nie będzie można go obliczyć bez jakiejś bazy danych znaczeń słów (takich jak WordNet). – BrenBarn

+0

Co masz na myśli? Korzystam już z WordNet, podobieństwo jest obliczane za pomocą podobieństwa Wu-Palmer. Proszę uważnie przeczytać kod. –

+0

Spójrz na zadanie STS: http://alt.qcri.org/semeval2016/task1/ I bezwstydna wtyczka: https://github.com/alvations/stasis – alvas

Odpowiedz

6

Można utworzyć przestrzeń semantyczną z matrycami współwystępowanie przy użyciu narzędzia jak wnikliwie(DIStributional SEmantics Composition Toolkit) i jesteś ustawiony do pomiaru semantyczne podobieństwo słów lub fraz (jeśli komponować słów).

W twoim przypadku dla ha i lol trzeba zbierać te cooccurrences.

Kolejną rzeczą do wypróbowania jest word2vec.

+0

Czy możesz zawęzić do niektórych wskazówek lub zacząć punktów, które mogę sam przeszukać? –

+1

Myślę, że łatwy punkt wyjścia jest po prostu do obliczenia kolokacji bigram z zestawu danych, tj. Które słowo występuje bardzo często obok innego słowa. Przekonasz się, że np. * ha * i * lol * mają bardzo podobnych sąsiadów. Afaik to idea [word2vec] (https://en.wikipedia.org/wiki/Word2vec) itp. – patrick

5

Możliwe są dwa inne sposoby:

CBOW: ciągły torba słowa

pominąć modelu gram: Ten model jest odwrót od modelu CBOW

spojrzenie na to: https://www.quora.com/What-are-the-continuous-bag-of-words-and-skip-gram-architectures-in-laymans-terms

Model ten jest dobrze reprezentowany tutaj: https://www.tensorflow.org/tutorials/word2vec, a także GENSIM jest dobrą biblioteką Pythona do robienia takich rzeczy


próbować szukać Tensorflow Solutions, na przykład tak: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/word2vec/word2vec_basic.py

Albo próbować szukać word2vec: https://en.wikipedia.org/wiki/Word2vec

2

Istnieją różne modele do pomiaru podobieństwa, takie jak word2vec lub rękawicy, ale wydaje aby wyglądać bardziej na korpus, który zawiera społeczne, nieformalne frazy, takie jak "lol".

Jednak zamierzam wywołać word2vec, ponieważ prowadzi do tego, co moim zdaniem jest odpowiedzią na twoje pytanie.

Podstawową koncepcją word2vec (i innych modeli osadzania słów, takich jak rękawiczki) jest reprezentacja słów w przestrzeni wektorowej, która zawiera relacje między wyrazami. To bardzo dobrze nadaje się do pomiaru podobieństwa, ponieważ wektory mają dużo ustalonej matematyki. Możesz przeczytać więcej o technicznych szczegółach word2vec w oryginalnym paper,, ale całkiem lubię this blog post, ponieważ jest dobrze napisany i zwięzły.

Ponownie, ponieważ word2vec jest tylko modelem, musisz sparować go z odpowiednim zestawem treningowym, aby uzyskać pożądany zakres.W Internecie poruszają się wstępnie wyszkolone modele, takie jak this bunch.. Zestaw treningowy pozwala na wyszukiwanie większej liczby terminów niż modelu.

Z pewnością możesz użyć tych wstępnie wyszkolonych modeli, jeśli mają zwroty społeczne, takie jak te, których szukasz. Jeśli jednak nie widzisz modelu, który został przeszkolony w zakresie odpowiedniego korpusu, możesz samodzielnie ćwiczyć model. Proponuję Twittera lub Wikipedii dla corporów (zestawy treningowe) i implementacji word2vec w gensim jako modelu osadzania słów.

2

Możesz użyć innych frameworków. Próbowałem także NLTK, ale ostatecznie wylądowałem na spacy (spacy.io) bardzo szybkiej i funkcjonalnej strukturze. Istnieje metoda na słowa zwane "podobieństwem", które komplementuje do innych słów (ale działa również w przypadku zdań, dokumentów itp.). Jest zaimplementowany za pomocą word2vec. Właściwie to nie wiem, jak duże jest ich słownictwo i jak się boryka, jeśli słowo jest nieznane, ale warto spróbować.

Byłem też grać trochę z tego jeden: https://radimrehurek.com/gensim/models/word2vec.html Gdzie w 2 liniach można załadować dużego modelu word2vec Google (ten porty projektu google word2vec biblioteka C++ w Pythonie) dostępny tutaj: https://docs.google.com/file/d/0B7XkCwpI5KDYaDBDQm1tZGNDRHc/edit