Перчатка и fastText

алгоритм

Это 23-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления

В этой статье представлены два новых вектора слов: Glove, опубликованный командой Стэнфорда в 2014 году, и fastText, опубликованный командой Facebook в 2017 году.

Glove

Glove использует информацию о совпадении слов. мы определяемXX- матрица частоты встречаемости слов, где элементыxijx_{ij}выразить словоjjпоявляется в словеiiколичество контекстов. Здесь есть несколько определений слова «окружающая среда». Например, в текстовой последовательности, если словоjjпоявляется в словеiiНа расстоянии не более 10 слов слева или справа мы можем считать словоjjпоявляется в словеiiсреда один раз. сделатьxi=kxikx_i=\sum_kx_{ik}для любого слова, входящего в словоiiколичество сред. Так

Pij=P(ji)=xijxiP_{ij}=P(j\mid i)=\frac{x_{ij}}{x_i}

на словоjjпоявляется в словеiiвероятность окружения. Эту вероятность также называют словомiiи словоjjВероятность одновременного появления

Отношение вероятности совпадения

В документе Glove показаны вероятность совпадения и соотношение следующего набора пар слов.

wkw_k solid gas water fashion
p1=P(wkice)p_1=P(w_k\mid \text{ice}) 0.00019 0.000066 0.003 0.000017
p2=P(wksteam)p_2=P(w_k\mid \text{steam}) 0.000022 0.00078 0.0022 0.000018
p1/p2p_1/p_2 8.9 0.085 1.36 0.96

Мы можем наблюдать следующие явления:

  • Для слов, связанных со льдом, но не связанных с паромkk,Напримерkk=solid, мы ожидаем отношение вероятности совпаденияPikPjk\frac{P_{ik}}{P_{jk}}Больше, например 8,9 в последнем столбце выше.
  • Для слов, не относящихся ко льду, но относящихся к паруkk,Напримерkk= газ, ожидаем отношение вероятности совпаденияPikPjk\frac{P_{ik}}{P_{jk}}Меньше, например 0,085 в последнем столбце выше.
  • Для слов, связанных как со льдом, так и с паромkk,Напримерkk=вода, мы ожидаем отношение вероятности совпаденияPikPjk\frac{P_{ik}}{P_{jk}}близко к 1, например 1,36 в последнем столбце выше
  • Для слов, не связанных ни со льдом, ни с паромkk,Напримерkk=мода, мы ожидаем отношение вероятности совпаденияPikPjk\frac{P_{ik}}{P_{jk}}близко к 1, например 0,96 в последнем столбце выше

Можно видеть, что отношение вероятности совпадения может более интуитивно выражать отношения между словами. Перчатка пытается выразить отношения вероятности совпадения как функцию векторов слов.

Выразите отношение вероятности совпадения с вектором слов

Суть Glove заключается в использовании векторов слов для выражения отношения вероятности совпадения. И любое такое соотношение требует трех словii,jjиkkвектор слов. Для вероятности совпаденияPij=P(ji)P_{ij}=P(j\mid i), мы существительноеiiи словоjjЭто центральное слово и фоновое слово соответственно. Мы используемv\boldsymbol{v}иv~\boldsymbol{\tilde {v}}Векторы слов, представляющие центральное слово и фоновое слово соответственно

Мы можем использовать функции, связанные с векторами словffчтобы выразить отношение вероятности совпадения:

f(vi,vj,v~k)=PikPjkf(\boldsymbol{v}_i,\boldsymbol{v}_j,\boldsymbol{\tilde{v}}_k)=\frac{P_{ik}}{P_{jk}}

Следует отметить, что функцияffТам может быть не только один вовлечен. Во-первых, мы используем разность векторов, чтобы выразить отношение вероятности совпадения, и перепишем приведенную выше формулу как

f(vivj,v~k)=PikPjkf(\boldsymbol{v}_i-\boldsymbol{v}_j,\boldsymbol{\tilde{v}}_k)=\frac{P_{ik}}{P_{jk}}

Поскольку отношение вероятности совпадения является скаляром, мы можем использовать внутренний продукт между векторами, чтобы преобразовать функциюffНезависимая переменная далее переписывает

f((vivj)Tv~k)=PikPjkf((\boldsymbol{v}_i-\boldsymbol{v}_j)^T\boldsymbol{\tilde{v}}_k)=\frac{P_{ik}}{P_{jk}}

Мы надеемся, что из-за симметрии совместного появления любой пары слов могут одновременно выполняться следующие два свойства:

  • Вектор слов любого слова в качестве центрального слова и фонового слова должен быть равен: для любого словаii,vi=v~i\boldsymbol{v}_i=\boldsymbol{\tilde{v}}_i
  • пословная матрица сочетаемостиXXдолжен быть симметричным: для любого словаiiиjj,xij=xjix_{ij}=x_{ji}

Для того чтобы удовлетворить двум вышеуказанным свойствам, с одной стороны, мы делаем

f((vivj)Tv~k)=f(viTv~k)f(vjTv~k)f((\boldsymbol{v}_i-\boldsymbol{v}_j)^T\boldsymbol{\tilde{v}}_k)=\frac{f(\boldsymbol{v}_i^T\boldsymbol{\tilde{v}}_k)}{f(\boldsymbol{v}_j^T\boldsymbol{\tilde{v}}_k)}

