【CS224n】Part1:NLP with Deep Learning 小白的NLP学习之路
本人小白一枚,最近入坑NLP,现跟着斯坦福教程一步步学(教案原文),以下为Part1部分的学习总结。
1. word Vectors
我们知道我们要处理自然语言时,通常将单词变为词向量形式,后期对词向量进行后续的处理。
最基础的词向量便是One-hot vertor (即目标单词位置为1,其他位置为0)。但是这种形式十分稀疏,并且不能捕捉到上下文的关联。
2. SVD Based Methods
由于one-hot vertor方法不能捕捉到上下文的关联,提出了基于SVD的方法。
1). Word-Document Matrix
-> 可以捕捉上下文关联
-> 但是矩阵太大,与文件数M成正比 R|V|×M
2). Window Based Co-occurrence Matrix
-> 每个单词与相加单词在特定大小的窗口出现的频次组成的矩阵
- I enjoy flying.
- I like NLP.
- I like deep learning.
The resulting counts matrix will then be:
3). Applying SVD to the cooccurrence matrix
-> 计算前K维捕获的方差量,当其达到满意的百分比时,将其子矩阵H1:|v|,1:k 作为词嵌入矩阵。
方差量
缺点:维度常变化、高维性、稀疏、二次cost to train、词频不平衡
改进:忽略一些词(is,and,or…)、根据文档中单词之间的距离对共现计数进行加权、使用Pearson相关,将负计数设为0
4). Iteration Based Methods - Word2vec
- 算法: CBOW -> () <- ->交叉熵 ->更新V、U
Skip-gram <- () -> ->朴素贝叶斯 ->更新V、U
|______>交叉熵 -> loss function - 训练方式: 负采样 -> 面对抽样负面示例来定义目标 (negative words)
分层Softmax -> 使用有效树来定义目标以计算所有词汇的概率(随机游走)
这种模型需要对大量数据集进行计算和存储全局信息。
4.1.1 Continuous Bag of Words Model (CBOW)
CBOW模型:
从周围单词预测中心单词。
每个单词需要学习两个向量。
- n为任意大小,用于定义嵌入空间的大小
- V 输入矩阵,V的第i列为word wi的n维嵌入vector,vi -> n * 1 vector
- U 输出矩阵,U的第j行为word wj的n维嵌入vector,uj -> 1 * n vector
其中 y -> one-hot -> R|v|
softmax公式:
交叉熵公式:
由于j为one-hot vector,故而简化交叉熵公式为:
由于相似向量的点积更高,推动相似的词彼此接近以获得更高的分数。
为了学习输入矩阵U和输出矩阵V,CBOW定义了一个代价函数,用于衡量预测中心词的好坏程度。然后通过随机梯度下降更新矩阵U和V来优化该代价函数。
未完待续。。。