深度学习-词嵌入(word2vec)

词嵌入(word2vec)

自然语言是一套用来表达含义的复杂系统。在这套系统中,词是表义的基本单元。顾名思义,词向量是用来表示词的向量,也可被认为是词的特征向量或表征。把词映射为实数域向量的技术也叫词嵌入(word embedding)。近年来,词嵌入已逐渐成为自然语言处理的基础知识。

跳字模型

跳字模型假设基于某个词来生成它在文本序列周围的词。举个例子:

  • 假设文本序列是“the”“man”“loves”“his”“son”
  • 以“loves”作为中心词,设背景窗口大小为2

如下图所示,跳字模型所关心的是,给定中心词“loves”,生成与它距离不超过2个词的背景词“the”“man”“his”“son”的条件概率,即

P(the",man",his",son"∣“loves").P(\textrm{the"},\textrm{man"},\textrm{his"},\textrm{son"}\mid\textrm{``loves"}).P(the",man",his",son"“loves").

假设给定中心词的情况下,背景词的生成是相互独立的,那么上式可以改写成

P(the"∣loves")⋅P(man"∣loves")⋅P(his"∣loves")⋅P(son"∣loves").P(\textrm{the"}\mid\textrm{loves"})\cdot P(\textrm{man"}\mid\textrm{loves"})\cdot P(\textrm{his"}\mid\textrm{loves"})\cdot P(\textrm{son"}\mid\textrm{loves"}).P(the"loves")P(man"loves")P(his"loves")P(son"loves").

在跳字模型中,每个词被表示成两个ddd维向量,用来计算条件概率。

  • 假设这个词在词典中索引为iii
  • 当它为中心词时向量表示为vi∈Rd\boldsymbol{v}_i\in\mathbb{R}^dviRd
  • 当它为背景词时向量表示为ui∈Rd\boldsymbol{u}_i\in\mathbb{R}^duiRd
  • 设中心词wcw_cwc在词典中索引为ccc,背景词wow_owo在词典中索引为ooo

给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算而得到:

P(wo∣wc)=exp(uo⊤vc)∑i∈Vexp(ui⊤vc),P(w_o \mid w_c) = \frac{\text{exp}(\boldsymbol{u}_o^\top \boldsymbol{v}_c)}{ \sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)},P(wowc)=iVexp(uivc)exp(uovc),

其中词典索引集V=0,1,…,∣V∣−1\mathcal{V} = {0, 1, \ldots, |\mathcal{V}|-1}V=0,1,,V1。假设给定一个长度为TTT的文本序列,设时间步ttt的词为w(t)w^{(t)}w(t)。假设给定中心词的情况下背景词的生成相互独立,当背景窗口大小为mmm时,跳字模型的似然函数即给定任一中心词生成所有背景词的概率。

∏t=1T∏−m≤j≤m,j≠0P(w(t+j)∣w(t)),\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(w^{(t+j)} \mid w^{(t)}),t=1Tmjm, j=0P(w(t+j)w(t)),

这里小于1和大于TTT的时间步可以忽略。

训练跳字模型

跳字模型的参数是每个词所对应的中心词向量和背景词向量。训练中我们通过最大化似然函数来学习模型参数,即最大似然估计。这等价于最小化以下损失函数:

−∑t=1T∑−m≤j≤m,j≠0logP(w(t+j)∣w(t)).- \sum_{t=1}^{T} \sum_{-m \leq j \leq m,\ j \neq 0} \text{log}P(w^{(t+j)} \mid w^{(t)}).t=1Tmjm, j=0logP(w(t+j)w(t)).

如果使用随机梯度下降,那么在每一次迭代里我们随机采样一个较短的子序列来计算有关该子序列的损失,然后计算梯度来更新模型参数。梯度计算的关键是条件概率的对数有关中心词向量和背景词向量的梯度。根据定义,首先看到

