векторная семантика

искусственный интеллект TensorFlow NLP продукт

Латексный анализ формул наггетсов очень странный, многие формулы разбираются некорректно, рекомендуется смотреть исходный текст.векторная семантика

Стэнфордский классический учебник НЛП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\times VВ таблице каждое число представляет собой количество раз, когда слово в текущем столбце появляется после слова в текущей строке, что составляет контекст, поэтому эта таблица фактически является контекстной матрицей, в которойVразмер всего словаря, то есть количество слов.

Вынимаем каждую строку и получаем векторное представление слова, например:

digital ------> [ 0,..., 2, 1, 0, 1, 0]

Точно так же такое представлениередкий.

Косинус вычисляет сходство

Теперь, когда у нас есть векторное представление документов или слов, как нам рассчитать сходство между ними? Очень распространен методКосинусное сходство.

Изучив математику в средней школе, вы знаете, что ** скалярное произведение двух векторов (скалярное произведение)илиВнутренний продукт** можно рассчитать по следующей формуле:

\text{dot-produtc}(\overrightarrow{v},\overrightarrow{w}) = \sum_{i=1}^Nv_iw_i=v_1w_1+v_2w_2+\dots+v_Nw_N

И модуль вектора (длина вектора):

\vert\overrightarrow{v}\vert = \sqrt{\sum_{i=1}^Nv_i^2}

снова:

\overrightarrow{a}\cdot\overrightarrow{b} = \vert{\overrightarrow{a}}\vert \vert{\overrightarrow{b}}\vert \cos\theta

который:

\cos\theta = \frac{\overrightarrow{a}\cdot\overrightarrow{b}}{\vert{\overrightarrow{a}}\vert \vert{\overrightarrow{b}}\vert}

Итак, мы можем вычислить\overrightarrow{v}и\overrightarrow{w}Косинус :

\cos(\overrightarrow{v},\overrightarrow{w}) = \frac{\overrightarrow{v}\cdot\overrightarrow{w}}{\vert{\overrightarrow{v}}\vert \vert{\overrightarrow{w}}\vert} = \frac{\sum_{i=1}^Nv_iw_i}{\sqrt{\sum_{i=1}^Nv_i^2}\sqrt{\sum_{i=1}^Nw_i^2}}

Итак, чем больше косинус двух векторов, тем больше они похожи.

TF-IDF

Далее мы представим TF-IDF, Во-первых, объясните слово:

TF-IDF = Term Frequency - Inverse Document Frequency

Как только вы поймете название, вы поймете половину его!

Так что жеterm-frequencyШерстяная ткань?term-frequencyколичество раз, которое слово встречается в документе.

\text{tf}_{t,d} = 1+\log_{10}{\text{count}(t,d)} \quad\text{if }\text{count}(t,d) > 0 \quad\text{else } 0

Так что жеIDFШерстяная ткань? Сначала мы разбираемсяDF(document frequency).

\text{df}_tУказывает количество документов, в которых встречается это слово!

Так,IDFэто:

\text{idf}_t = \frac{N}{\text{df}_t}

в,Nколичество документов в коллекции.

Во избежание слишком большого значения обычно берут логарифм:

\text{idf}_t = \log_{10}(\frac{N}{\text{df}_t})

В этот момент мы можем посчитать словоtизtf-idfМасса:

w_{t,d} = \text{tf}_{t,d}\times\text{idf}_t

На данный момент наша первая форма становится:

- 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это слово:

\text{hello} \longrightarrow \quad\underbrace{[0, 0, 0, 1, 2, 0,\dots, 0]}_{N个数}

Затем используйтевстроенныйКак это будет выглядеть после представления:

\text{hello} \longrightarrow \quad\underbrace{[0.012,0.025,0.001,0.078,0.056,0.077,\dots,0.022]}_{n个数,一般是100到500左右}

Разница видна сразу. Итак, очевидно, что встраивание слов — это хорошо:

  • Не вызовет пространственного взрыва, потому что размеры устанавливаются нами, как правило, относительно небольшие
  • Вектор плотный и не требует различных алгоритмов оптимизации, используемых разреженными векторами для повышения эффективности вычислений.

