Przewidywanie słowa za pomocą modelu Word2vec


20

Biorąc pod uwagę zdanie: „Kiedy otworzę drzwi ?? , zacznie się automatycznie nagrzewać”

Chciałbym uzyskać listę możliwych słów w? z prawdopodobieństwem.

Podstawową koncepcją stosowaną w modelu word2vec jest „przewidywanie” słowa na podstawie otaczającego kontekstu.

Po zbudowaniu modelu, jaka jest właściwa operacja wektorów kontekstowych, aby wykonać moje zadanie przewidywania nowych zdań?

Czy to po prostu suma liniowa?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

Zaimplementowałem powyższy algorytm i natknąłem się na pytanie: Dlaczego używa się softmax? Pokażę przykład dwóch funkcji normalizacyjnych: def softmax (w, t = 1.0): # Źródło: gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def normalizacja (w): zwróć w / np. suma (w) a = np. tablica ([. 0002, .0001, .01, .03]) normalizacja wydruku (a) wydruk softmax (a, t = 1 ) Porównajmy wyniki: [0,00496278 0,00248139 0,24813896 0,74441687] [0,24752496 0,24750021 0,24996263 0,25501221] Jak widzimy, softmax daje 0,03 w przybliżeniu takie samo prawdopodobieństwo w porównaniu z .0001 (którym jest

Odpowiedzi:


9

Word2vec działa w dwóch modelach CBOW i skip-gram. Weźmy model CBOW, ponieważ twoje pytanie idzie w taki sam sposób, jak przewiduje słowo docelowe, biorąc pod uwagę otaczające słowa.

Zasadniczo model opracowuje macierze wagi wejściowej i wyjściowej, które zależą od słów kontekstu wejściowego i wyjściowego słowa docelowego za pomocą ukrytej warstwy. Zatem propagacja wsteczna służy do aktualizacji wag, gdy różnica błędów między przewidywanym wektorem wyjściowym a bieżącą macierzą wyjściową.

Zasadniczo, przewidywanie słowa docelowego na podstawie danych słów kontekstowych jest używane jako równanie w celu uzyskania optymalnej macierzy masy dla danych danych.

Aby odpowiedzieć na drugą część, wydaje się nieco złożona niż tylko suma liniowa.

  1. Uzyskaj wszystkie wektory słów słów kontekstowych
  2. Uśrednij je, aby znaleźć ukryty wektor hwielkości warstwyNx1
  3. Uzyskaj macierz wyjściową syn1( word2vec.club gensim), która ma rozmiarVxN
  4. Pomnóż syn1przez hwynikowy wektor będzie miał zrozmiarVx1
  5. Obliczyć wektor prawdopodobieństwa y = softmax(z)z rozmiarem Vx1, gdzie najwyższe prawdopodobieństwo oznacza jednorazową reprezentację słowa docelowego w słowniku. Voznacza rozmiar słownictwa i Nrozmiar wektora osadzania.

Źródło: http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

Aktualizacja: Modele pamięci krótkoterminowej wykonują obecnie świetną robotę, przewidując kolejne słowa. Modele seq2seq są wyjaśnione w samouczku tensorflow . Jest też post na blogu o generowaniu tekstu.


Dziękuję Ci ! Czy znasz jakieś tego wdrożenie? (na przykład w ramach gensim). W przeciwnym razie obliczenie nie wydaje się zbyt skomplikowane.
DED

Cześć, czy możesz podać mi więcej szczegółów na temat pobierania macierzy wyjściowej (syn1 w twoim przykładzie) z wyszkolonego modelu osadzania w2v? Myślę, że w2v porzucił matrycę wyjściową po zakończeniu treningu.
Charles Chow,

bazując na moim zrozumieniu, twoją odpowiedzią na drugie pytanie jest zrekonstruowanie macierzy wyjściowej, czy to prawda?
Charles Chow,

1
Myślę, że warto zauważyć, że to nie działa jak klasyfikator sekwencji. Kolejność słów jest ignorowana.
nazwa wyświetlana

Można uzyskać macierz wyjściową, syn1po prostu zapisując model. tak, kolejność jest ignorowana, w przypadku aplikacji można faktycznie przejść z modelem seq2seq opartym na LSTM.
yazhi

4

Funkcja przewidywania brakujących słów została dodana jako funkcja w najnowszej wersji Word2Vec. Oczywiście twoje zdanie musi być zgodne ze składnią wejściową modelu Word2Vec używaną do szkolenia modelu (małe litery, słowa stop itp.)

Zastosowanie do przewidywania 3 najlepszych słów dla „Kiedy otwieram? Drzwi”:

print(model.predict_output_word(['When','I','open','door']), topn = 3)

Skąd wiedział, że centerjest między trzecim a czwartym słowem? To nie ma dla mnie sensu. Wyobrażam sobie, że można wstawić tylko parzyste słowa kontekstowe floor(len(n)/2))i floor(len(n)/2))+1
wybrałoby
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.