log⁡P(wo∣wc)=uo⊤vc−log⁡(∑i∈Vexp(ui⊤vc))\log P(w_o \mid w_c) = \boldsymbol{u}_o^\top \boldsymbol{v}_c - \log\left(\sum{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)\right)logP(wowc)=uovclog(iVexp(uivc))

通过微分,我们可以得到上式中vc\boldsymbol{v}_cvc的梯度

∂logP(wo∣wc)∂vc=uo−∑j∈Vexp⁡(uj⊤vc)uj∑i∈Vexp⁡(ui⊤vc)=uo−∑j∈V(exp(uj⊤vc)∑i∈Vexp(ui⊤vc))uj=uo−∑j∈VP(wj∣wc)uj.\begin{aligned} \frac{\partial \text{log} P(w_o \mid w_c)}{\partial \boldsymbol{v}_c} &= \boldsymbol{u}_o - \frac{\sum_{j \in \mathcal{V}} \exp(\boldsymbol{u}_j^\top \boldsymbol{v}_c)\boldsymbol{u}_j}{\sum_{i \in \mathcal{V}} \exp(\boldsymbol{u}_i^\top \boldsymbol{v}_c)}\ \\&= \boldsymbol{u}_o - \sum_{j \in \mathcal{V}} \left(\frac{\text{exp}(\boldsymbol{u}_j^\top \boldsymbol{v}_c)}{ \sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)}\right) \boldsymbol{u}_j\ \\&= \boldsymbol{u}_o - \sum_{j \in \mathcal{V}} P(w_j \mid w_c) \boldsymbol{u}_j. \end{aligned} vclogP(wowc)=uoiVexp(uivc)jVexp(ujvc)uj =uojV(iVexp(uivc)exp(ujvc))uj =uojVP(wjwc)uj.

它的计算需要词典中所有词以wcw_cwc为中心词的条件概率。有关其他词向量的梯度同理可得。

训练结束后,对于词典中的任一索引为iii的词,我们均得到该词作为中心词和背景词的两组词向量vi\boldsymbol{v}_iviui\boldsymbol{u}_iui。在自然语言处理应用中,一般使用跳字模型的中心词向量作为词的表征向量。

连续词袋模型

连续词袋模型与跳字模型类似。与跳字模型最大的不同在于,连续词袋模型假设基于某中心词在文本序列前后的背景词来生成该中心词。在同样的文本序列“the”“man”“loves”“his”“son”里,以“loves”作为中心词,且背景窗口大小为2时,连续词袋模型关心的是,给定背景词“the”“man”“his”“son”生成中心词“loves”的条件概率(如下图所示),也就是

