KL散度:反映P、Q连个分布的差异,差异越小,KL值越小
事件A和B:D(A||B) = sum(Pa(X) * log(Pa(X) / Pb(X))) = sum(Pa(X) * logPa(X) - Pa(X) * logPb(X))
A设为正确的分布,则Pa(X) * logPa(X) 为A的熵,- Pa(X) * logPb(X)为A与B的交叉熵
A的熵是常量,特定条件下KL散度与交叉熵等价
在softmax学习时,把真实分布当做A,A的熵就是一个常量。
学习使非真实分布^y更接近真实分布y过程中交叉熵变小,所以最小化损失函数使预测的非真实分布更接近真实分布(标签)。
输入单词Wi词向量的更新取决与其与词汇表中所有单词的预测误差。预测误差越大,则目标单词(预测的单词)对于输入单词词向量的更新过程影响越大。
一个词的常规稳定的位置通常会由他的组合词,也就是经常一起出现的词决定的。所以这些最常出现的组合词就决定了目标词的更新规律.
LDA(Latent Dirichlet Allocation)是主题模型(Topic Models)的一种计算方法,和词向量并无直接关系;加入LDA的结果作为word embeddings的输入,来增强文章分类效果。
LSA(Latent Semantic Analysis)与word2vec有一些关系了:
- LSA的核心技术是SVD,一种矩阵分解,而SVD一般在NLP中的使用并非是使用它分解的三个矩阵,
- 而是合并右边两个矩阵,合并之后左边的矩阵就可以视为word embeddings,
- 右边的矩阵可以视为当它是context时候的embeddings。一般的矩阵分解, 比如NMF,也可以得到word embeddings。
- 而word2vec一再被人证明从结果看是一个全局PPMI(共现)矩阵的分解。
- 某种意义讲,word embeddings可以理解是传统矩阵分解的一个加速版本。
矩阵求导
上下文相似的词,其语义也相似--词的语义由其上下文决定。
基于分布假说的词表示方法,根据建模的不同,
主要可以分为三类:基于矩阵的分布表示(Global Vector,常用的上下文是词)、基于聚类的分布表示和基于神经网络的分布表示。
核心思想也都由两部分组成:一、选择一种方式描述上下文;二、选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系。
语言模型包括文法语言模型和统计语言模型;一般我们指的是统计语言模型。
神经网络词向量通过神经网络对上下文,及上下文与目标词之间的关系进行建模。
最大优势在于可以表示复杂的上下文。最常用的上下文是词,如果使用包含词序信息的 n-gram 作为上下文,
当 n 增加时, n-gram 的总数会呈指数级增长,此时会遇到维数灾难问题。
而神经网络在表示 n-gram 时,可通过一些组合方式对 n 个词进行组合,参数个数仅以线性速度增长。
这样神经网络模型可以对更复杂的上下文进行建模,在词向量中包含更丰富的语义信息。
分布式词向量并不是word2vec的作者发明的,只是提出了一种更快更好的方式来训练语言模型。
Word embedding的训练方法可分为两类:
一类是无监督或弱监督的预训练;一类是端对端(end to end)的有监督训练,以word2vec和auto-encoder为代表。
特点是不需要大量的人工标记样本就可以得到质量还不错的embedding向量。不过因缺少了任务导向,可能和要解决的问题还有一定的距离。
因此往往会在得到预训练的embedding向量后,用少量人工标注的样本去fine-tune整个模型。
端对端的模型在结构上往往更加复杂,也因为有着明确的任务导向,
端对端模型学习到的embedding向量也往往更加准确。
例如,通过一个embedding层和若干个卷积层连接而成的深度神经网络以实现对句子的情感分类,可以学习到语义更丰富的词向量表达
共现矩阵
主要用于发现主题,解决词向量相近关系的表示;
将共现矩阵行(列)作为词向量
例如:语料库如下:
• I like deep learning.
• I like NLP.
• I enjoy flying.
将共现矩阵行(列)作为词向量表示后,可以知道like,enjoy都是在I附近且统计数目大约相等,他们意思相近
共现矩阵不足: 面临稀疏性问题、向量维数随着词典大小线性增长
解决:SVD、PCA降维,但是计算量大
GloVe是斯坦福大学提出的一种新的词矩阵生成的方法,综合运用词的全局统计信息和局部统计信息来生成语言模型和词的向量化表示。
LSA: 能够有效地利用全局统计信息 不能结合上下文语境
word2vec: 可以结合上下文语境 在上下文窗口训练,不能很好地利用语料库的统计数据;word2vec是局部语料库训练的,其特征提取是基于滑窗的;
glove的滑窗是为了构建co-occurance matrix,是基于全局语料的,glove需要先统计共现概率;
word2vec可以进行在线学习,glove则需要统计固定语料信息。
word2vec是无监督学习,同样由于不需要人工标注;glove通常被认为是无监督学习,但实际上glove还是有label的,即共现次数。
word2vec损失函数实质上是带权重的交叉熵,权重固定;glove的损失函数是最小平方损失函数,权重可以做映射变换。
glove可以被看作是更换了目标函数和权重函数的全局word2vec。
参考:
https://www.zhihu.com/question/40309730