Встраивание слов понятно, так что же такое 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 следующего слова на основе предыдущих слов, то есть:

P(w_t\vert h) = \text{softmax}(\text{score}(w_t,h)) = \frac{\exp{\text{score}(w_t,h)}}{\sum_{\text{w' in V}}\exp{\text{score}(w',h)}}

в,\text{score}(w_t,h)На самом деле этоw_tиhиздот-продакшн.

Тогда цель обучения модели таким образом состоит в том, чтобы максимизироватьлогарифмическая вероятность:

J_{\text{ML}} = \log{P(w_t\vert h)} = \text{score}(w_t,h) - \log(\sum_{\text{w' in V}}\exp{\text{score}(w',h)})

Так есть ли в этом проблема?слишком много расчетов, потому что на каждом этапе обучения вам нужно использовать softmax для вычисления значения вероятности для каждого слова в словаре! Эта модель показана на рисунке ниже:

Как было сказано ранее, нашему word2vec не нужна полная вероятностная модель, нам нужно только обучить бинарный классификатор из kшумовые словаопределить правильныйцелевые слова. Этотkшумовые слова выбираются случайным образом, метод, называемыйотрицательная выборка, так как выбранный набор слов не является правильным целевым словом. Эта модель показана на рисунке ниже:

Таким образом, цель, которую мы хотим максимизировать, состоит в следующем:

J_\text{NEG} = \log Q_\theta(D=1 |w_t, h) +   k \mathop{\mathbb{E}}_{\tilde w \sim P_\text{noise}} \left[ \log Q_\theta(D = 0 |\tilde w, h) \right]

в,Q_\theta(D=1\vert w, h)Указывает, что бинарная логистическая регрессия содержит цель в контексте h в наборе данных D.w_tВероятность.

The classifier

сказано вышеотрицательная выборка. Что такое отрицательная выборка?Случайным образом выберите k слов и сформируйте отрицательную выборку обучения с целевым словом..

Теперь вернемся к учебнику Стэнфорда. Вот основные моменты для обучения модели skip-gram:

  • Возьмите образец, состоящий из целевого слова и контекстного слова, в качестве обученияположительный образец
  • Случайным образом выберите несколько образцов, состоящих из слов и целевых слов, для обучения.отрицательный образец
  • Используйте логистическую регрессию для обучения бинарного классификатора различению двух случаев.
  • Вес регрессии принадлежит намembedding

Что нужно word2vec, так это обучить бинарную логистическую регрессию, учитывая цельtи контекст кандидатаcкортеж из(t,c),возвращениеcТочноtВероятность контекстного слова :

P(+\vert t,c)

Так,cнетtВероятность контекстного слова равна:

P(-\vert t,c) = 1 - P(+\vert t,c)

Так как же классификатор вычисляет эту вероятностьPШерстяная ткань? Модель скип-грамм имеет такое допущение:Подобные слова имеют похожие представления встраивания!

То есть мы можем использовать подобие представления вложения двух слов для представления вероятностиP! Сходство использует косинусное сходство, о котором мы упоминали выше:

Similarity(t,c) \approx t\cdot c

Конечно, результат скалярного произведения не является вероятностным представлением, нам нужно использоватьlogisticили позвоните по телефонуsigmoidфункцию, преобразуем ее в вероятностное представление:

P(+\vert t,c) = \frac{1}{1+e^{-t\cdot c}}

Так:

P(-\vert t,c) = 1 - P(+\vert t,c) = \frac{e^{-t\cdot c}}{1+e^{-t\cdot c}}

Приведенная выше формула — это просто вероятность слова, но нам нужно вычислить слова во всем окне. В модели скип-грамм также есть предположение:Все контекстные слова независимы!

Предположим, нашwindow_size = k, поэтому имеем:

P(+\vert t,c_{1:k}) = \prod_{i=1}^k\frac{1}{1+e^{-t\cdot c_i}}

Обычно мы используем логарифмические вероятности:

\log{P(+\vert t,c_{1:k})} = \sum_{i=1}^k\log{\frac{1}{1+e^{-t\cdot c_i}}}

Обучение моделей скип-грамм

