词向量与相关应用

自然语言处理的应用场景比较常见,常见的任务有:自动摘要,指代消解,机器翻译,词性标注,中文分词,日语分词,主题识别,文本分类,情感分析等等。传统的NLP主要是基于规则来完成的,现代处理方法是基于统计机器学习来完成的,比如HMM(隐马尔科夫模型),CRF(条件随机场),SVM(支持向量机),LDA(一种档主题生成模型),CNN(卷积神经网络)等等。本文分析了词向量表示的表示问题,及其研究方法和计算方式。
展开查看详情

1.词向量与相关应用 七月在线 寒小阳 2017年03月25日

2. NLP常见任务 p  p  p  p  p  p  p 

3.NLP处理方法 p 传统: 基于规则 p 现代:基于统计机器学习 n  HMM, CRF, SVM, LDA, CNN… n  “规则”隐含在模型参数里

4.词编码需要保证词的相似性

5. 简单 词/短语 翻译 p  向量空间分布的相似性 左:英语 右:西班牙语

6. 向量空间子结构 VKing - VQueen + VWomen = VMan VParis - VFrance + VGerman = VBerlin 最终目标:词向量表示作为机器学习、特别是深度学 习的输入和表示空间

7. 在计算机中表示一个词 猫🐱 美丽 ❖  动物 ❖  漂亮 问题: ❖  胎生 ❖  多姿 1. 不能分辨细节的差别 ❖  有毛 ❖  靓丽 2. 需要大量人为劳动 ❖  弹跳性好 ❖  好看 俊俏 3. 主观 ❖  体型小 ❖  ❖  宠物 ❖  迷人 4. 无法发现新词 ❖  吃肉 ❖  标志 5. 难以精确计算词之间 ❖  会发声 ❖  端庄 的相似度 上位词 同义词

8. 离散表示: One-hot表示 语料库 John likes to watch movies. Mary likes too. John also likes to watch football games. 词典 {"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10} One-hot表示 ❖  词典包含10个单词,每个 John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 单词有唯一索引 likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] … ❖  在词典中的顺序和在句子 中的顺序没有关联 too : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

9. 离散表示:Bag of Words Ø  文档的向量表示可以直接将各词的词向量表示加和 John likes to watch movies. Mary likes too. [1, 2, 1, 1, 1, 0, 0, 0, 1, 1] John also likes to watch football games. [1, 1, 1, 1, 0, 1, 1, 1, 0, 0] Ø  词权重 词在文档中的顺序没有被考虑 u  TF-IDF (Term Frequency - Inverse Document Frequency) 信息检索 词t的IDF weight N: 文档总数, nt: 含有词t的文档数 [0.693, 1.386, 0.693, 0.693, 1.099, 0, 0, 0, 0.693, 0.693] u Binary weighting 短文本相似性,Bernoulli Naive Bayes [1, 1, 1, 1, 1, 0, 0, 0, 1, 1]

10. 离散表示:Bi-gram和N-gram 为2-gram建索引: John likes to watch movies. Mary likes too. "John likes”: 1, [1, 1, 1, 1, 1, 1, 0, 0, 0, 0] "likes to”: 2, "to watch”: 3, "watch movies”: 4, John also likes to watch football games. "Mary likes”: 5, [0, 1, 1, 0, 0, 0, 1, 1, 1, 1] "likes too”: 6, "John also”: 7, "also likes”: 8, “watch football”: 9, "football games": 10, 优点:考虑了词的顺序 缺点:词表的膨胀

11. 语言模型 Ø  一句话 (词组合) 出现的概率 Unigram/1-gram P(Mary likes too) = P(too | Mark, likes) * P(likes | Mary) * P(Mary) = P(too) * P(likes) * P(Mary) Bi-gram/2-gram P(Mary likes too) = P(too | Mark, likes) * P(likes | Mary) * P(Mary) = P(too | likes) * P(likes | Marry) * P(Mary)

12. 离散表示的问题 Ø  无法衡量词向量之间的关系 酒店 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] 各种度量(与或非、距离) 宾馆 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0] 都不合适 旅舍 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0] 太稀疏,很难捕捉文本的含义 Ø  词表维度随着语料库增长膨胀 Ø  n-gram词序列随语料库膨胀更快 Ø  数据稀疏问题

