Як реально працює Word2Vec (Doc2Vec)?
Друзі, хто має досвід та розуміння в сфері обробки природної мови — поясніть, будь ласка, на пальцях як працює модель для векторного представлення слів word2vec.
Один із знайомих NLP Engineerів пояснив так: нібито модель приймає як input великий текстовий корпус і співставляє кожному слову вектор, видаваючи як output координати слів. Тобто якщо слідувати цій логіці, то спочатку модель формує з цього корпусу словник, а потім запам’ятовуєте порядок розташування слова в різних документах і формує з цього вектор і якось там щось порівнює. Чи правильне це розуміння? Чи ні?
Розкажіть, будь ласка, як це працює детально.
Я прекрасно розумію, що пояснення вимагатиме значної інтектуальної праці, тому готовий вислати пляшку гарного вина автору/авторці найбільш детальної відповіді :)
11 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівКоментар порушує правила спільноти і видалений модераторами.
Коментар порушує правила спільноти і видалений модераторами.
це перше відео з уроку
в наступному є описано метод, який називається negative sampling.
думаю, це те, що треба
Кажись тут есть описание nlp.stanford.edu/IR-book
-
Я розумію, що таке Word Count Vector, TfIDF, розумію як влаштовані нейронні мережі (input layer, hidden layer, output), більше того я можу навіть користуватися word2vec в Gensim )) Але дуже хочеться розуміти як воно працює всередині.
Дякую за посилання. Не повірите — я їх пару днів назад дивився. Але все одно трохи не зрозумів. Спробую пояснити, що саме я не розумію.
Наприклад, в мене є корпус, який складається з 100 000 твітів англійською мовою. Як буде формуватися векторне представлення слова «Trump» в цьому корпусі? Яка механіка процесу? Що означатимуть цифри у векторі?
Не можна до кінця сказати, як буде формуватись вектор для якогось певного слова. Всі вектори вчаться таким чином, щоб слова, що зустрічаються у схожих контекстах, мали близькі представлення. Відповідно, яким саме буде вектор для слова Trump залежить від того, якими будуть вектори для всіх інших слів, ну і навпаки.
Цифри в векторі нічого конкретного не означають — сенс слова кодується близкістю його вектора до векторів всіх інших слів.
Я це все розумію )) Єдине з чим проблема, так це як саме вчаться вектора, точніше на чому. Що вони беруть за інпут? розташування слова, кількість букв в ньому, тощо
На вхід беруть слова. Кожному слову відповідає вектор. Є два класичні способи вчити — передбачати слово по оточуючим словам, чи оточуючі слова по слову.
Кількість букв не має значення. Є дві підмоделі:
1) continuous bag-of-words (CBOW) передбачає поточне слово на основі оточуючих слів навколо, ліворуч і праворуч, порядок слів значення не має, лише розмір вікна. Input — оточуючі слова
2) skip-gram модель навпаки по центральному слові вчиться передбачити оточення. Чим ближче слово до центрального тим більшу вагу надає їй ця модель. Input — центральне слово.
Векторне представлення не є строгим. Має значення лише відносна косинусна відстань між векторами. Семантичний простір можна обертати відносно будь-якї осі. Цією властивістю і користуються для семантичного перекладу, коли суміщають простори натреновані на різхних мов. Бо відстань між France i Paris (для корпусу англійської) має бути бути мала і приблизно така ж як і між Франція і Париж (в корпусі української).
Ось тут можете погратися і подивитися на відстані від будь-якого слова/фрази до країн світу. Зроблено на основі doc2vec
www.connexun.com/...ysis-short-text-geoparser
-