Чтобы обучить этот word2vec, нам нужны отрицательные образцы в дополнение к положительным образцам. На практике отрицательных образцов обычно больше, чем положительных. Обычно отношениеkдля контроля положительных и отрицательных образцов, еслиk=2Затем каждому положительному образцу соответствует 2 отрицательных образца. Это то, что было сказано ранееотрицательная выборкаТехнологии.

Слова, выбранные для построения отрицательных выборок (шумовые слова), основаны на частоте:

p_\alpha(w) = \frac{count(w)^\alpha}{\sum_{w'}count(w')^\alpha}

в,\alphaотношение, обычно принимающее значение\frac{3}{4} = 0.75.

Зачем нужен этот коэффициент?Это повышает вероятность выбора слов с меньшим количеством вхождений!

Например, без этого отношения пустьP(a) = 0.99,P(b) = 0.01, после добавления этого отношения:

P_\alpha(a) = 0.97
P_\alpha(b) = 0.03

видимый,bВероятность выбора из0.01поднят до0.03.

Обучение нашей модели с положительными и отрицательными образцами преследует следующие цели:

  • Максимизируйте вероятность положительных образцов, то есть максимизируйте сходство положительных образцов.
  • Минимизируйте вероятность отрицательных образцов, то есть сведите к минимуму сходство отрицательных образцов.

На всем тренировочном наборе математическое выражение вышеуказанной цели:

L(\theta) = \sum{_{(t,c)\in +}}\log P(+\vert t,c) + \sum{_{(t,c)\in -}}\log P(-\vert t,c)

Если посмотреть на одну пару обучающих данных ((t,c)правильно иkшумn_1,n_2,\dots,n_k), Есть:

L(\theta) = \log P(+\vert t,c) + \sum{_{i=1}}^{k}\log P(-\vert t,n_i)

Вероятность P рассчитывается с помощью функции симоида, которая имеет вид:

L(\theta) = \log\sigma(c\cdot t) + \sum_{i=1}^k\log\sigma(-n_i\cdot t)

Развернуть, есть:

L(\theta) = \log\frac{1}{1+e^{-c\cdot t}} + \sum_{i=1}^{k}\log\frac{1}{1+e^{c\cdot t}}

Можно видеть, что максимизация вышеуказанной цели состоит в том, чтобы максимизировать положительные образцыc\cdot t, при минимизации отрицательных пробn_i\cdot t.

С приведенным выше вероятностным представлением мы можем использоватьперекрестная энтропияКак функция потерь, то обучайте модель!

Стоит отметить, что два вышеуказанных процесса объединены в тензорном потоке и объединены вtf.nn.nce_lossвнутри этой функции. Вы можете видеть, что функция потерь в учебнике по тензорному потоку используетсяtf.nn.nce_lossкак функция потерь. Но если вы продолжите отслеживать исходный код, вы обнаружите, что эта функция потерь не что иное, как:

  • Выборка для расчета вероятности
  • использоватьперекрестная энтропияРассчитать потери

Можно видеть, что это согласуется с нашим процессом анализа тренировок выше!

Две весовые матрицы W и C

Помните наш последний пункт об обучении модели пропуска грамм вышеВес регрессии используется как встраивание?

На самом деле после обучения word2vec будет две матрицы весов, а именноВстраивание матрицыWиконтекстная матрица C, вернитесь к этому графику:

на картинке вышеWВесовая матрица нашаEmbeddingматрица иW'Весовая матрица нашаContextматрица!

**Если мы хотим получить векторное представление каждого слова, просто начните сWВыньте соответствующую строку из ! **Потому что каждое слово в обучении кодируется одним горячим, прямым иWУмножьте, чтобы получить векторное представление измененного слова. Если у вас есть вопросы по этой части, ознакомьтесь с моей предыдущей статьей.Самостоятельная реализация word2vec (модель skip-gram).

Таким образом, вся модель word2vec представляет собой неглубокую нейронную сеть!

После обучения мы получаем две матрицыWиCКак это использовать? В общем, нам не нужно использоватьC, просто игнорируйте это. Но можно и две матрицы поставитьдобавить, вместе представлять новыйNразмерное представление вложения, или положить ихсливаться,Сейчас[W,C], чтобы создать новый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
  • Публичный номер: тупыммедотме