词向量
转载:https://www.cnblogs.com/MartinLwx/p/10005520.html#4209708
为什么需要词向量?
众所周知,不管是机器学习还是深度学习本质上都是对数字的数字,Word Embedding(词嵌入)做的事情就是将单词映射到向量空间里,并用向量来表示
update 2019-5-2
> 从信息论的角度来看,就是引入了新的信息,所以能做更多的事情
> 还有TF-IDF词向量的词频+一定的权重值进行统计描述,缺点是单纯考虑词频,而忽略了词之间的位置信息和相互关系。
end
一个简单的对比
- One-hot Vector
对应的词所在的位置设为1,其他为0;
例如:King, Queen, Man and Woman这句里面Queen对应的向量就是
不足:难以发现词之间的关系,以及难以捕捉句法(结构)和语义(意思)之间的关系
- Word2Vec
基本思想是把每个词表征为
举个最经典的例子:
king- man + woman = queen
实际上的处理是:从king提取了maleness的含义,加上了woman具有的femaleness的意思,最后答案就是queen.
借助表格来理解就是:
animal | pet | |
---|---|---|
dog | -0.4 | 0.02 |
lion | 0.2 | 0.35 |
比如,animal那一列表示的就是左边的词与animal这个概念的相关性
两个重要模型
-
原理:拥有差不多上下文的两个单词的意思往往是相近的
-
Continuous Bag-of-Words(CBOW)
-
功能:通过上下文预测当前词出现的概率
-
BOW的思想:
v ( “ a b c ” ) = 1 / 3 ( v ( “ a ” ) + v ( “ b ” ) + v ( “ c ” ) ) ">v(“abc”)=1/3(v(“a”)+v(“b”)+v(“c”))v(“abc”)=1/3(v(“a”)+v(“b”)+v(“c”)) -
原理分析
假设文本如下:“the florid prose of the nineteenth century.”
想象有个滑动窗口,中间的词是关键词,两边为相等长度(m,是超参数)的文本来帮助分析。文本的长度为7,就得到了7个one-hot向量,作为神经网络的输入向量,训练目标是:最大化在给定前后文本7情况下输出正确关键词的概率,比如给定("prose","of","nineteenth","century")的情况下,要最大化输出"the"的概率,用公式表示就是
P ( " t h e " | ( " p r o s e " , " o f " , " n i n e t e e n t h " , " c e n t u r y " ) ) ">P("the"|("prose","of","nineteenth","century"))P("the"|("prose","of","nineteenth","century")) -
特性
- hidden layer只是将权重求和,传递到下一层,是线性的
-
-
Skip-gram
- 功能:根据当前词预测上下文
- 原理分析
- 和CBOW相反,则我们要求的概率就变为
P ( C o n t e x t ( w ) | w ) ">P(Context(w)|w)P(Context(w)|w) - 以上面的句子为例,数据集的构成
, ( i n p u t , o u t p u t ) ">,(input,output),(input,output)就是( t h e , p r o s e ) , ( t h e , o f ) , ( t h e , n i n e t e e n t h ) , ( t h e , c e n t u r y ) ">(the,prose),(the,of),(the,nineteenth),(the,century)(the,prose),(the,of),(the,nineteenth),(the,century)
- 和CBOW相反,则我们要求的概率就变为
- 损失函数
- 如果假设当前词为
w ">ww,那么可以写成P ( w t + j | w t ) ( − m <= j <= m , j ≠ 0 ) ">P(wt+j|wt)(?m<=j<=m,j≠0)P(wt+j|wt)(?m<=j<=m,j≠0),每个词都会有一个概率,训练的目标就是最大化这些概率的乘积 - 也就是:
L ( θ ) = ∏ ( − m ≤ j ≤ m , j ≠ 0 ) P ( w t + j | w t ; θ ) ">L(θ)=∏(?m≤j≤m,j≠0)P(wt+j|wt;θ)L(θ)=∏(?m≤j≤m,j≠0)P(wt+j|wt;θ),表示准确度,要最大化 - 在概率中也经常有:
J ( θ ) = − 1 T l o g L ( θ ) = − 1 T ∑ t = 1 T ∑ l o g ( P ( w t + j | w t ; θ ) ) ">J(θ)=?1TlogL(θ)=?1T∑Tt=1∑log(P(wt+j|wt;θ))J(θ)=?1TlogL(θ)=?1T∑t=1T∑log(P(wt+j|wt;θ)),加个负号就改成最小 - 概率示意
P ( o | c ) = ">P(o|c)=exp(uTovc)∑vw=1exp(uTwvc)P(o|c)=exp(uoTvc)∑w=1vexp(uwTvc)e x p ( u o T v c ) ∑ w = 1 v e x p ( u w T v c ) ">vcvc:当v c c ">cc为中心词时用v ">vv ">ucuc:当u c c ">cc在C o n t e x t ">ContextContext里时用u ">uu
- 如果假设当前词为
- 优点
- 在数据集比较大的时候结果更准确
-
不足
- 词的顺序不重要,并没有考虑到中文的语法
- 一词多义:比如tie的意思有很多个,要如何聚类,可以分出tie-1,tie-2等