词向量Word2Vec---学习笔记

 本文为下述视频的笔记:

【论文复现代码数据集见评论区】5小时精讲 Paper,BAT大厂导师带你吃透NLP自然语言处理的经典模型Word2vec_哔哩哔哩_bilibili

论文:

Efficient Estimation of Word Representations in Vector Space
向量空间中词表示的有效估计

目录

1. 词向量储备知识

语言模型

2. 论文模型导读

词的表示 word representation

 发展历程

 研究成果

研究意义

 论文总览

 摘要

介绍 Introduction

Word2Vec 评价方法

3. 前人提出的相关模型及其复杂度

NNLM 前馈神经网络语言模型

RNNLM 循环神经网络语言模型

4. 模型精讲

skip-gram

cbow

5. 效率提高的关键技术

层次softmax

负采样 (效果更好)

6. 实验及结果


1. 词向量储备知识

语言模型

概念:语言模型是计算一个句子是句子的概率的模型

基于专家语法规则的语言模型:语言学家企图总结出一套通用的语法规则,比如形容词后面接名词

统计语言模型:通过概率计算来刻画语言模型

P(s) = P(w_{1}, w_{2}, ..., w_{n}) = P(w_{1})\cdot P(w_{2}\mid w_{1})\cdot P(w_{3}\mid w_{1}w_{2})\cdot \cdot \cdot P(w_{n}\mid w_{1}w_{2}...w_{n})

sentence =\left \{ {w_{1},w_{2},...,w_{n}} \right \}

用语料的频率代替概率 N表示语料中不去重词的总数 N1代表1个词,N2代表连续的2个词

N2=N1-1

P(w_{i}) = \frac{count(w_{i})}{N_{1}}        P(w_{i-1},w_{i}) = \frac{count(w_{i-1},w_{i})}{N_{2}}

已知词wi-1 求之后出现词wi的概率 -> 条件概率        P(A\mid B) = \frac{P(AB)}{P(B)}

P(w_{i}\mid w_{i-1}) = \frac{P(w_{i-1},w_{i})}{P(w_{i-1})} = \frac{count(w_{i-1},w_{i})}{count(w_{i-1})}

因为count(wi-1) >= count(wi-1,wi),所以P的值处于0到1 之间 

 统计语言模型中的平滑操作:有一些词或者词组在语料中没有出现,但是不代表它不存在。平滑操作就是为那些没有出现过的词或词组也给一个比较小的概率。

Laplace Smoothing (或 加1平滑):每个词在原来出现次数的基础上加1

此时,P(w_{i}) = \tfrac{count(w_{i})+1}{N+V}

平滑操作的问题:参数空间过大;数据稀疏严重

假设语料库中没有“帅”和“桌子”,

P(张三 很 帅)=P(张三)P(很|张三)P(帅|张三, 很)
P(张三 很 桌子)=P(张三)P(很|张三)P(桌子|张三, 很)
则上述两个句子是句子的概率相同,但显然第一个句子是句子的概率更大
马尔科夫假设:下一个词的出现仅依赖于前面的一个词或几个词
  • unigram: P(s) = P(w_{1})\cdot P(w_{2})\cdot P(w_{3})\cdot \cdot \cdot P(w_{n}) 下一个词的出现不依赖于前面的词
  • bigram: P(s) = P(w_{1})\cdot P(w_{2}\mid w_{1})\cdot P(w_{3}\mid w_{2})\cdot \cdot \cdot P(w_{n}\mid w_{n-1}) 下一个词的出现依赖于前面的一个词
  • trigram: P(s) = P(w_{1})\cdot P(w_{2}\mid w_{1})\cdot P(w_{3}\mid w_{1}w_{2})\cdot \cdot \cdot P(w_{n}\mid w_{n-2}w_{n-1}) 下一个词的出现依赖于前面的两个词
  • k-gram: P(s) = P(w_{1})\cdot P(w_{2}\mid w_{1})\cdot P(w_{3}\mid w_{1}w_{2})\cdot \cdot \cdot P(w_{n}\mid w_{n-k+1}...w_{n-1}) 下一个词的出现依赖于前面的k-1个词

