word embedding

由来

在处理自然语言任务的时候,需要对文本进行表征,通常我们需要将其转为数字。在word embedding之前,我们经历了wordnet以及onehot,wordnet需要人力去维护,onehot由于每个词都互相正交,没办法计算相似度,同时也存在着维度爆炸的情况。故而出现了word embedding。

输入与输出

为了得到word embedding,我们通常会使用word2vec工具来进行训练得到。当输入是英文类的字符时,可能需要对文本做适当的预处理(单复数等,不是特别确定),当中文时,需要对字符做分词。通过工具我们将会得到一组词向量,用于其他下游任务。

训练方式

每一个词都会当作中心词和周围词,故而每个词其实是由两个向量组成的。
训练方式主要有CBOW和skip-Gram两种。CBOW的训练方式中,会将dense后的向量进行平均,然后再进行y的预测。Skip-Gram的训练中,相当于将上下午做了拆解,每个词去预测中心词,会比CBOW更多训练样本。通常当数据量少的时候,CBOW的效果会更好一些。

训练技巧

由于y的大小是V,每次更新时要有大量的计算,所以需要通过一些技巧来来降低这个量级。

层级softmax

主要为通过词频构建一个霍夫曼树,越靠近根的部分词频越高。

负采样

主要是通过修改中心词为其他随机词,减少分母部分的计算量,来降低训练复杂度。

损失函数

由于使用了不同的训练方式或训练技巧,导致损失函数也会有不同。具体参考:
https://lilianweng.github.io/lil-log/2017/10/15/learning-word-embedding.html

缺点

由于我们得到的参数是通过所有的语料进行适配的,训练结束后,词向量也固定了下来,所以在不同的上下文中,虽然一个单词可能含义不同,但其词向量表征是相同的,这一点导致了在某些场景下表现欠佳。但我们这里相较于之前的工作来看,解决了的问题包括,不再需要人工去维护(Wordnet),是一个无监督的训练过程;不再会应为词会增多而导致维度爆炸(one-hot),也不会因为表征正交而无法计算相似度(one-hot),wordnet的相似度是由人工编辑的,并不存在去计算。

学习过程中的一些图

一些好的链接

提到了交叉熵,由于损失函数,backpropogation无法套在word2vec的梯度更新参数所以查阅:
https://machinelearningmastery.com/cross-entropy-for-machine-learning/
解决了W是词向量参数,W’是上下文语义的问题:
http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
python实现的一个word2vec代码
https://www.kdnuggets.com/2018/04/implementing-deep-learning-methods-feature-engineering-text-data-cbow.html
包含了很多精彩的细节:
https://lilianweng.github.io/lil-log/2017/10/15/learning-word-embedding.html
如何得到词向量
https://www.zhihu.com/question/44832436

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值