自监督学习:词向量的实现:Skip-gram的实现

词转为词向量的过程:

 三层结构:

  1. 输入层:输入参数是V=(1 * 5000)的张量,表示当前句子中心词的ont_hot;

  2. 隐藏层:隐藏层的参数 W1=(5000 * 128) 也叫词向量,隐藏层的输出是R1=(1 * 128) ,表示当前句子中心词得词向量。

  3. 输出层:输入参数是:R1=(1 *128) ,输出层的参数W2=(128 * 5000),W2也叫词向量,输出大小是R2=(1 * 5000),经过softmax变换就可以得到上下文预测的结果。

  4. 在实际操作中,使用一个滑动窗口(一般情况下,长度是奇数),从左到右开始扫描当前句子。每个扫描出来的片段被当成一个小句子,每个小句子中间的词被认为是中心词,其余的词被认为是这个中心词的上下文

理论实现:

使用神经网络实现Skip-gram中,模型接收的输入应该有2个不同的tensor:

  • 代表中心词的tensor:假设我们称之为center_words V,一般来说,这个tensor是一个形状为[batch_size, vocab_size]的one-hot tensor,表示在一个mini-batch中,每个中心词的ID,对应位置为1,其余为0。

  • 代表目标词的tensor:目标词是指需要推理出来的上下文词,假设我们称之为target_words T,一般来说,这个tensor是一个形状为[batch_size, 1]的整型tensor,这个tensor中的每个元素是一个[0, vocab_size-1]的值,代表目标词的ID。

在理想情况下,我们可以使用一个简单的方式实现skip-gram。即把需要推理的每个目标词都当成一个标签,把skip-gram当成一个大规模分类任务进行网络构建,过程如下:

  1. 对于给定的输入V=[batch_size,vocab_size],声明一个形状为W0=[vocab_size, embedding_size]的张量,作为需要学习的词向量,记为W0​。使用向量乘法,将V乘以W0​,这样就得到了一个形状为[batch_size, embedding_size]的张量,记H=V×W0​。这个张量H就可以看成是经过词向量查表后的结果。

  2. 将上一步得到的H=[batch_size,embedding_size]去乘以W1​,声明另外一个需要学习的参数W1​,这个参数的形状为W1=[embedding_size, vocab_size]。得到一个新的tensor O=H×W1​,此时的O是一个形状为O=[batch_size, vocab_size]的tensor,表示当前这个mini-batch中的每个中心词预测出的目标词的概率。

  3. 使用softmax函数对mini-batch中每个中心词的预测结果做归一化,即可完成网络构建。

实际实现:

然而在实际情况中,vocab_size通常很大(几十万甚至几百万),导致W0​和W1​也会非常大。对于W0​而言,所参与的矩阵运算并不是通过一个矩阵乘法实现,而是通过指定ID。

在实现的过程中,通常会让模型接收3个tensor输入:

  • 代表中心词的tensor:假设我们称之为center_words V,一般来说,这个tensor是一个形状为[batch_size, vocab_size]的one-hot tensor,表示在一个mini-batch中每个中心词具体的ID。

  • 代表目标词的tensor:假设我们称之为target_words T,一般来说,这个tensor同样是一个形状为[batch_size, vocab_size]的one-hot tensor,表示在一个mini-batch中每个目标词具体的ID。

  • 代表目标词标签的tensor:假设我们称之为labels L,一般来说,这个tensor是一个形状为[batch_size, 1]的tensor,每个元素不是0就是1(0:负样本,1:正样本)。

模型训练过程如下:

  1. 用V去查询W0​,用T去查询W1​,分别得到两个形状为[batch_size, embedding_size]的tensor,记为H1​和H2​。

  2. 将这两个tensor进行点积运算,最终得到一个形状为[batch_size]的tensor O;

  3. 点积:a·b=a1b1+a2b2+……+anbn。

  4. 使用sigmoid函数作用在O上,将上述点积的结果归一化为一个0-1的概率值,作为预测概率,根据标签信息L训练这个模型即可。

在结束模型训练之后,一般使用W0​作为最终要使用的词向量,用W0​的向量表示。通过向量点乘的方式,计算不同词之间的相似度。

资料来源自:百度飞浆。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值