语言模型评价指标:困惑度(Perplexity)

PP(s) = P(w_{1},w_{2},...,w_{n})^{-\frac{1}{n}} = \sqrt[n]{\frac{1}{P(w_{1},w_{2},...,w_{n})}}

开n次方可以忽略句子的长短,长句出现的概率相对较小

句子概率越大,语言模型越好,困惑度越小

2. 论文模型导读

词的表示 word representation

one-hot representation (独热表示):

“话筒”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...]
“麦克”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...]
表示简单; 词越多,维数越高(词表大小V); 无法表示词和词之间关系
distributed representation (分布式表示):
词向量Word2Vec---学习笔记_第1张图片
词向量Word2Vec---学习笔记_第2张图片

 发展历程

 研究成果

  • 提出新的模型结构
  • 提出优化训练的方法,使得训练速度加快
  • 给出训练代码word2vec,使得单机训练成为可能
  • 成果:训练的词向量,又快又好

研究意义

衡量词向量之间的相似程度sim(word1, word2) = cos(wordvec1, wordvec2)

词类比analogy cos(word1 - word2 + word3, wordvec4)

作为预训练模型提升nlp任务:外部任务如命名实体识别、文本分类;应用到其他nlp任务上,相当于半监督训练(减少过拟合,提高模型的泛化程度)

 词向量Word2Vec---学习笔记_第3张图片

 论文总览

词向量Word2Vec---学习笔记_第4张图片

 摘要

摘要核心:

  • 提出了两种新颖的模型结构用来计算词向量
  • 采用一种词相似度的任务来评估对比词向量质量
  • 大量降低模型计算量可以提升词向量质量
  • 进一步,在我们的语义和句法任务上,我们的词向量是当前最好的效果

论文小标题:

1. Introduction

        1.1 Goals of the paper
        1.2 Previous Work
2. Model Architectures (Related Work)
        2.1 Feedforward Neural Net Language Model(NNLM)
        2.2 Recurrent Neural Net Language Model(RNNLM)
        2.3 Parallel Training of Neural networks
3 New Log-linear Models
        3.1 Continuous Bag-of-Words Model
        3.2 Continuous Skip-gram Model
4 Results
        4.1 Task Description
        4.2 Maximization of Accuracy
        4.3 Comparison of Model Architectures
        4.4 Large Scale Parallel Training of Models
        4.5 Microsoft Research Sentence Completion Challenge
5 Examples of the Learned Relationships
6 Conclusion

介绍 Introduction

  • 传统NLP把词当成最小单元处理,并且能够在大语料上得到很好的结果,其中一个例子是N-gram
  • 然而这种方法在许多任务中有其局限性,很多nlp任务只能提供很小的语料,如语音识别、机器翻译,所以简单的扩大数据规模来提升简单模型的表现在这些任务上不再适用,必须寻找更先进的模型
  • 数据量较大时,可以采用分布式表示方法,如语言模型的分布式表示效果会超过 N-gram

Word2Vec 评价方法

  • 内在评估方法,直接评估词语之间的相似性
  • 外在评估方法,通过下游任务的表现来间接评估

3. 前人提出的相关模型及其复杂度

NNLM 前馈神经网络语言模型

n-gram: 根据前n-1个单词,预测第n个位置单词的概率 P(w_{t}\mid w_{t-n+1},...,w_{t-1})

输入层: 输入每个单词的index,将每个index映射成一个向量,相当于一个1XV的one-hot向量乘以一个VXD的矩阵(该矩阵随机初始化,后续通过训练来更新)得到一个1XD的向量,然后将这些向量concat成一个向量

词向量Word2Vec---学习笔记_第5张图片

 隐藏层:一个以tanh为激活函数的全连接层 a=tanh(d+Ux)