P(“loves"∣“the",man",his",“son").P(\textrm{“loves"}\mid\textrm{“the"},\textrm{man"},\textrm{his"},\textrm{``son"}).P(“loves"“the",man",his",“son").

因为连续词袋模型的背景词有多个,我们将这些背景词向量取平均,然后使用和跳字模型一样的方法来计算条件概率。设vi∈Rd\boldsymbol{v_i}\in\mathbb{R}^dviRdui∈Rd\boldsymbol{u_i}\in\mathbb{R}^duiRd分别表示词典中索引为iii的词作为背景词和中心词的向量(注意符号的含义与跳字模型中的相反)。设中心词wcw_cwc在词典中索引为ccc,背景词wo1,…,wo2mw_{o_1}, \ldots, w_{o_{2m}}wo1,,wo2m在词典中索引为o1,…,o2mo_1, \ldots, o_{2m}o1,,o2m,那么给定背景词生成中心词的条件概率

P(wc∣wo1,…,wo2m)=exp(12muc⊤(vo1+…+vo2m))∑i∈Vexp(12mui⊤(vo1+…+vo2m)).P(w_c \mid w_{o_1}, \ldots, w_{o_{2m}}) = \frac{\text{exp}\left(\frac{1}{2m}\boldsymbol{u}_c^\top (\boldsymbol{v}_{o_1} + \ldots + \boldsymbol{v}_{o{2m}}) \right)}{ \sum_{i \in \mathcal{V}} \text{exp}\left(\frac{1}{2m}\boldsymbol{u}_i^\top (\boldsymbol{v}_{o_1} + \ldots + \boldsymbol{v}_{o{2m}}) \right)}.P(wcwo1,,wo2m)=iVexp(2m1ui(vo1++vo2m))exp(2m1uc(vo1++vo2m)).

为了让符号更加简单,我们记Wo=wo1,…,wo2m\mathcal{W}o= {w{o_1}, \ldots, w_{o_{2m}}}Wo=wo1,,wo2m,且vˉo=(vo1+…+vo2m)/(2m)\bar{\boldsymbol{v}}_o = \left(\boldsymbol{v}_{o_1} + \ldots + \boldsymbol{v}_{o_{2m}} \right)/(2m)vˉo=(vo1++vo2m)/(2m),那么上式可以简写成

P(wc∣Wo)=exp⁡(uc⊤vˉo)∑i∈Vexp⁡(ui⊤vˉo).P(w_c \mid \mathcal{W}_o) = \frac{\exp\left(\boldsymbol{u}_c^\top \bar{\boldsymbol{v}}_o\right)}{\sum_{i \in \mathcal{V}} \exp\left(\boldsymbol{u}_i^\top \bar{\boldsymbol{v}}_o\right)}.P(wcWo)=iVexp(uivˉo)exp(ucvˉo).

给定一个长度为TTT的文本序列,设时间步ttt的词为w(t)w^{(t)}w(t),背景窗口大小为mmm连续词袋模型的似然函数是由背景词生成任一中心词的概率

∏t=1TP(w(t)∣w(t−m),…,w(t−1),w(t+1),…,w(t+m)).\prod_{t=1}^{T} P(w^{(t)} \mid w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}).t=1TP(w(t)w(tm),,w(t1),w(t+1),,w(t+m)).

训练连续词袋模型

训练连续词袋模型同训练跳字模型基本一致。连续词袋模型的最大似然估计等价于最小化损失函数

−∑t=1TlogP(w(t)∣w(t−m),…,w(t−1),w(t+1),…,w(t+m)).-\sum_{t=1}^T \text{log} P(w^{(t)} \mid w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}).t=1TlogP(w(t)w(tm),,w(t1),w(t+1),,w(t+m)).

注意到

log⁡P(wc∣Wo)=uc⊤vˉo−log⁡(∑i∈Vexp⁡(ui⊤vˉo)).\log P(w_c \mid \mathcal{W}_o) = \boldsymbol{u}_c^\top \bar{\boldsymbol{v}}_o - \log\left(\sum_{i \in \mathcal{V}} \exp\left(\boldsymbol{u}_i^\top \bar{\boldsymbol{v}}_o\right)\right).logP(wcWo)=ucvˉolog(iVexp(uivˉo)).

通过微分,我们可以计算出上式中条件概率的对数有关任一背景词向量voi\boldsymbol{v}_{o_i}voii=1,…,2mi = 1, \ldots, 2mi=1,,2m)的梯度

∂log⁡P(wc∣Wo)∂voi=12m(uc−∑j∈Vexp⁡(uj⊤vˉo)uj∑i∈Vexp(ui⊤vˉo))=12m(uc−∑j∈VP(wj∣Wo)uj).\frac{\partial \log P(w_c \mid \mathcal{W}_o)}{\partial \boldsymbol{v}_{o_i}} = \frac{1}{2m} \left(\boldsymbol{u}_c - \sum_{j \in \mathcal{V}} \frac{\exp(\boldsymbol{u}_j^\top \bar{\boldsymbol{v}}_o)\boldsymbol{u}_j}{ \sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \bar{\boldsymbol{v}}_o)} \right) \\ = \frac{1}{2m}\left(\boldsymbol{u}_c - \sum_{j \in \mathcal{V}} P(w_j \mid \mathcal{W}_o) \boldsymbol{u}_j \right).voilogP(wcWo)=2m1ucjViVexp(uivˉo)exp(ujvˉo)uj=2m1ucjVP(wjWo)uj.

