1.算法背景:
(1)N-gram:n-1阶的Markov模型,认为一个词出现的概率只与前面n-1个词相关;统计预料中各种词串(实际应用中最多采用n=3的词串长度)的出现次数,并做平滑处理(应对count=0和count=1的情况)。在预测一个句子的概率时,只需要找到相关的概率参数,将他们连乘起来。
(2)神经概率语言模型:将单词映射为embedding, 输入隐藏层,激活函数用tanh,输出层为一个softmax多分类器。得到的embedding可以体现单词之间的相似性,因为神经概率语言模型中假定了相似的词对应的词向量也是相似的,且概率函数关于词向量时光滑的。词向量模型自带平滑化功能,因为概率函数取值范围不包含边界值0,1。
(3)词向量的编码方式:one-hot representation(有维数灾难、词汇鸿沟和强稀疏性的问题),distributed representation。
2.网络结构:
3.分类:
(1)crow:
one-hot格式的输入,乘以权重矩阵W,得到W的某一行h,多个h加和取平均输入隐藏层。
用一个词作为输入,来预测周围的上下文。
(2)skip-gram:
输入层到输出层的原理不变,但隐藏层到输出层,损失函数变成多个词损失函数之和。
拿一个词的上下文作为输入,来预测这个词。
4.算法流程:
(1)词向量预处理步骤:
对输入文本生成词汇表,统计词频,从高到低排序,取最频繁的V个词构成词汇表。确定词向量的维数,随机初始化每个词embedding。
(2)skip-gram / crow处理步骤:
确定窗口大小window,从(i-window)到(i+window)生成训练样本;确定batch_size,必须是2*window的整数倍,确保每个batch包含一个词对应的所有样本;用负采样或者层次softmax的方法训练模型;神经网络迭代训练到一定次数,得到输入层到隐藏层的参数矩阵,矩阵中每一行的转置即是对应的词向量。
5.参数设置:
- Skip-Gram 的速度比CBOW慢一点,小数据集中对低频次的效果更好;
- Sub-Sampling Frequent Words可以同时提高算法的速度和精度,Sample 建议取值为[10^-5, 10^-3] ;
- Hierarchical Softmax对低词频的更友好;
- Negative Sampling对高词频更友好;
- 向量维度一般越高越好,但也不绝对;
- Window Size,Skip-Gram一般10左右,CBOW一般为5左右。
- embedding_dimensions = number_of_categories**0.25,the embedding vector dimension should be the 4th root of the number of categories
6.优缺点:
优点:
- 由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
- 比之前的 Embedding方 法维度更少,所以速度更快
- 通用性很强,可以用在各种 NLP 任务中
缺点/局限性:
- 由于词和向量是一对一的关系,所以多义词的问题无法解决。
- Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化
- Word2Vec只考虑到上下文信息,而忽略的全局信息;
- Word2Vec只考虑了上下文的共现性,而忽略的了彼此之间的顺序性;
7.优化方法:
- Negative Sample(随机负采样):本质是预测总体类别的一个子集;负采样定义:为什么采用负采样:(1)将多分类问题转化为K+1个二分类问题,从而减少计算量,加快训练速度;(2)保证模型训练效果,因为目标词只跟相近的词有关,没有必要使用全部的单词作为负例来更新权重;
负采样的概率分布在tensorflow中实现的是:
其中,s(w_i)是词w_i在字典中根据词频逆排序的序号。 - Hierarchical Softmax:
利用了Huffman树依据词频建树,词频大的节点离根节点较近,词频低的节点离根节点较远,距离远参数数量就多,在训练的过程中&#x