输出层:一个全连接层,后面接一个softmax函数(将每个数归一化成0到1之间的数,并且这些数相加为1)来生成概率分布。y=b+Wa,其中y是一个1XV的向量:P(w_{t}\mid w_{t-n+1},...,w_{t-1}) = \frac{exp(y_{w_{t}})}{\sum exp(y_{i})}

语言模型困惑度和Loss的关系:

Loss: L=-\frac{1}{T}\sum_{i=1}^{T}logP(w_{i}\mid w_{i-n+1},...,w_{i-1})

PP(s) = P(w_{1},w_{2},...,w_{T})^{-\frac{1}{T}}=\sqrt[T]{\frac{1}{P(w_{1},w_{2},...,w_{T})}}

log(PP(s))=-\frac{1}{T}log(P(w_{1})P(w_{2}\mid w_{1})...P(w_{T}\mid w_{T-n+1},...,w_{T-1}))

log(PP(s))=-\frac{1}{T}(logP(w_{1})+logP(w_{2}\mid w_{1})+...+logP(w_{T}\mid w_{T-n+1},...,w_{T-1}))

log(PP(s))=-\frac{1}{T}\sum_{i=1}^{T}logP(w_{i}\mid w_{i-n+1},...,w_{i-1})

PP(s) = e^{L}

如何改进/改进方向:

  • 仅对一部分输出进行梯度传播。
  • 引入先验知识,如词性等。
  • 解决一词多义问题。
  • 加速softmax层

RNNLM 循环神经网络语言模型

image-20200918001651607词向量Word2Vec---学习笔记_第6张图片

每个时间步预测一个词,在预测第n个词的时候使用了前n-1个词的信息

 输入层:和NNLM一样,需要将当前时间步的单词转换为词向量

隐藏层:对输入和上一个时间步的隐藏输出进行全连接层操作:s(t)=Uw(t)+Ws(t-1)+d

输出层:一个全连接层,后面接一个softmax函数(将每个数归一化成0到1之间的数,并且这些数相加为1)来生成概率分布。y(t)=b+Vs(t),其中y是一个1XV的向量:P(w_{t}\mid w_{t-n+1},...,w_{t-1}) = \frac{exp(y_{w_{t}})}{\sum exp(y_{i})}

 Loss: L=-\frac{1}{T}\sum_{i=1}^{T}logP(w_{i}\mid w_{i-n+1},...,w_{i-1})

4. 模型精讲

skip-gram

Log-linear model: 将语言模型的建立看成一个多分类问题,相当于线性分类器加上softmax

Y=softmax(wx+b)

语言模型的基本思想:句子中下一个词的出现和前面的词是有关系的,所以可以使用前面的词预测下一个词

Word2Vec基本思想:句子中相近的词之间是有联系的,比如今天后面经常出现上午、下午和晚上。所以Word2Vec基本思想就是用词来预测词,skip-gram使用中心词预测周围词,cbow使用周围词预测中心词

skip-gram原理:看作多分类问题input:wi,label:wi-1,wi-2,wi+1,wi+2

词向量Word2Vec---学习笔记_第7张图片

 词向量Word2Vec---学习笔记_第8张图片

 P(w_{i-1}\mid w_{i})=\frac{exp(u_{w_{i-1}}^{T}v_{w_{i}})}{\sum_{w=1}^{V}exp(u_{w}^{T}v_{w_{i}})}

词向量Word2Vec---学习笔记_第9张图片

cbow

词向量Word2Vec---学习笔记_第10张图片

 词向量Word2Vec---学习笔记_第11张图片

 词向量Word2Vec---学习笔记_第12张图片

5. 效率提高的关键技术

层次softmax

word2vec原理(二) 基于Hierarchical Softmax的模型 - 刘建平Pinard - 博客园

负采样 (效果更好)

word2vec原理(三) 基于Negative Sampling的模型 - 刘建平Pinard - 博客园

6. 实验及结果

你可能感兴趣的:(nlp学习笔记,word2vec,人工智能,nlp)