文本表示(四)字词混合的分布式表示方法

字词混合的分布式表示方法

前面的方法都是基于分布式假说来进行的建模,而基于分布式假说的词向量表示学习需要足够的上下文信息来捕捉一个词的语义,也就是要求词出现的频率足够高。但是根据齐夫定律,绝大多数的词在语料中很少出现,对于这些词,无法依据分布式假说来获得高质量的词向量表示。

前面利用的是词来进行的建模,但是词并不是最小的语言单位,词是由字或字符构成的。所以也可以使用字或字符来进行语义的研究。

定义

研究人员发现在中文中,有93%左右的词满足或部分满足语义组合特征(如果一个词的语义可以用内部汉字的语义组合而成)。而中文中常用的汉字也就在7000字左右,如果能充分的挖掘汉字的语义向量表示,设计准确的语义组合函数,那么就能会很好的增强汉语词,尤其是低频词的向量表示能力。

字词混合的方式有很多,主要的区别在于:

  • 如何设计准确的汉字语义组合函数
  • 如何融合汉字组合语义和中文词语的原子语义

以c&w模型为思想的字词混合分布式表示方法

目标依旧是区分正确的n元组和随机的n元组,核心任务依旧是计算一个n元组的得分。接下来有两种方式进行字词混合。
(1)简单直接的字词融合

  • 假设中文词 w i = c 1 c 2 . . . c l w_i=c_1c_2...c_l wi=c1c2...cl l l l个汉字组成
  • 该方法首先学习汉字串 c 1 c 2 . . . c l c_1c_2...c_l c1c2...cl的语义向量组合表示 e ( c 1 c 2 . . . c l ) e(c_1c_2...c_l) e(c1c2...cl),以及中文词 w i w_i wi的原子向量表示 e ( w i ) e(w_i) e(wi)
  • 在组合汉字的语义组合表示的时候,假设每个字的贡献是相同的,字的语义组合表示为:
    • e ( c 1 c 2 . . . c l ) = 1 l ∑ k = 1 l e ( c k ) e(c_1c_2...c_l)= \frac{1}{l}\sum^l_{k=1}{e(c_k)} e(c1c2...cl)=l1k=1le(ck)
  • 最终的词向量是直接将汉字的语义组合表示和中文的原子向量进行拼接 E = [ e ( c 1 , c 2 . . . c l ) ; e ( w i ) ] E=[e(c_1,c_2...c_l);e(w_i)] E=[e(c1,c2...cl);e(wi)]
  • 然后进行拼接所有词的词向量 h 0 h_0 h0,并进行之后的c&w计算

这种方式有很多缺陷:a.没有考虑不同的汉字对组合语义的影响;b.没有考虑组合语义和原子语义对最终词向量的影响。例如,‘出租车’中‘车’的贡献最大,而‘出’和‘租’仅仅是修饰作用,贡献相对较小,所以不同的汉字不应该等同视之;另一方面有的词是非透明的(例如‘苗条’),则更多的依赖词的原子语义。

(2)通过门限机制获取组合语义

  • 为了解决上面直接组合的缺陷(没有考虑词中每个字的贡献、没有考虑组合语义和原子语义对最终向量的影响)
  • 通过门限机制: e ( c 1 c 2 . . . c l ) = ∑ k = 1 l v k ⨀ e ( c k ) e(c_1c_2...c_l)=\sum^l_{k=1}{v_k\bigodot e(c_k)} e(c1c2...cl)=k=1lvke(ck)获得汉字的组合语义
  • v k v_k vk表示控制门,控制字 c k c_k ck的向量 e ( c k ) e(c_k) e(ck)对组合语义的贡献: v k = t a n h ( W [ e ( c k ) ; e ( w i ) ] ) v_k=tanh(W[e(c_k);e(w_i)]) vk=tanh(W[e(ck);e(wi)])
  • 在融合组合语义和原子语义时,通过maxpooling可得: E i = m a x k = 1 l ( e ( c 1 c 2 . . . c l ) , e ( w i ) k ) E_i=max^l_{k=1}(e(c_1c_2...c_l),e(w_i)_k) Ei=maxk=1l(e(c1c2...cl),e(wi)k)

通过大量的实验表明,考虑词内汉字贡献度后获得的词向量有更准确的表达能力。

你可能感兴趣的:(文本表示)