Unsupervised Learning: Word Embedding
NLP中词的向量表示方法, 其中主要是词嵌入(Word Embedding),包括count-based和prediction-based两种方法. Word Embedding生成的词向量特性, 以及机器问答、机器翻译、图像分类、文档嵌入应用.
目录
词嵌入word embedding: 降维算法(Dimension Reduction)的典型应用
向量表示词方法
1-of-N Encoding
最经典的做法. 向量维度=字典中单词的数目,每一个单词对应其中一个维度为1,其余为0.
缺点: 不够informative. 任意两个vector不同, 无法建立起同类word联系, 无法从词中得到任何信息.
apple = [ 1 0 0 0 0] bag = [ 0 1 0 0 0] cat = [ 0 0 1 0 0] dog = [ 0 0 0 1 0] elephant = [ 0 0 0 0 1] |
Word Class
同样性质的word聚类(clustering),划分成多个class,用word所属的class来表示这个word,只有clustering不够,不同class之间关联无法有效表达(如动物与动物行为).
Word Embedding
含义: 词嵌入(Word Embedding)把每一个word投影到高维空间. (升维)
但该空间维度远比1-of-N Encoding维度低. 从1-of-N Encoding 到Word Embedding 可看作Dimension Reduction过程. (降维)
目标: 类似语义(semantic)的词汇,在投影空间接近,空间维度有特殊的含义.
假设Word Embedding的特征如图,则横轴为生物与其它东西的区别,纵轴为动词名词差别.
无监督问题
word embedding是无监督方法(unsupervised approach),输入大量的文章,即可得到每个词汇embedding后的特征向量.
目标为训练神经网络, 其输入是词汇,输出是对应的word embedding向量,但训练样本只有输入文字, 没有输出embedding.
对比Auto-encoder(DL降维方法): 训练神经网络使之输入等于输出,取隐藏层为降维结果, 自编码Auto-encoder通过自我压缩和解压寻找各维度相关信息.
word embedding不能用Auto-encoder解决,输入向量通常1-of-N编码各维无关,不携带信息.
Word Embedding基本精神: 词汇的含义可从上下文得.
输入“马某某520宣誓就职”、“蔡某某520宣誓就职”,“马某某”和“蔡某某”前后有类似内容,可以推测“马某某”和“蔡某某”这两个词汇代表同类含义.
(赶紧改掉, CSDN也太敏感, 图片里出现个名字就违规, 再放一会儿博主人没了)
构建word embedding向量的方法: Count based, Prediction based
Count based
若两个词汇wi, wj在同一篇文章中出现(co-occur),两者词向量v(wi), v(wj)较接近.
两个词汇同时出现(co-occur)的次数: Nij.
使两者词向量内积接近co-occur次数Nij,这个思想和矩阵分解(matrix factorization)思想一样.
该方法代表: Glove Vector
Prediction based
暂时没有人比较过count based与prediction based方法的差异/优劣.
流程
训练一个神经网络, 给sentence, 根据当前的word ,预测下一个word.
1. word用1-of-N encoding表示成特征向量.
输入: 词w_{i-1}的1-of-N encoding.
输出: 该词作为w_{i-1}的下一个词w_{i}的几率. (对应1-of-N编码中该维为1其余维为0)
output的维数和input相等,均为字典总词汇个数, 只不过每一维都是小数.
该多层感知机(multilayer perceptron)神经网络:
2. 取第一个隐藏层的输入z,z可代表一个word, 作为该词汇的embedding.
词向量/ word embedding 特征: V(w)
Prediction based结果与词汇含义关系
训练文本:
$$ w_{i-1} $$ | $$ w_{i} $$ |
蔡某某 | 宣誓就職 |
馬某某 | 宣誓就職 |
输入为“蔡某某”和“馬某某”时,输出接“宣誓就职”的几率都较高.
为使不同的输入得到相同输出,需进入隐藏层前,通过weight将输入向量投影到位置更近的低维空间.
所以prediction-based模型训练时, 考虑了词汇上下文的联系. 第一个隐藏层的输入具有word embedding的特性.
即对1-of-N编码进行Word Embedding降维的结果=神经网络模型第一层hidden layer的输入向量. 通过控制第一层隐藏层大小可控制目标降维空间的维数.
拓展输入n个词汇预测
只用1个词汇预测下一个的约束太弱,词汇搭配过多, 难以预测. 拓展使用n个(至少10个)词汇预测下一个词汇,可以得到较好结果.
以输入2个词汇为例:
可把两个vector拼接为长vector作为input.
希望相连的weight绑定, 使之输入时对应维度(对应隐藏层的相同神经元)处权重相同. 图中用同样的颜色标注:
共用参数理由:
1. 如果不这么做,交换word位置得到的Embedding结果不同. 设置相同权重,使词word的相对位置不影响结果.
(难道不就应该和语序有关吗?语序不同含义不同)
2. 减少参数量,不由输入word数量增加导致参数量剧增.
公式
变量定义:
向量/矩阵 | size | ||
word | $$ \boldsymbol w_{i-2} $$ | $$ \boldsymbol w_{i-1} $$ | $$ |V| $$ |
1-of-N encoding | $$ \boldsymbol x_{i-2} $$ | $$ \boldsymbol x_{i-1} $$ | $$ |V| $$ |
隐藏层输入(embedding结果) | $$ \boldsymbol z = \boldsymbol W_1 \boldsymbol x_{i-2} + \boldsymbol W_2 \boldsymbol x_{i-1}\\=\boldsymbol W( \boldsymbol x_{i-2}+\boldsymbol x_{i-1}) $$ | $$ |Z| $$ | |
权重 也可看成卷积,矩阵W为卷积核,也是所有词向量的集合 | $$ \boldsymbol W_1=\boldsymbol W_2=\boldsymbol W $$ | $$ |Z|\times|V| $$ |
共用权重更新
保证wi, wj权重(注意权重w区分于单词w)相同.
1. 训练时给相同初始值
2. 分别计算损失函数对wi和wj的偏微分,并对wi, wj进行更新.
但对wi和wj得到的偏微分不一样,两个微分都要减. (相同更新过程)
$$ w_i\leftarrow w_i-\eta\frac{\partial \ell}{\partial w_i}-\eta\frac{\partial \ell}{\partial w_j}\\ w_j\leftarrow w_j-\eta\frac{\partial \ell}{\partial w_i}-\eta\frac{\partial \ell}{\partial w_j}\\ $$
无监督训练
只需要爬文章数据输入.
如文本数据为'潮水退了就知道谁没穿裤子'.
输入是“潮水”和“退了”,希望输出“就”. 使神经网络输出的概率vector与目标'就'(某一维为1)的交叉熵最小化(minimize cross entropy), 即输出vector在“就”所对应的那一维上概率最高.
Prediction-based变形
(Various Architectures)
在不同任务上互有胜负, 很难说哪一种更好.
CBOW(Continuous bag of word model)
拿前后的词汇预测中间的词汇(传统Prediction-based为前预测后)
Skip-gram
拿中间的词汇去预测前后的词汇
word vector是DL的一个应用,但这个神经网络并不深, 只有一个linear隐藏层.
输入1-of-N编码, 神经网络经过weight的得到Word Embedding,再通过一层隐藏层得输出.
过去有很多人用deep model(但没有火起来),但这个任务不用deep就可以实现,减少运算量,节省训练的时间.
过去也有很多人用非神经网络的方法得word embedding, 不过后来发现神经网络得到效果最好.
(励志故事: word to vector作者原先投到一个很小的会议, 被拒绝了, 还得到评论-这是个什么东西, 我感觉一点用都没有)
词向量特性
同类word vector(国家-城市, 动词的三态)摆在一起, 之间有固定关系.
利用该特性, 可以发现原本并不了解的词间关系. 把word vector两两相减,再投影到二维平面,如果两个word之间有包含关系,会被投影到同一块区域.
推断关系
此时机器可以回答问题: “罗马之于意大利等于柏林之于?”
计算选取与以下结果最接近的vector.
V(𝐵𝑒𝑟𝑙𝑖𝑛)-V(𝑅𝑜𝑚𝑒)+V(𝐼𝑡𝑎𝑙𝑦)≈V(𝐺𝑒𝑟𝑚𝑎𝑛𝑦)
应用
机器翻译
Multi-lingual Embedding
建立不同语言之间的联系.
当分别训练英文语料库(corpus)和中文语料库,两者的word vector没有任何关系. 因为Word Embedding只体现了上下文的关系, 没有办法判断中英文词汇之间的关系.
但是,如果已知中文词汇和英文词汇的对应关系,先投影到同一个点. 遇到未知的新词汇,可使类似含义的中英文词汇投影到附近, 得到翻译效果
图像分类
Multi-domain Embedding
对文字+图像做Embedding
已知词汇(horse、cat和dog) vector在空间分布,训练模型把horse、cat和dog图片投影到其词汇相同的区域. (用word-vector取代字符串 label 作为 target)
输入新的未知图像,即便不知道类别, 根据投影位置对应的word vector,可以判断所属类别.
图像分类一般给定具体的类别, 遇到属于未知类别的图像无能为力.
image+word Embedding的方法,在未知类别如果图像能够投影到cat的word vector的附近,则可知类别为cat. (分类时依据了阅读得到知识)
文档嵌入
Document Embedding
不止Word, Document也可表示成向量.
1. document变成bag-of-word,用Auto-encoder得到该文档的语义嵌入(Semantic Embedding)
2. 考虑词汇顺序包含信息
词汇相同但语序不同, 含义不同,如:
白血球消灭了传染病——正面语义
传染病消灭了白血球——负面语义
解决方法: 给大堆数据可以自己学到, 或给额外label监督学习
word2vec参考:http://blog.csdn.net/itplus/article/details/37969519