有关其他词向量的梯度同理可得。同跳字模型不一样的一点在于,我们一般使用连续词袋模型的背景词向量作为词的表征向量。

  • 词向量是用来表示词的向量。把词映射为实数域向量的技术也叫词嵌入。
  • word2vec包含跳字模型和连续词袋模型。跳字模型假设基于中心词来生成背景词。连续词袋模型假设基于背景词来生成中心词。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ggplot2箱式图两两比较_作图技巧024篇ggplot2在循环中的坑

“ggplot2在循环中的输出”生活科学哥-R语言科学 2020-12-23 8:28ggplot2用过之后,你肯定会爱上它;结合一些不错的包,可以得到非常有展现力的图片,但是呢,有时也会碰到一些奇怪的情况。今天来们来看看,其中…

深度学习-自然语言处理中的近似训练

自然语言处理中的近似训练 跳字模型的核心在于使用softmax运算得到给定中心词wcw_cwc​来生成背景词wow_owo​的条件概率 P(wo∣wc)exp(uo⊤vc)∑i∈Vexp(ui⊤vc).P(w_o \mid w_c) \frac{\text{exp}(\boldsymbol{u}_o^\top \boldsymbol{v}_c)}{ \sum_{i \in \mathcal{V}} \te…

pytorch-word2vec的实例实现

word2vec的实例实现 实现词嵌入word2vec中的跳字模型和近似训练中的负采样以及二次采样(subsampling),在语料库上训练词嵌入模型的实现。 首先导入实验所需的包或模块。 import collections import math import random import sys import …

pytorch-LSTM的输入和输出尺寸

LSTM的输入和输出尺寸 CLASS torch.nn.LSTM(*args, **kwargs)Applies a multi-layer long short-term memory (LSTM) RNN to an input sequence. For each element in the input sequence, each layer computes the following function: 对于一个输入序列实现多层长短期记忆的…

python中的[-1]、[:-1]、[::-1]、[n::-1]

import numpy as np anp.random.rand(4) print(a)[0.48720333 0.67178384 0.65662903 0.40513918]print(a[-1]) #取最后一个元素 0.4051391774882336print(a[:-1]) #去除最后一个元素 [0.48720333 0.67178384 0.65662903]print(a[::-1]) #逆序 [0.40513918 0.65662903 0.67178…

torchtext.data.Field

torchtext.data.Field 类接口 class torchtext.data.Field(sequentialTrue, use_vocabTrue, init_tokenNone, eos_tokenNone, fix_lengthNone, dtypetorch.int64, preprocessingNone, postprocessingNone, lowerFalse, tokenizeNone, tokenizer_languageen, include_lengthsF…

np.triu

np.triu numpy.triu(m, k0) Upper triangle of an array. Return a copy of a matrix with the elements below the k-th diagonal zeroed. 返回一个矩阵的上三角矩阵,第k条对角线以下的元素归零 例如: import numpy as np np.triu(np.ones([4,4]), …

python读取json格式的超参数

python读取json格式的超参数 json文件: {"full_finetuning": true,"max_len": 180,"learning_rate": 3e-5,"weight_decay": 0.01,"clip_grad": 2,"batch_size": 30,"epoch_num": 20,"…

python缺少标准库_干货分享:Python如何自动导入缺失的库

很多同学在写Python项目时会遇到导入模块失败的情况:ImportError: No module named xxx或者ModuleNotFoundError: No module named xxx。导入模块失败通常分为两种:一种是导入自己写的模块(即以 .py 为后缀的文件),另一种是导入三方库。接下来…

.val()数据乱码_【目标检测数据集】PASCAL VOC制作

【VOC20072012】数据集地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,用于构建和评估用于图像分类(Classification),检测(O…

pytorch-多GPU训练(单机多卡、多机多卡)

pytorch-多GPU训练(单机多卡、多机多卡) pytorch 单机多卡训练 首先是数据集的分布处理 需要用到的包: torch.utils.data.distributed.DistributedSampler torch.utils.data.DataLoader torch.utils.data.Dataset DistributedSampler这个…

机器人 铑元素_智能机器人 三十三

福里斯特茫然不知所措地从窃窃私语的黑暗中转过身来,沉重的失败感犹如巨怪压得他喘不过气来。他顺从地跛着脚走向笼内角落里的小浴室,冲着微笑着的木偶刚才经过的地方点点头,漫不经意地问道:“你们是如何抓住他们的?”…

character-level OCR之Character Region Awareness for Text Detection(CRAFT) 论文阅读

Character Region Awareness for Text Detection 论文阅读 论文地址(arXiv) ,pytorch版本代码地址 最近在看一些OCR的问题,CRAFT是在场景OCR中效果比较好的模型,记录一下论文的阅读 已有的文本检测工作大致如下: 基于回归的文…

c# wpf 面试_【远程面试】九强通信 | 九洲电器集团全资子公司

成都IT内推圈成立于2016年,专注成都IT互联网领域的招聘与求职;覆盖精准IT人群10W,通过内推圈推荐且已入职人数超过5000,合作公司均系成都知名或靠谱公司.此公众号每天7:30AM准时推送当天职位详情,敬请关注并置顶!岗位投递一、登陆内推圈官网: www.itneituiquan.com,…

ViT(Vision Transformer)学习

ViT(Vison Transformer)学习 Paper:An image is worth 1616 words: transformers for image recognition at scale. In ICLR, 2021. Transformer 在 NLP领域大放异彩,并且随着模型和数据集的不断增长,仍然没有表现出饱和的迹象。这使得使用更大规模的数…

mysql php宝塔 root_[转载]在安卓中安装宝塔面板运行PHP+MySQL

手机上的操作我用的手机是小米10pro,其他手机应该也能用相同的方法安装成功。安装Linux Deploy,然后给它root权限。点击左上角的菜单按钮。点击号,创建一个名为debian的配置文件。如果已经有了名为debian的配置文件,选择它即可。返…

cpri带宽不足的解决方法_u盘容量不足怎么办 u盘容量不足解决方法【介绍】

我们在使用u盘的时候总能碰到各种各样的问题,其中u盘容量不足问题也是神烦,很多时候打开并没有发现有文件存在,但是在你存文件的时候又被提示u盘容量不足无法操作,关于这个问题u启动通过整理和大家一起分享下解决办法。1、u盘里的…

(python numpy) np.array.shape 中 (3,)、(3,1)、(1,3)的区别

(python numpy) np.array.shape 中 (3,)、(3,1)、(1,3)的区别 被人问到这个问题,就记录一下吧 1. (3,) (3,)是[x,y,z][x,y,z][x,y,z]的形式,即为一维数组,访问数组元素用一个index for example: >>> array1 np.array([1,2,3]) …

复合的赋值运算符例题_Java学习:运算符的使用与注意事项

运算符的使用与注意事项四则运算当中的加号“”有常见的三种用法:对于数值来,那就是加法。对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算。char类型字符,和int类型数字之间的对照关系比…

腾讯会议如何使用讲演者模式进行汇报(nian gao)

腾讯会议如何使用讲演者模式进行汇报(nian gao) 首先列出步骤,再一一演示: altf5 开启讲演者模式,调整讲演者模式的窗口为小窗alttab 切换回腾讯会议界面,屏幕共享power point窗口(注意不是“…