и получитьf(x)=exp(x)f(x)=\exp(x). Правая часть двух приведенных выше уравнений одновременно

exp(viTv~k)=Pik=xikxi\exp(\boldsymbol{v}_i^T\boldsymbol{\tilde{v}}_k)=P_{ik}=\frac{x_{ik}}{x_i}

Логарифмируя обе части вышеприведенного уравнения, мы можем получить

viTv~k=log(xik)log(xi)\boldsymbol{v}_i^T\boldsymbol{\tilde{v}}_k=\log(x_{ik})-\log(x_i)

С другой стороны, мы можем поставить в вышеуказанную формулу.log(xi)\log(x_i)Заменить на сумму двух смещенных членовbi+bkb_i+b_k,получить

viTv~k=log(xik)bibk\boldsymbol{v}_i^T\boldsymbol{\tilde{v}}_k=\log(x_{ik})-b_i-b_k

будет индексироватьiiиkkВзаимозаменяемо, мы можем проверить, что два свойства симметрии могут удовлетворяться приведенным выше уравнением одновременно.

Следовательно, для любой пары словiiиjj, выражение отношения вероятностей совпадения в терминах их векторов слов может быть, наконец, упрощено, чтобы выразить логарифм их частоты совпадения слов:

viTv~k+bi+bk=log(xik)\boldsymbol{v}_i^T\boldsymbol{\tilde{v}}_k+b_i+b_k=\log(x_{ik})

функция потерь

Частота совпадения слов в приведенной выше формуле получается непосредственно из обучающих данных.Чтобы узнать вектор слов и соответствующий термин смещения, мы надеемся, что левая и правая части в приведенной выше формуле максимально близки, учитывая размер словаря.VVи весовая функцияf(xij)f(x_{ij}), мы определяем функцию потерь как

i,j=1Vf(xij)(viTv~k+bi+bklog(xik))2\sum_{i,j=1}^{V}f(x_{ij})(\boldsymbol{v}_i^T\boldsymbol{\tilde{v}}_k+b_i+b_k-\log(x_{ik}))^2

для весовf(x)f(x), предлагаемый выбор, когдаx<cx<c(Напримерc=100c=100),сделатьf(x)=(x/c)af(x)=(x/c)^a(Напримерa=0.75a=0.75), и наоборотf(x)=1f(x)=1. Следует отметить, что вычислительная сложность функции потерь и матрицы частоты встречаемости словXXКоличество ненулевых элементов линейно. мы можем начать сXXПроизвольно сэмплируйте мини-партии ненулевых элементов в и используйте стохастический градиентный спуск для перебора векторов слов и членов смещения. Когда все векторы слов изучены, Glove использует сумму вектора центрального слова и вектора фонового слова слова в качестве окончательного вектора слова слова.

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

fastText

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

Возьмите слово where в качестве примера, установите подслово из 3 символов, а его подслова включают "" и специальные подслова (целые слова)" », где «» используются для различения подслов, которые являются суффиксами и суффиксами. Также подслово «ее» здесь можно отличить от целого слова «». дали словоww, мы обычно можем взять объединение всех подслов и специальных подслов с длиной символа от 3 до 6Gw\mathcal{G}_{w}выиграть. Предположим, что любое подслово в словареggВектор подсловаzg\boldsymbol{z}_g, мы можем положить функцию потерь модели пропуска граммов, используя отрицательную выборку

logP(wowc)=log11+exp(uoTvc)k=1,wkP(w)Klog11+exp(uikTvc)-\log P(w_o\mid w_c)=-\log\frac{1}{1+\exp(-\boldsymbol u_o^T\boldsymbol{v}_c)}-\sum_{k=1,w_k\sim P(w)}^K\log\frac{1}{1+\exp(\boldsymbol u_{i_k}^T\boldsymbol{v}_c)}

заменить непосредственно на

logP(wowc)=log11+exp(uoTgеGwczg)k=1,wkP(w)Klog11+exp(uikTgеGwczg)\begin{aligned} &-\log P(w_o\mid w_c)=\\ &-\log\frac{1}{1+\exp(-\boldsymbol u_o^T\sum_{g\in \mathcal{G}_{w_c}}\boldsymbol{z}_g)}-\sum_{k=1,w_k\sim P(w)}^K\log\frac{1}{1+\exp(\boldsymbol u_{i_k}^T\sum_{g\in \mathcal{G}_{w_c}}\boldsymbol{z}_g)} \end{aligned}

Мы видим, что исходный вектор центрального слова заменяется суммой векторов подслов центрального слова. В отличие от изучения целых слов (word2vec и Glove), векторы слов для новых слов вне словаря могут использовать сумму соответствующих векторов подслов в fastText.

fastText важен для некоторых конкретных языков, таких как арабский, немецкий и русский. Например, в немецком языке много сложных слов, например, настольный теннис по-немецки называется «Tischtennis». fastText может выражать соотношение двух слов через подслова, такие как «Tischtennis» и «Tennis».

Если встречается новое слово, для fastText он может найти все векторы подслов нового слова из обучающего набора, а затем выполнить сумму для вычисления вектора слова нового слова.