文章目录

  • 1. 基于神经网络语言模型
    • 1.1 几种语言模型对比
    • 1.2 神经网络语言模型 NNLM
      • 第一层(输入层)
      • 第二层(隐藏层)
      • 第三层(输出层)
    • 1.3 小结
  • 2. word2vec
    • 2.2.1 CBOW
      • 基于层次softmax的CBOW
      • 参数估计
      • 参数优化
    • 2.2.2 Skip-gram
      • 负采样
    • 2.2.3 gensim中的word2vec
    • 2.2.4 Word2vec 参数选择(经验性结论)

1. 基于神经网络语言模型

The Neural History of NLP

Time The Neural History of NLP
2001 Neural language models
2008 Multi-task learning
2013 Word embeddings
2013 Neural networks for NLP
2014 Sequence-to-sequence models
2015 Attention
2015 Memory-based networks
2018 Pretrained language models

这些模型后面的文章大部分都会提到

神经网络词向量表示技术通过神经网络技术对上下文,以及上下文与目标词之间的关系进行建模。由于神经网络较为灵活,这类方法的最大优势在于可以表示复杂的上下文

1.1 几种语言模型对比

语言模型

P(s)=P(w1)×P(w2∣w1)×⋯×P(w1∣w1∣.w1−wm∣=∏1=1m∣P(w1∣w1∣−1)\left. \begin{array} { l } { P ( s ) = P ( w _ { 1 } ) \times P ( w _ { 2 } | w _ { 1 } ) \times \cdots \times P ( w _ { 1 } | w _ { 1 } | . w _ { 1 } - w _ { m } | } \\ { = \prod _ { 1 = 1 } ^ { m } | P ( w _ { 1 } | w _ { 1 } | _ { - 1 } ) } \end{array} \right. P(s)=P(w1)×P(w2w1)××P(w1w1.w1wm=1=1mP(w1w11)
N-gram 语言模型

P(s)=∏tP(wt∣wt−n+1⋯,wt−1)P ( s ) = \prod _ { t } P ( w _ { t } | w _ { t - n + 1 } \cdots , w _ { t - 1 } ) P(s)=tP(wtwtn+1,wt1)
神经网络语言模型 NNLM

P(s)=∏tP(wt∣wt−n+1⋯,wt−1)P ( s ) = \prod _ { t } P ( w _ { t } | w _ { t - n + 1 } \cdots , w _ { t - 1 } ) P(s)=tP(wtwtn+1,wt1)

1.2 神经网络语言模型 NNLM

对于整个模型而言,输入为条件部分的整个词序列:wi−(n−1);:::;wi−1,wiw_{i-(n-1)}; : : : ;w_{i-1},w_iwi(n1);:::;wi1,wi
输出为目标词的分布(词向量)

第一层(输入层)

将词在高维空间映射为单词的词向量

这个模型首先将词典中的单词映射到一个给定维度k的高维空间,这个映射就是图中的参数矩阵C(该矩阵行数等于词典中的单词数量,列数等于给定的高维空间的维度k)。单词在高维空间的映射就是单词的词向量表达 。

C(wt−n−1)…C(wt−2,C(wt−1)C(w_{t-n-1})…C(w_{t-2},C(w_{t-1})C(wtn1)C(wt2,C(wt1)这n-1个向量受委相接,形成一个(n−1)k(n-1)k(n1)k维的向量XXX

第二层(隐藏层)

与一般神经网络相同,直接使用线性函数XW+bXW+bXW+b计算得到。

在此之后,使用 tanh 作为激活函数。将每个单词对应的上下文映射到词典全部单词对应
的条件概率分布空间中。

h1=tanh⁡(XWh1+b1)(1)h_1=\tanh ( X W _ { h 1 } + b _ { 1 } ) \tag{1} h1=tanh(XWh1+b1)(1)

第三层(输出层)

每个节点yi表示下一个词为i的未归一化 log概率。使用softmax激活函数将输出值y归一化成概率。

y=tanh⁡(XWh1+b1)U+XWr+br(2)y = \tanh ( X W _ { h 1 } + b _ { 1 } ) U + X W _ { r } + b _ { r } \tag{2} y=tanh(XWh1+b1)U+XWr+br(2)
注意到,此式相当于进行了一次拼接,将输入的XXX直接加到输出(图中的虚线),所以直连边就是从输入层直接到输出层的一个线性变换。

不经过中间的隐藏层,为的是防止隐藏层将一些重要的特征去掉。但是大量的实验表明,如果没有直连边,可以语言模型反而性能更好;有直连边,则加快了速度(减少一半的迭代次数)。因此在后续工作中,很少有使用输入层到输出层直连边的工作。

1.3 小结

对于整个语料而言,语言模型需要最大化:
∑wi−(n−1):EDlog⁡P(wi−(n−1)x−1)⋯wi−1(3)\sum _ { w _ { i } - ( n - 1 ) : E D } \log P ( w _ { i - ( n - 1 ) } x - 1 ) \cdots w _ { i - 1 } \tag{3} wi(n1):EDlogP(wi(n1)x1)wi1(3)
使用梯度上升法对θ进行优化 。优化结束之后,就得到语言模型(1)式。
此时的参数C即为该最优模型下的词向量表示

2. word2vec

word2vec 在2013年被提出,论文原文被引用次数超过了10000次。

  • CBOW:用上下文预测中间的词
  • Skip-gram::用中间的词预测上下文

2.2.1 CBOW

  • 输入层:上下文单词的onehot
  • 所有onehot分别乘以共享的lookup矩阵E {V*N矩阵,N为设定词向量维度,随机初始化}
  • 所得的向量相加求平均作为隐层向量(没有隐藏层)

基于层次softmax的CBOW

使用Huffman编码减少编码长度,一百万个词,只需要22层树,运算量大幅度下降

分别用字符d1,d2…dnd_1,d_2…d_nd1,d2dn作为叶子结点(叶节点个数为NNN),各字符的使用频率w1,w2,…,wnw_1, w_2, …, w_nw1,w2,,wn作为叶子结点上的权,构造赫夫曼树。约定,W2V中规定权值大的设为左子节点标记为1,右子节点标记为0 (与Huffman树的常见标记反着),则从根到每个叶子结点路径上的二进制数字组成的序列就是该叶子结点中字符的编码。

输出层:对应一棵Huffuman树,它以词典中的词为叶节点,以词出现的次数为叶节点的权重来构建;每个非叶节点对应一个二分类器。

每个二分类器是一个逻辑回归分类器,概率表示为:
P(djw∣θj−1wxw)=[Q(θj−1wTivT⋅xivj)]1−dw×[1−G(θj−TwTw)d(4)P ( d _ { j } ^ { w } | \theta _ { j - 1 } ^ { w } x _ { w } ) = [ Q ( \theta _ { j - 1 } ^ { w } T _ { i v } ^ { T } \cdot x _ { i v j } ) ] ^ { 1 - d ^ { w } } \times [ 1 - G ( \theta _ { j - T } ^ { w } T _ { w } ) ^ { d} \tag{4} P(djwθj1wxw)=[Q(θj1wTivTxivj)]1dw×[1G(θjTwTw)d(4)
那么,对于目标单词w的条件概率为:
P(w∣context⁡(w))=∏j=2kP(djw∣j−1wxw)(5)P ( w | \operatorname { context } ( w ) ) = \prod _ { j = 2 } ^ { k } P ( d _ { j } ^ { w } | _ { j - 1 } ^ { w } x _ { w } ) \tag{5} P(wcontext(w))=j=2kP(djwj1wxw)(5)
分类时,分到左边负类时,乘号左边起作用

参数估计

参数估计采用极大似然的思想,即找到一组参数,使得根据上下文context(w)预测为目标词w的“整体概率”最大

参数优化

W2V采用随机梯度上升法,对每个样本(context(w),w),就对所有的参数进行更新。独立地优化路径上每个二分类器的L(w, j),让每个L(w, j)同时往梯度上升的方向更新,逐步逼近整体最优 。

2.2.2 Skip-gram

Skip-Gram模型与CBOW相反。输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量(即概率排前N的词)。

∑w∈clog⁡p(Context(w)∣w)(6)\sum _ { w∈c } \log p (Contex t ( w ) | w ) \tag{6} wclogp(Context(w)w)(6)

∑w∈V∑wc∈context(w)log⁡P(wc∣w)(7)\sum _ { w∈V } \sum _ { w_c∈context( w ) } \log P ( w_c|w ) \tag{7} wVwccontext(w)logP(wcw)(7)

p(wO∣wI)=exp⁡(vwO′⊤vwI)∑w=1Wexp⁡(vw′⊤vwI)(8)p\left(w_{O} \mid w_{I}\right)=\frac{\exp \left(v_{w_{O}}^{\prime}{ }^{\top} v_{w_{I}}\right)}{\sum_{w=1}^{W} \exp \left(v_{w}^{\prime}{ }^{\top} v_{w_{I}}\right)} \tag{8} p(wOwI)=w=1Wexp(vwvwI)exp(vwOvwI)(8)

负采样

Skip-gram模型通常采用了基于负采样的方法进行优化 。

注意,在Word2Vec 实际实现中,并不是对上下文中的每一个词都进行了n 次负采样,而是仅进行了|context(w)| 次负采样操作

2.2.3 gensim中的word2vec

import gensim as gm
from gensim.models import word2vec
sens = word2vec.LineSentence("file.txt")
# one line = one sentence. Words must be already preprocessed and separated by
whitespace.
# sens:句子,min_count:词频小于设定值的词扔掉,window:一次取的词数,size:词向量的维度,sg:使用CBOW/Skip,hs:若为1采用树优化,worker:CPU并行数量,iter:最大迭代次数
model = gm.models.Word2Vec(sens, min_count=0, window=5,
size=128, sg=0, hs=0, negative=5, workers=8, iter=200)
# sg ({0, 1}, optional) 1 for skip-gram; 0 for CBOW.
# hs ({0, 1}, optional) If 1, hierarchical softmax will be used for model training. If
# 0, and negative is non-zero, negative sampling will be used.
# 也可以保存为txt
model.wv.save_word2vec_format("WV.model_128.bin",binary=True)# 使用和输出
model =gm.models.KeyedVectors.load_word2vec_format("WV.model.bin", binary=True)
vector = model.word_vec['computer']
for w in model.vocab:print(model.word_vec(w))

2.2.4 Word2vec 参数选择(经验性结论)

根据Lai S, Liu K, He S, et al. How to generate a good word embedding[J]. IEEE Intelligent Systems, 2016, 31(6): 5-14.

  1. 根据具体任务,选一个领域相似的语料,在这个条件下,语料越大越好
  2. 语料小(小于一亿词,约 500MB 的文本文件)的时候用 Skipgram 模型,语料大的时候用 CBOW 模型
  3. 设置迭代次数为三五十次,维度至少选50

中文信息处理(六)—— 神经语言模型与词表示(word2vec)相关推荐

  1. (六) 语言模型 Language Madel 与 word2vec

    语言模型简介(Language Model) 简单的说,语言模型 (Language Model) 是用来计算一个句子出现概率的模型,假设句子  ,其中  代表句子中的第  个词语,则语句 W 以该顺 ...

  2. 中文信息处理——纵览与建议

    中文信息处理--纵览与建议 (2007-04-11 22:25:49) 转载▼ 分类: 技术视野 2004年10月写的一个材料. ----------------------------------- ...

  3. gensim词向量Word2Vec安装及《庆余年》中文短文本相似度计算 | CSDN博文精选

    作者 | Eastmount 来源 | CSDN博文精选 (*点击阅读原文,查看作者更多精彩文章) 本篇文章将分享gensim词向量Word2Vec安装.基础用法,并实现<庆余年>中文短文 ...

  4. 哈工大中文信息处理_【NLP】哈工大车万翔教授 自然语言处理NLPer的核心竞争力是什么?19页ppt...

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要4分钟 跟随小博主,每天进步一丢丢 整理:专知 导读 自然语言处理是当前人工智能研究的重要方向之一.那么从事NLP的人员如何能够不断升级,构建核 ...

  5. 中文信息处理的主流技术是什么?

    中文信息处理的主流技术是什么? 从20世纪50年代初机器翻译课题被提出算起,自然语言处理(NLP)的研发历史至少也有50年了.90年代初,NLP的研究目标开始从小规模受限语言处理走向大规模真实文本处理 ...

  6. 中文信息处理(二)—— 分词

    文章目录 中文信息处理核心技术 中文分词 NLP任务层次 一.为什么分词? 二.分词为什么难? 三.常见的分词系统 四.几种分词方法 1. 基于词表的分词 1.1 主要思想 1.2 最大匹配分词法关键 ...

  7. 信息编码与计算机语言,中文信息处理,是用计算机对中文(包括口语和书面语)进行转换、传输、存贮、分析等加工的科学。...

    题目所在试卷参考答案: 参考答案 一. 1.D 2.C(A.曼延-蔓延,消蚀-销蚀:B.博杀-搏杀:D.暗然-黯然,愧叹-喟叹) 3.A(①协调:配合得适当,多指部门的配合:谐调:多指物理方面的调制和 ...

  8. 神经网络 和 NLP —— 语言模型和词向量

    前段时间一口气读完了 NN4NLP,很是畅快,非常喜欢作者行文讲解的口吻和逻辑.大概两周读完,每页都有收获,读完后反而担心有所疏漏,知识太多留不住,索性从头来一遍,把学习过程的知识点和思考记录下来,也 ...

  9. 计算机信息处理技术的发展历程,中文信息处理技术发展简史.docx

    中文信息处理技术发展简史 张华平 (中国科学院计算技术研究所软件实验室北京100080) E-mail: zhanghp@sof[ware? Homepage: ; hMp://pipy_ 摘要:真正 ...

最新文章

  1. Gradle 的使用
  2. Oracle 修改数据库基本参数
  3. python数据驱动测试_python数据驱动--Excel维护测试用例
  4. 温故而知新 js 的错误处理机制
  5. vue 上传文件_前后端分离项目,如何优雅实现文件存储!
  6. 写一个函数返回参数二进制中1的个数
  7. a标签写链接地址跳转到下载企业微信app页面
  8. 走近汇编理解与内核编程
  9. 如何使用TeamViewer在会话期间画图?
  10. Atitit. 衡量项目规模 ----包含的类的数量 .net java类库包含多少类 多少个api方法??
  11. 最新二开版漫画小说听书三合一完整源码/整合免签接口/搭建教程/带采集接口
  12. Webstorm返回上一步操作快捷键 格式化代码快捷键
  13. xss-labs靶场全通关
  14. 小程序快递单号查询接口物流助手对接指南
  15. 阿里天池金融数据分析赛题2:保险反欺诈预测baseline
  16. 利用微信公众号实现商品的展示和支付(2)
  17. 在Unreal引擎中利用实现实时动作捕捉
  18. ionic3开发系列——ionic3懒加载配置
  19. JLH统计法统计飞龙(C++) kkmd66
  20. 微信公众号如何变得更好_改善内容审核是平台变得更好的方式。

热门文章

  1. 指尖的流连.9月13
  2. webkit内核浏览器的CSS写法
  3. 基于Visual Studio2012实现Windows8的metro界面笔迹手写识别文档
  4. html语言应用规则,html所选标签没有应用CSS规则是什么意 – 手机爱问
  5. ReentrantLock1.8源码
  6. ZOJ-1094-Matrix Chain Multiplication
  7. JS_prototype
  8. 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)【中】
  9. c#查看远程文件是否存在
  10. 【重识 HTML + CSS】浮动