13. 分布式表示 (Distributed representation) 红色的大型卡车 memory unit 1 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 黄色的中型SUV memory unit 2 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] 紫色的小型电动车 memory unit 3 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] 需要的记忆 单元数 = 颜色20 X 型号3 X 车型30 分布式表示 颜色记忆单元20 + 型号记忆单元3 + 车型记忆单元30

14. 分布式表示 (Distributed representation) 用一个词附近的其他词来表示该词 “You  shall  know  a  word  by  the  company  it  keeps” (J.  R.  Firth  1957:  11)   现代统计自然语言处理中最有创见的想法之一。 banking附近的词将会代表banking的含义

15. 共现矩阵 (Cocurrence matrix) Word - Document 的共现矩阵主要用于发现主题(topic),用于 主题模型,如LSA (Latent Semantic Analysis) 局域窗中的Word - Word 共现矩阵可以挖掘语法和语义信息 •  I  like  deep  learning.     • I  like  NLP.     • I  enjoy  flying.   window  length设为1(一般设为5~10) 使用对称的窗函数(左右window  length都为1)  

16.共现矩阵:Word - Word •  I  like  deep  learning.     • I  like  NLP.     • I  enjoy  flying.  

17.存在的问题 Ø 将共现矩阵行(列)作为词向量 •  向量维数随着词典大小线性增长 •  存储整个词典的空间消耗非常大 •  一些模型如文本分类模型会面临稀疏性问题 •  模型会欠稳定 构造低维稠密向量作为词的分布式表示 (25~1000维)!

18.SVD降维 Ø  最直接的想法:用SVD对共现矩阵向量做降维

19.SVD降维

20. SVD降维的问题 Ø  计算量随语料库和词典增长膨胀太快,对X(n,n)维 的矩阵,计算量O(n^3)。 而对大型的语料库, n~400k,语料库大小1~60B token Ø  难以为词典中新加入的词分配词向量 Ø  与其他深度学习模型框架差异大

21. NNLM (Neural Network Language model) Ø  直接从语言模型出发,将模型最优化过程转化为 求词向量表示的过程 目标函数 Ø  使用了非对称的前向窗函数,窗长度为n-1 Ø  滑动窗口遍历整个语料库求和,计算量正比于语料库大小 Ø  概率P满足归一化条件,这样不同位置t处的概率才能相加,即 用神经网络来实现概率P

22.NNLM:结构 • (N-1)个前向词:one-hot表示 • 采用线性映射将one-hot表 示投影到稠密D维表示 • 输出层:Softmax • 各层权重最优化:BP+SGD C矩阵是投影矩阵,也是稠密词向量表示 词典维数V,稠密词向量表示维数D

23.NNLM的计算复杂度 每个训练样本的计算复杂度:N * D + N * D * H + H * V 一个简单模型在大数据量上的表现比复杂模型在少数据量上的表现会好

24.word2vec: CBOW(连续词袋) ü  无隐层 ü  使用双向上下文窗口 ü  上下文词序无关 (BoW) ü  输入层直接使用低维稠密表示 ü  投影层简化为求和(平均) 目标函数

25.CBOW:层次Softmax •  使用Huffman Tree 来编码输出层的词 典 •  只需要计算路径上 所有非叶子节点词 向量的贡献即可 •  计算量降为树的深 度 V => log_2(V) W=“足球”时的相关记号示意图

26. CBOW:层次Softmax Ø  Sigmoid函数 Ø  n(w,j):Huffman数内部第j层的节点 Ø  ch(n(w,j)):n节点的child节点 Ø  [[n(w,j+1)=ch(n(w,j)]] 是选择函数,表明只选择从根节点到目 标叶节点路径上的内部节点

27. CBOW:负例采样 P(w|context(w)): 一个正样本,V-1个负样本,对负样本做采样 是context(w)中词向量的和 是词u对应的一个(辅助)向量 NEG(w)是w的负样本采样子集 损失函数:对语料库中所有词w求和

28. CBOW:负例采样 词典中的每一个词对应一条线段,所有词组成了[0,1]间的剖分 实际使用中取counter(w)^(3/4)效果最好 组成了[0, 1]间的剖分 将[0, 1]划分为M=10^8等分,每次随机生成一个[1, M-1]间的整数, 看落在那个词对应的剖分上。

29.Word2Vec: Skip-Gram模型 Ø  无隐层 Ø  投影层也可省略 Ø  每个词向量作为log-linear模 型的输入 目标函数: Ø  概率密度由Softmax给出