如何表示词义
流程
文本文件->分词后的序列->词表示的向量(词嵌入)->解决具体任务的算法;
用离散符号表示词
传统NLP中,我们将词表示为一个个的离散符号,如:sun、hotel、fruit……,我们可以用o n e − h o t one-hotone−hot方式将词代表为向量形式,如:
s u n = [ 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] sun=[0,1,0,0,0,0,0,0,0,0]
sun=[0,1,0,0,0,0,0,0,0,0]
h o t e l = [ 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ] hotel=[0,0,0,0,1,0,0,0,0,0]
hotel=[0,0,0,0,1,0,0,0,0,0]
此时存在问题:
向量之间无相似性,各个词用o n e − h o t one-hotone−hot方式表示时,不同词之间都是正交的,不含有近似单词的信息;
向量维度过高,利用o n e − h o t one-hotone−hot方式表示词向量时,向量维度等于词表中的词数,当词数量过多时,这个方法所带来的维度过高问题就会凸显出来;
分布式语义
分布表示的思路
语料->对共现词计数->将计数后的数据转换为向量 ->通过一系列降维方法,将高维转换为低维
LSA(潜在语义分析)
Word Embedding(词嵌入)
通过给每个单词学习一个密集向量,类似于出现在相似上下文中的单词向量,这样的词向量就叫做word embedding或者word representations;
模型结构图
算法基本思想
输入层通过将大规模语料中的每个单词表示为一个密集向量,其中每个单词都是通过向量来表示,对文本进行遍历,每个位置都有一个中心词c cc和语境词表示o oo,通过利用c cc和o oo词向量之间的相似度,从而在给定c cc,计算出o oo的概率(或给定o oo,计算出c cc的概率),还需要通过调节词向量来最大化概率;
具体例子
在给定第t tt个位置中心词b a n k i n g bankingbanking的情况下,当窗口大小设为2 22时,通过给定p ( w t ) p(w_t)p(w
t
)来计算左右窗口大小为2 22的词的条件概率;
相似度
对于每个位置t = 1 , 2 , … … , T t=1,2,……,Tt=1,2,……,T,当预测固定窗口大小为m mm的上文问关联词时,给出中心词为w t w_tw
t
,则相似度为:
L ( θ ) = ∏ t = 1 T ∏ − m < = j < = m , j ≠ 0 P ( w t + j ∣ w t ; θ ) , 其 中 θ 是 所 有 需 要 优 化 的 变 量 L(\theta)=\prod ^T_{t=1} \prod _{-m<=j<=m,j\not=0} P(w_{t+j}|w_t;\theta),其中\theta是所有需要优化的变量
L(θ)=
t=1
∏
T
−m<=j<=m,j
=0
∏
P(w
t+j
∣w
t
;θ),其中θ是所有需要优化的变量
目标函数(损失/代价函数)
J ( θ ) = − 1 T l o g L ( θ ) = − 1 T ∑ t = 1 T ∑ − m < = j < = m , j ≠ 0 l o g P ( w t + j ∣ w t ; θ ) J(\theta)=-\frac{1}{T}logL(\theta)=-\frac{1}{T}\sum^T_{t=1}\sum_{-m<=j<=m,j\not=0}logP(w_{t+j}|w_t;\theta)
J(θ)=−
T
1
logL(θ)=−
T
1
t=1
∑
T
−m<=j<=m,j
=0
∑
logP(w
t+j
∣w
t
;θ)
即目标函数为负的相似度函数对数的平均值,通过最小化目标函数,从而将预测的准确率最大化;
预测函数
如何最小化目标函数呢?我们可以通过对预测函数的的处理来解决这一问题。对于预测函数P ( w t + j ∣ w j , θ ) P(w_{t+j}|w_j,\theta)P(w
t+j
∣w
j
,θ),可以通过用词w ww的两个向量来解决。我们假设V w V_wV
w
是中心词,U w U_wU
w
是语境词。则对于中心词c cc和语境词o oo而言,存在如下关系:
P ( o ∣ c ) = e x p ( u o T v c ) ∑ w ∈ V e x p ( u w T v c ) P(o|c)=\frac{exp(u^T_ov_c)}{\sum_{w\in V}exp(u^T_wv_c)}
P(o∣c)=
∑
w∈V
exp(u
w
T
v
c
)
exp(u
o
T
v
c
)
其中,分子中o oo和v vv的点积u o T v C u^T_o v_Cu
o
T
v
C
越大,则最后得到的概率P ( o ∣ v ) P(o|v)P(o∣v)越大。而分母则通过指数函数计算之后,从而实现了对整个词表的标准化;
实例
其中P ( u p r o b l e m s ∣ v i n t o ) P(u_{problems}|v_{into})P(u
problems
∣v
into
)为P ( p r o b l e m s ∣ i n t o ; u p r o b l e m s , v i n t o , θ ) P(problems|into;u_{problems},v_{into},\theta)P(problems∣into;u
problems
,v
into
,θ)的简写形式;
Softmax回归
s o f t m a x ( x ) i = e x p ( x i ) ∑ j = 1 n e x p ( x j ) = p i softmax(x)_i = \frac{exp(x_i)}{\sum^n_{j=1}exp(x_j)}=p_i
softmax(x)
i
=
∑
j=1
n
exp(x
j
)
exp(x
i
)
=p
i
s o f t m a x softmaxsoftmax又称为多项逻辑回归(m u l t i n o m i a l l o g i s t i c r e g r e s s i o n multinomial logistic regressionmultinomiallogisticregression),多用于分类过程,它通过将多个神经元的输出,映射到( 0 , 1 ) (0,1)(0,1)区间。它通过将任意值x i x_ix
i
映射到一个概率分布p i p_ip
i
上,"m a x maxmax“是因为它会将输入中最大的值的概率进一步放大,而”s o f t softsoft"则是因为对于输入中极小的值,它也人然后分配一些概率,而不是直接丢弃。因此,s o f t m a x softmaxsoftmax函数常常用在深度学习中;
word2vec中将文本进行向量表示的方法
C B O W ( C o n t i n u o u s B a g o f W o r d s ) CBOW(Continuous Bag of Words)CBOW(ContinuousBagofWords)
给定上下文中的词,然后预测中心词。从而利用中心词的预测结果情况,利用梯度下降方法不断调整上下文词的向量。训练完成后,每个词都作为中心词遍历了一遍,将上下文中的词向量进行调整,从而获取整个文本中所有词的向量;
S G ( S k i p − G r a m ) SG(Skip-Gram)SG(Skip−Gram)
给定中心词,然后预测上下文中的词。从而利用上下文中的词的预测结果情况,利用梯度下降法不断调整中心词的词向量,最后文本遍历完一遍之后,就得到了所有词的词向量;
C B O W CBOWCBOW和S G SGSG的比较
两者均为三层神经网络(输入层、投影层和输出层)。S G SGSG中,每个词作为中心词时,是一对多的情况,多个上下文中的词对一个中心词进行“训练”,然后得出较准确地中心词的向量结果,这样最终的效果更好。C B O W CBOWCBOW中,是多对一的情况,多个上下文中的词从一个中心词处进行“学习”,这样效率更高,速度快,但是最终效果却不如S G SGSG。此外,在S G SGSG中,每个词都会受上下文词的影响,每个词作为中心词时,需要进行K KK次训练(K KK为窗口大小),所以经过多次调整将使得词向量相对更准确。C B O W CBOWCBOW预测词数和整个文本中词数几乎相等,每次预测才会进行一次反向传播。
模型优化的方法
分层S o f t m a x SoftmaxSoftmax
用于计算s o f t m a x softmaxsoftmax的方法,用二叉树(根据类标频数构造的霍夫曼树)来表示词汇表中的所有单词。如上图,其中,白色节点表示词汇表中的所有单词,而黑色节点则表示隐节点。其中V VV个单词存储于二叉树的叶子节点单元,而对于每个叶子节点,都有一条唯一的路径可以从根节点达到该叶子节点,这条路径用于计算该叶子节点所代表的单词的概率。在这个模型中,不存在单词的输出向量,而是V − 1 V-1V−1个隐节点中都有一个输出向量v n ( w , j ) ‘ v ^`_{n(w,j)}v
n(w,j)
‘
,单词作为输出词的概率被定义为:
p ( w = w O ) = ∏ j = 1 L ( w ) − 1 σ ( [ [ n ( w , j + 1 ) = c h ( n ( w , j ) ) ] ] . v n ( w , j ) ‘ T h ) p(w=w_O)=\prod ^{L(w)-1}_{j=1}\sigma([[n(w,j+1)=ch(n(w,j))]].{v^`_{n(w,j)}}^Th)
p(w=w
O
)=
j=1
∏
L(w)−1
σ([[n(w,j+1)=ch(n(w,j))]].v
n(w,j)
‘
T
h)
其中,c h ( n ) ch(n)ch(n)是节点n nn的左侧子节点,v n ( w , j ) ‘ v^`_{n(w,j)}v
n(w,j)
‘
是隐节点n ( w , j ) n(w,j)n(w,j)的向量表示(即“输出向量”)。而h hh则是隐藏层的输出值(SG模型中,h = v w i h=v_{wi}h=v
wi
;CBOW模型中,h = 1 C ∑ c = 1 C v w c h=\frac{1}{C}\sum_{c=1}^C v_{w_c}h=
C
1
∑
c=1
C
v
w
c
),[ [ x ] ] [[x]][[x]]则为一个特殊函数,其定义如下:
[ [ x ] ] = { 1 , i f x i s t r u e − 1 , o t h e r s [[x]]=
{1 ,if x is true−1 , others
{1 ,if x is true−1 , others
[[x]]={
1 ,if x is true
−1 , others
负采样技术
为解决数量过于庞大的输出向量的更新问题,于是在更新时不更新所有向量,而只更新他们的一个样本。正样本应该出现在我们的样本中,此外也需要加入几个单词作为负样本。而在采样的过程中,我们需要任意指定一个总体的概率分布,这个分布就叫做噪声分布,标记为P n ( w ) P_n(w)P
n
(w)。在w o r d 2 v e c word2vecword2vec中,作者用一个定义好的后多项分布的负采样形式取代简化的训练目标,从而产生高质量的嵌入:
E = − l o g σ ( v w O ‘ T h ) − ∑ w j ∈ W n e g l o g σ ( − v w j ‘ T h ) E=-log\sigma({v^`_{w_O}}^Th)-\sum_{w_j\in W_{neg}}log\sigma(-{v^`_{w_j}}^Th)
E=−logσ(v
w
O
‘
T
h)−
w
j
∈W
neg
∑
logσ(−v
w
j
‘
T
h)
其中,w O w_Ow
O
是正样本(即输出单词),v w O ‘ v^`_{w_O}v
w
O
‘
是词向量。而h hh则是隐藏层的输出值(SG模型中,h = v w i h=v_{wi}h=v
wi
;CBOW模型中,h = 1 C ∑ c = 1 C v w c h=\frac{1}{C}\sum_{c=1}^C v_{w_c}h=
C
1
∑
c=1
C
v
w
c
)。W n e g = { w j ∣ j = 1 , … , K } W_{neg}=\{w_j|j=1,…,K\}W
neg
={w
j
∣j=1,…,K}是从P n ( w ) P_n(w)P
n
(w)中采样得到的单词集合,即负样本。
G l o v e GloveGlove
定义
基于计数和直接预测的方法;
目标函数
J ( θ ) = 1 2 ∑ i , j = 1 W f ( P i j ) ( u i T v j − l o g P i j ) 2 J(\theta)=\frac{1}{2}\sum^W_{i,j=1}f(P_{ij})(u^T_iv_j-logP_{ij})^2
J(θ)=
2
1
i,j=1
∑
W
f(P
ij
)(u
i
T
v
j
−logP
ij
)
2
X f i n a l = U + V X_{final}=U+V
X
final
=U+V
其中,P i j P_{ij}P
ij
是单词j jj出现在单词i ii上下文中的概率,而f ( P i j ) f(P_{ij})f(P
ij
)则是为了去除噪声而设定的函数。
如何评价E m b e d d i n g EmbeddingEmbedding
内在方式:对特定/中间子任务的评估;
外在方式:应用到具体任务中;
f a s t T e x t fastTextfastText分类
在文本分类任务中,f a s t T e x t fastTextfastText作为一种浅层网络,能取得媲美于深度网络的精度,但是训练时间却比深度网络快许多数量级。一般情况下,用f a s t T e x t fastTextfastText进行文本分类的同时也会产生词的e m b e d d i n g embeddingembedding;
字符级的n − g r a m n-gramn−gram
w o r d 2 v e c word2vecword2vec中以词作为原子,为每个词生成一个向量,而忽略词内部形态特征。面对这一问题,f a s t T e x t fastTextfastText采用字符级的n − g r a m n-gramn−gram来表示一个单词。通过这样处理则有两个优点;
对于低频词,生成的词向量效果更好,其n − g r a m n-gramn−gram可以与其他词共享;
对于训练词库外的词,仍然可以构建其词向量,可通过叠加其字符级n − g r a m n-gramn−gram从而生成向量;
模型架构
类似于w o r d 2 v e c word2vecword2vec中的C B O W CBOWCBOW模型,只有输入层、隐藏层、输出层三层。其中,输入为多个单词表示成的向量,输出是一个特定的t a r g e t targettarget,隐藏层是对多个词向量的叠加平均。不同的是,C B O W CBOWCBOW的输入是目标词上下文中的词,而f a s t T e x t fastTextfastText的输入则是多个单词及其n − g r a m n-gramn−gram特征。这些特征用于表示单个文档,C B O W CBOWCBOW中输入词的是经过o n e − h o t one-hotone−hot编码过的,输出为目标词;而f a s t T e x t fastTextfastText中输入特征则是经e m b e d d i n g embeddingembedding过的特征,输出是各个文档对应的类标,且采用分层s o f t m a x softmaxsoftmax优化措施,大大加快了训练速度;
核心思想
将整篇文档的词及n − g r a m n-gramn−gram向量叠加平均,从而得到文档向量,然后利用文档向量做多层s o f t m a x softmaxsoftmax多分类,主要涉及到n − g r a m n-gramn−gram特征的引入以及分层S o f t m a x SoftmaxSoftmax分类技术;
f a s t T e x t fastTextfastText样例
主要步骤
添加输入层(即e m b e d d i n g embeddingembedding层);
添加隐藏层(即投影层);
添加输出层(即s o f t m a x softmaxsoftmax层);
指定损失函数、优化器类型、评价指标、编译模型;