Прогнозування слова за допомогою моделі Word2vec


20

Беручи під увагу пропозиція: «Коли я відкриваю ?? двері він починає нагрів автоматично»

Я хотів би отримати список можливих слів у ?? з вірогідністю.

Основне поняття, яке використовується у моделі word2vec, - це "передбачення" слова за оточуючим контекстом.

Як тільки модель буде побудована, що це за правильна операція векторів контексту для виконання мого завдання прогнозування нових пропозицій?

Це просто лінійна сума?

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

Я реалізував вищевказаний алгоритм і наштовхнувся на питання: Для чого використовується softmax? Дозвольте показати приклад двох функцій нормалізації: def softmax (w, t = 1.0): # Джерело: gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def нормалізація (w): повернути w / np.sum (w) a = np.array ([. 0002, .0001, .01, .03]) нормалізація друку (a) softmax друку (a, t = 1 ) Порівняємо виходи: [0,00496278 0,00248139 0,24813896 0,74441687] [0,24752496 0,24750021 0,24996263 0,25501221] Як ми бачимо, softmax дає .03 приблизно таку ж ймовірність, що і для .0001 (що є

Відповіді:


9

Word2vec працює у двох моделях CBOW та пропуск-грам. Візьмемо модель CBOW, оскільки ваше запитання йде так само, як і передбачити цільове слово, враховуючи навколишні слова.

Принципово, модель розробляє вхідні та вихідні матриці ваги, які залежать від вхідних контекстних слів та вихідного цільового слова за допомогою прихованого шару. Таким чином, зворотне поширення використовується для оновлення ваг, коли різниця помилок між прогнозованим вектором виходу та поточною матрицею виходу.

В основному, прогнозування цільового слова з заданих контекстних слів використовується як рівняння для отримання оптимальної матриці ваги для даних даних.

Відповісти на другу частину здається трохи складніше, ніж просто лінійна сума.

  1. Отримайте всі слова векторів контекстних слів
  2. Середнє значення для їх виявлення прихованого шару hрозміру шаруNx1
  3. Отримайте вихідну матрицю syn1( word2vec.cабо gensim) розміруVxN
  4. Множення з syn1допомогою h, результуючий вектор буде zз розміромVx1
  5. Обчисліть вектор ймовірності y = softmax(z)з розміром Vx1, де найбільша ймовірність позначає однозначне подання цільового слова в лексиці. Vпозначає розмір словникового запасу і Nпозначає розмір вбудованого вектора.

Джерело: http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

Оновлення: Моделі довготривалої пам'яті в даний час роблять велику роботу в передбаченні наступних слів. Моделі seq2seq пояснюються в навчальному посібнику з tensorflow . Також є публікація в блозі про генерування тексту.


Дякую ! Вам відомо про будь-яку реалізацію цього? (наприклад, як частина gensim). В іншому випадку це не здається занадто складним для обчислення.
ДЕРЖАВ

Привіт, ви могли б дати мені більше подробиць про те, як отримати вихідну матрицю (syn1 у вашому прикладі) з навченої моделі вбудовування w2v? Я думаю, що w2v упустив вихідну матрицю, коли закінчувати тренування.
Чарльз Чоу

Виходячи з мого розуміння, ваша відповідь на друге питання полягає в реконструкції вихідної матриці, це правильно?
Чарльз Чоу

1
Я думаю, що варто відзначити, що це працює не як класифікатор послідовностей. Порядок слів ігнорується.
displayname

Можна було отримати вихідну матрицю syn1, просто збереживши модель. так, впорядкування ігнорується, оскільки програма може насправді йти з LSTM-моделлю seq2seq.
яджі

4

В останній версії Word2Vec додано передбачення пропущених слів як функціонал. Звичайно, ваше речення повинно відповідати вхідному синтаксису моделі Word2Vec, який використовується для навчання моделі (малі літери, стоп-слова тощо)

Використання для прогнозування перших 3 слів для "Коли я відкриваю? Двері":

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

Звідки воно знало, що centerслово між 3-м та 4-м словом? Для мене це не має сенсу. Я б уявив, що можна вставити лише парні слова з контексту, і це виділить слово між floor(len(n)/2))таfloor(len(n)/2))+1
bmc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.