学习总结
(1)word2vec主要是利用文本中词与词在局部上下文中的共现信息作为自监督学习信号;
(2)还有一种稍微古老的估计词向量方法——基于矩阵分解,如在LSH潜在语义分析,手下对预料进行统计分析,获得含有全局统计信息的【词-上下文】共现矩阵;然后,利用SVD进行降维。但是这样做不具有良好的几何性质。
(3)改进(2)的矩阵分解分解方法, 就提出了Glove方法。
文章目录
- 三、共现矩阵
- 3.1 一个栗子
- 3.2 降维操作
- (1)SVD方法
- (2)改进SVD
- 10.1 正向传递
- 10.2 反向传播
- 10.3 举栗子
一、回顾
1.1 模型思想
上次对word2vec开了个头,也说了为了优化训练速度,可以用SGD,即Stochastic gradient descent 随机梯度下降。迭代地在每个滑动窗口为SGD取梯度;由于每个窗口只有 2m+1 个单词,所以该向量会很稀疏:
关于word2vec有两种模型:skip-gram和CBOW。
二、梯度下降进行优化
Stochastic gradients with word vectors!
1.2 负采样(skip-gram)
在CBOW模型中,通过对进行负采样,同样能获得对应于正样本的负样本集合,下面则是基于Skip-gram讲解负样本。
归一化的训练计算代价很高,所以可以使用负采样(HW2有这个任务)。
主要思想:基于一个true pair(中心词和上下文词)和几个noise pair(中心词和随机单词),训练一个二元逻辑回归模型。
提出负采样的论文:“Distributed Representations of Words and Phrases and their
Compositionality” (Mikolov et al. 2013)
最大化目标函数:
其中logistic/sigmoid函数:
即最大化在first log中的两个词的共现概率,最小化noise words的概率。
注意在HW2中我们的公式表示是:
三、共现矩阵
3.1 一个栗子
这里有两种option:
- window:类似word2vec,使用滑动窗口,捕获语法和语义信息。
- word-document:会给出一般形式的主题,导致LSH(Latent Semantic Analysis,潜在语义分析)。
【栗子】
一个三句话的语料库:
• I like deep learning
• I like NLP
• I enjoy flying
上面矩阵的含义,比如I 和 like在第一二句话中都有出现,所以在共现矩阵的元素值为2。
3.2 降维操作
为了将高维向量转为低维的稠密向量。需要进行降维。
经典的方法:
(1)SVD方法
对共现矩阵,进行SVD分解,Singular Value Decomposition后的U和V矩阵都是正交矩阵(orthonormal)。
(2)改进SVD
论文:Hacks to X (several used in Rohde et al. 2005 in COALS)
- 使用倾斜的窗口能够计数靠近的单词,而非更远的单词。
- 使用pearson相关系数计数。
论文:COALS model from
Rohde et al. ms., 2005. An Improved Model of Semantic Similarity Based on Lexical Co-Occurrence
四、Glove
官方github:https://github.com/stanfordnlp/GloVe
Count based vs. direct prediction:
4.1 Encoding meaning components in vector differences
Glove模型目标:词的向量化表示,使得向量之间尽可能多蕴含语义和语法信息。
方法概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe模型学习词向量。
开始 -> 统计共现矩阵 -> 训练词向量 -> 结束
栗子:比如有一个语料库:
现在窗口为5,即中心词左右两边有2个单词组成的统计窗口,窗口0、1长度小于5是因为中心词左侧内容少于2个,同理窗口8、9长度也小于5。窗口内容如下:
窗口标号 |
中心词 |
窗口内容 |
0 |
i |
i love you |
1 |
love |
i love you but |
2 |
you |
i love you but you |
3 |
but |
love you but you love |
4 |
you |
you but you love him |
5 |
love |
but you love him i |
6 |
him |
you love him i am |
7 |
i |
love him i am sad |
8 |
am |
him i am sad |
9 |
sad |
i am sad |
论文:Encoding meaning components in vector differences
[Pennington, Socher, and Manning, EMNLP 2014]
Encoding meaning in vector differences
[Pennington, Socher, and Manning, EMNLP 2014]
算出对应的比例数值:
一个问题:
4.2 预训练任务
4.3 参数估计
Glove通过优化以下加权损失函数进行学习:
其中:
- 表示词w与上下文c在受限窗口大小内的共现次数;是共现矩阵
- 表示每一个样本的权重,样本的权重与其共现次数有关:共现次数少的样本则噪声较大,权重小,高频共现样本也要避免过高权重
- 表示中心词w的向量表示,表示上下文c的向量表示
- 和分别表示相应的偏置项
权重函数首先应该是非减的,其次当词频过高时,权重不应过分增大,所以具体的权重函数:
五、 词向量的评估
(1)Intrinsic Evaluation内部任务评价方法:对词义相关性或类比推理性的表达能力进行评价。
(2)Extrinsic Evaluation外部任务评价方法:在实际任务中,根据下游任务的性能指标进行判断。
5.1 词义相关性
5.2 Glove可视化
比如比较级和*:
5.3 和其他算法的比较
六、解决一词多义问题
论文1:Improving Word Representations Via Global Context And
Multiple Word Prototypes (Huang et al. 2012)
论文2:Linear Algebraic Structure of Word Senses, with
Applications to Polysemy (Arora, …, Ma, …, TACL 2018)
七、分类模型复习
7.1 Classification intuition
最简单的方法用线性decision boundary进行分类,如下图:
7.2 Softmax分类器
7.3 交叉熵损失函数
交叉熵概念源于信息论,假设真实的概率分布为p,我们要计算的模型的概率为q:
7.4 传统的ML优化过程
八、Neural Network Classifiers
用的是非线性的decision boundaries,所以能够更好的拟合数据。
8.1 不同点1:
8.2 不同点2:一个神经网络=同时进行多个LR
九、Named Entity Recognition (NER)
命名实体识别。
十、Lesson3:Neural net learning
10.1 正向传递
Forward pass: compute results of operations and save intermediate values,即计算结果并保存中间值。
10.2 反向传播
Backward pass: apply chain rule to compute gradients,即反向传播利用链式求导法则求梯度。
10.3 举栗子
现在以
(1)正向传递
(2)反向传播
注意虽然这里的不求也可以,但是在pytorch是会求出来的(因为如果是多层,则需要用到该中间层求得的的梯度)。
Reference
(1)课程ppt:https://web.stanford.edu/class/cs224n/slides/
(2)Speech and Language Processing :https://web.stanford.edu/~jurafsky/slp3/
(3)课程官网:https://see.stanford.edu/Course/CS224N#course-details
(4)理解Glove模型具体推导过程