Латексный анализ формул наггетсов очень странный, многие формулы разбираются некорректно, рекомендуется смотреть исходный текст.векторная семантика
Стэнфордский классический учебник НЛПSpeech and Language Processing-Vector SemanticsУчебные заметки.
Как мы выражаем значение слова? Вы можете подумать об одном из них, используя вектор для представления слова! Правильно, в этой главе речь пойдет о представлении слов.
Документы и векторы
Если вектор используется для представления документа, как он должен быть представлен?
Предполагая, что теперь есть четыре документа, мы подсчитываем, сколько раз каждое слово появляется в документе, и мы можем получить таблицу:
- | As You Like It | Twelfth Night | Julius Caesar | Henry V |
---|---|---|---|---|
battle | 1 | 0 | 7 | 13 |
good | 114 | 80 | 62 | 89 |
fool | 36 | 58 | 1 | 4 |
wit | 20 | 15 | 2 | 3 |
Конечно, слов в документе гораздо больше.
В приведенной выше таблице 4 слова, поэтому каждый документ можно представить в виде вектора частот слов:
As You Like It ------> [ 1,114,36,20]
Twelfth Night ------> [ 0, 80,58,15]
Julius Caesar ------> [ 7, 62, 1, 2]
Henry V ------> [13, 89, 4, 3]
Если слов много, скажемN
, то каждый документ можно представить в видеN
размерный вектор. Видно, что такое векторное представлениередкий.
слова и векторы
Кроме того, документы могут быть представлены в виде вектора, так же как и слова.
Как и в документе, мы можем подсчитать таблицу, но разница в том, что вместо подсчета количества слов мы подсчитываем частоту появления двух слов вместе. Посмотрите на таблицу, и вы узнаете:
- | aardvark | ... | computer | data | pinch | result | sugar |
---|---|---|---|---|---|---|---|
apricot | 0 | ... | 0 | 0 | 1 | 0 | 1 |
pineapple | 0 | ... | 0 | 0 | 1 | 0 | 1 |
digital | 0 | ... | 2 | 1 | 0 | 1 | 0 |
information | 0 | ... | 1 | 6 | 0 | 4 | 0 |
... |
Эта форма представляет собойВ таблице каждое число представляет собой количество раз, когда слово в текущем столбце появляется после слова в текущей строке, что составляет контекст, поэтому эта таблица фактически является контекстной матрицей, в которойV
размер всего словаря, то есть количество слов.
Вынимаем каждую строку и получаем векторное представление слова, например:
digital ------> [ 0,..., 2, 1, 0, 1, 0]
Точно так же такое представлениередкий.
Косинус вычисляет сходство
Теперь, когда у нас есть векторное представление документов или слов, как нам рассчитать сходство между ними? Очень распространен методКосинусное сходство.
Изучив математику в средней школе, вы знаете, что ** скалярное произведение двух векторов (скалярное произведение)илиВнутренний продукт** можно рассчитать по следующей формуле:
И модуль вектора (длина вектора):
снова:
который:
Итак, мы можем вычислитьиКосинус :
Итак, чем больше косинус двух векторов, тем больше они похожи.
TF-IDF
Далее мы представим TF-IDF, Во-первых, объясните слово:
TF-IDF = Term Frequency - Inverse Document Frequency
Как только вы поймете название, вы поймете половину его!
Так что жеterm-frequency
Шерстяная ткань?term-frequencyколичество раз, которое слово встречается в документе.
Так что жеIDFШерстяная ткань? Сначала мы разбираемсяDF(document frequency).
Указывает количество документов, в которых встречается это слово!
Так,IDFэто:
в,N
количество документов в коллекции.
Во избежание слишком большого значения обычно берут логарифм:
В этот момент мы можем посчитать словоизtf-idf
Масса:
На данный момент наша первая форма становится:
- | As You Like It | Twelfth Night | Julius Caesar | Henry V |
---|---|---|---|---|
battle | 0.074 | 0 | 0.22 | 0.28 |
good | 0 | 0 | 0 | 0 |
fool | 0.019 | 0.021 | 0.0036 | 0.0083 |
wit | 0.049 | 0.044 | 0.018 | 0.022 |
Все представленные выше векторные представления до сих порредкий, а затем ввести **плотное (плотное)** векторное представление —word2vec!
Word2Vec
Это должно быть знакомо каждому и должно рассматриваться как стандарт в области НЛП.
Я написал заметку на word2vec раньшеСамостоятельная реализация word2vec (модель skip-gram), но это все еще довольно грубо. Tensorflow также имеет учебникVector Representations of Words, но если у вас нет основы, все еще есть некоторые концепции, которые трудно понять. Итак, чтобы понять word2vec относительно полно, вам нужно комбинировать различные материалы. Представляя учебники Стэнфорда, эта заметка также представит другие статьи, чтобы сделать некоторые сравнения и размышления.Я надеюсь, что эта заметка может дать вам относительно полное понимание.
word embedding
Сначала объяснимвложение словКонцепция чего-либо. Все векторные представления перед этим разделом являются разреженными, обычно это многомерный вектор, и большинство элементов в векторе равны 0. ТакembeddingКакая разница?
Встраивание также использует вектор для представления слова, но использует более низкое измерение, плотно представленное.
Если вы используете предыдущее разреженное представление, вы можете представитьhello
это слово:
Затем используйтевстроенныйКак это будет выглядеть после представления:
Разница видна сразу. Итак, очевидно, что встраивание слов — это хорошо:
- Не вызовет пространственного взрыва, потому что размеры устанавливаются нами, как правило, относительно небольшие
- Вектор плотный и не требует различных алгоритмов оптимизации, используемых разреженными векторами для повышения эффективности вычислений.
Встраивание слов понятно, так что же такое word2vec? На самом деле этоПредставьте слова как плотные векторы фиксированной размерности! Звучит просто, но есть много хитростей.
модель данных
Предположим, у нас есть большой корпус текстов, и нам нужно использовать этот корпус для обучения векторным представлениям слов. Итак, как вы должны тренироваться?
Конечно, вы можете подумать о методах, основанных на подсчете, как в предыдущих подразделах, мы не будем об этом говорить.
word2vec имеет два распространенных метода подготовки данных:
- CBOW, предсказать целевое слово с контекстными словами
- skip-gram, используя целевое слово для предсказания слова контекста
Используя пример в тензорном потоке:
the quick brown fox jumped over the lazy dog
Например, предположим, что размер нашего окна2
,целевое слововыберитеfox
.
еслиskip-gramмодель, мы подготовим данные следующим образом:
(fox, quick)
(fox, brown)
(fox, jumped)
(fox, over)
То есть целевое слово, мы можем построитьwindow_size
пара обучающих данных.
еслиCBOWмодель, мы подготовим данные следующим образом:
([quick brown jumped over], fox)
Увидеть разницу?
Короче,skip-gramиCBOWПросто две противоположные модели данных.Learning Word EmbeddingЕсть два графика, которые представляют методы ввода двух моделей:
модель со скип-граммом
CBOW модель
Модель данных должна быть понятной.
В отличие от прежде,word2vec не заботится о частоте появления соседних слов вместе раньше, а заботится только о том, принадлежит ли слово контексту другого слова.То есть, word2vec не заботится о том, какое следующее слово будет предсказано на основе этого слова, а заботится только о том, есть ли контекстуальная связь между этими двумя словами.
Итак, все, что нужно word2vec, этобинарный классификатор: «Является ли это слово контекстным словом для другого слова?»
Итак, для обучения модели word2vec мы фактически обучаем бинарный классификатор. И бинарный классификатор, должно быть, легко придумать.Logistic Regression! Что касается логистической регрессии, вы можете увидеть другие мои заметкиLogistic Regression.
На самом деле скип-граммы используются чаще, потому что есть поговорка, что модель CBOW хорошо работает с небольшими наборами данных, а скип-граммы лучше работают с большими наборами данных.
Модель нейронного языка
Здесь требуется дополнительное уточнение. В Tensorflow есть описание **нейронно-вероятностной языковой модели**.
При обучении традиционных нейровероятностных языковых моделей обычно используется правило максимального правдоподобия, чтобы максимизировать вероятность softmax следующего слова на основе предыдущих слов, то есть:
в,На самом деле этоииздот-продакшн.
Тогда цель обучения модели таким образом состоит в том, чтобы максимизироватьлогарифмическая вероятность:
Так есть ли в этом проблема?слишком много расчетов, потому что на каждом этапе обучения вам нужно использовать softmax для вычисления значения вероятности для каждого слова в словаре! Эта модель показана на рисунке ниже:
Как было сказано ранее, нашему word2vec не нужна полная вероятностная модель, нам нужно только обучить бинарный классификатор из kшумовые словаопределить правильныйцелевые слова. Этотk
шумовые слова выбираются случайным образом, метод, называемыйотрицательная выборка, так как выбранный набор слов не является правильным целевым словом. Эта модель показана на рисунке ниже:
Таким образом, цель, которую мы хотим максимизировать, состоит в следующем:
в,Указывает, что бинарная логистическая регрессия содержит цель в контексте h в наборе данных D.Вероятность.
The classifier
сказано вышеотрицательная выборка. Что такое отрицательная выборка?Случайным образом выберите k слов и сформируйте отрицательную выборку обучения с целевым словом..
Теперь вернемся к учебнику Стэнфорда. Вот основные моменты для обучения модели skip-gram:
- Возьмите образец, состоящий из целевого слова и контекстного слова, в качестве обученияположительный образец
- Случайным образом выберите несколько образцов, состоящих из слов и целевых слов, для обучения.отрицательный образец
- Используйте логистическую регрессию для обучения бинарного классификатора различению двух случаев.
- Вес регрессии принадлежит намembedding
Что нужно word2vec, так это обучить бинарную логистическую регрессию, учитывая цельи контекст кандидатакортеж из,возвращениеТочноВероятность контекстного слова :
Так,нетВероятность контекстного слова равна:
Так как же классификатор вычисляет эту вероятностьШерстяная ткань? Модель скип-грамм имеет такое допущение:Подобные слова имеют похожие представления встраивания!
То есть мы можем использовать подобие представления вложения двух слов для представления вероятности! Сходство использует косинусное сходство, о котором мы упоминали выше:
Конечно, результат скалярного произведения не является вероятностным представлением, нам нужно использоватьlogisticили позвоните по телефонуsigmoidфункцию, преобразуем ее в вероятностное представление:
Так:
Приведенная выше формула — это просто вероятность слова, но нам нужно вычислить слова во всем окне. В модели скип-грамм также есть предположение:Все контекстные слова независимы!
Предположим, нашwindow_size = k
, поэтому имеем:
Обычно мы используем логарифмические вероятности:
Обучение моделей скип-грамм
Чтобы обучить этот word2vec, нам нужны отрицательные образцы в дополнение к положительным образцам. На практике отрицательных образцов обычно больше, чем положительных. Обычно отношениеk
для контроля положительных и отрицательных образцов, еслиk=2
Затем каждому положительному образцу соответствует 2 отрицательных образца. Это то, что было сказано ранееотрицательная выборкаТехнологии.
Слова, выбранные для построения отрицательных выборок (шумовые слова), основаны на частоте:
в,отношение, обычно принимающее значение.
Зачем нужен этот коэффициент?Это повышает вероятность выбора слов с меньшим количеством вхождений!
Например, без этого отношения пусть,, после добавления этого отношения:
видимый,Вероятность выбора из0.01
поднят до0.03
.
Обучение нашей модели с положительными и отрицательными образцами преследует следующие цели:
- Максимизируйте вероятность положительных образцов, то есть максимизируйте сходство положительных образцов.
- Минимизируйте вероятность отрицательных образцов, то есть сведите к минимуму сходство отрицательных образцов.
На всем тренировочном наборе математическое выражение вышеуказанной цели:
Если посмотреть на одну пару обучающих данных (правильно ишум), Есть:
Вероятность P рассчитывается с помощью функции симоида, которая имеет вид:
Развернуть, есть:
Можно видеть, что максимизация вышеуказанной цели состоит в том, чтобы максимизировать положительные образцы, при минимизации отрицательных проб.
С приведенным выше вероятностным представлением мы можем использоватьперекрестная энтропияКак функция потерь, то обучайте модель!
Стоит отметить, что два вышеуказанных процесса объединены в тензорном потоке и объединены вtf.nn.nce_loss
внутри этой функции. Вы можете видеть, что функция потерь в учебнике по тензорному потоку используетсяtf.nn.nce_loss
как функция потерь. Но если вы продолжите отслеживать исходный код, вы обнаружите, что эта функция потерь не что иное, как:
- Выборка для расчета вероятности
- использоватьперекрестная энтропияРассчитать потери
Можно видеть, что это согласуется с нашим процессом анализа тренировок выше!
Две весовые матрицы W и C
Помните наш последний пункт об обучении модели пропуска грамм вышеВес регрессии используется как встраивание?
На самом деле после обучения word2vec будет две матрицы весов, а именноВстраивание матрицыиконтекстная матрица C, вернитесь к этому графику:
на картинке вышеВесовая матрица нашаEmbeddingматрица иВесовая матрица нашаContextматрица!
**Если мы хотим получить векторное представление каждого слова, просто начните сВыньте соответствующую строку из ! **Потому что каждое слово в обучении кодируется одним горячим, прямым иУмножьте, чтобы получить векторное представление измененного слова. Если у вас есть вопросы по этой части, ознакомьтесь с моей предыдущей статьей.Самостоятельная реализация word2vec (модель skip-gram).
Таким образом, вся модель word2vec представляет собой неглубокую нейронную сеть!
После обучения мы получаем две матрицыиКак это использовать? В общем, нам не нужно использовать, просто игнорируйте это. Но можно и две матрицы поставитьдобавить, вместе представлять новыйN
размерное представление вложения, или положить ихсливаться,Сейчас, чтобы создать новый2*N
встроенное представление .
Конечно, в этом стэнфордском туториале также упоминается визуализация встраивания слов и другая информация позже, поэтому я не буду ее писать. Я по-прежнему рекомендую всем прочитать исходный текст.Конечно, та часть заметки, которую я написал, которая сочетает в себе tensorflow, может определенно развеять некоторые ваши сомнения.
рекомендуемая статья
1.Vector Representations of Words
2.Самостоятельная реализация word2vec (модель skip-gram)
3.Logistic Regression
4.Learning Word Embedding
свяжитесь со мной
- WeChat: луочжоуян0528
- Почта:stupidme.me.lzy@gmail.com
- Публичный номер: тупыммедотме