Python与自然语言处理——文本向量化(一)

Python与自然语言处理——文本向量化

  • 文本向量化(一)
    • 文本向量化概述
    • 向量化算法word2vec
        • 词袋模型
        • 神经网络语言模型(NNLM)
        • C&W模型
        • CBOW模型和Skip-gram模型
            • CBOW模型
            • Skip-gram模型
            • 参考文献

文本向量化(一)

文本向量化概述

  • 文本向量化是将文本表示成一系列能够表达文本语义的向量。
  • 主要技术
    • word2vec
    • doc2vec
    • str2vec

向量化算法word2vec

词袋模型

  • 最早的以词语为基本处理单元的文本向量化方法
  • 方法:
    • 基于出现的词语构建词典(唯一索引)
    • 统计每个单词出现的词频构成向量
  • 存在的问题
    • 维度灾难
    • 无法保留语序信息
    • 存在语义鸿沟的问题

神经网络语言模型(NNLM)

  • 特点
    与传统方法估算 P ( w i ∣ w i − ( n − 1 ) , ⋯   , w i − 1 ) P\left( {{w_i}\left| {{w_{i - \left( {n - 1} \right)}}, \cdots ,{w_{i - 1}}} \right.} \right) P(wiwi(n1),,wi1)不同,NNLM直接通过一个神经网络结构对 n n n元条件概率进行估计。
  • 基本结构
    Python与自然语言处理——文本向量化(一)_第1张图片
  • 大致操作
    从语料库中搜集一系列长度为 n n n的文本序列 w i − ( n − 1 ) , ⋯   , w i − 1 , w i {{w_{i - \left( {n - 1} \right)}}, \cdots ,{w_{i - 1}},{w_i}} wi(n1),,wi1,wi,假设这些长度为 n n n的文本序列组成的集合为 D D D,那么NNLM的目标函数为:
    ∑ D P ( w i ∣ w i − ( n − 1 ) , ⋯   , w i − 1 ) \sum\nolimits_D {P\left( {{w_i}\left| {{w_{i - \left( {n - 1} \right)}}, \cdots ,{w_{i - 1}}} \right.} \right)} DP(wiwi(n1),,wi1)
  • 网络模型
    • 输入层:低维度、紧密的词向量,将词序列 w i − ( n − 1 ) , ⋯   , w i − 1 {{w_{i - \left( {n - 1} \right)}}, \cdots ,{w_{i - 1}}} wi(n1),,wi1中每个词向量按顺序拼接:
      x = [ v ( w i − ( n − 1 ) ) ; ⋯   ; v ( w i − 2 ) ; v ( w i − 1 ) ] x = \left[ {v\left( {{w_{i - \left( {n - 1} \right)}}} \right); \cdots ;v\left( {{w_{i - 2}}} \right);v\left( {{w_{i - 1}}} \right)} \right] x=[v(wi(n1));;v(wi2);v(wi1)]
    • 将得到的 x x x输入到隐含层,得到 h h h
      h = tanh ⁡ ( b + H x ) h = \tanh \left( {b + Hx} \right) h=tanh(b+Hx)
      其中 H H H为输入层到隐含层的权重矩阵,维度为 ∣ h ∣ × ( n − 1 ) ∣ e ∣ \left| h \right| \times \left( {n - 1} \right)\left| e \right| h×(n1)e
    • 隐含层的 h h h接入输出层得到 y y y:
      y = b + U h y=b+Uh y=b+Uh
      其中 U U U为隐藏层到输出层的权重矩阵,维度为 ∣ V ∣ × ∣ h ∣ \left| V \right| \times \left| h \right| V×h ∣ V ∣ \left| V \right| V表示词表的大小。
    • 对输出层进行归一化
      在输出层前加 s o f t m a x softmax softmax函数,将 y y y转化为对应的概率值:
      P ( w i ∣ w i − ( n − 1 ) , ⋯   , w i − 1 ) = exp ⁡ ( y ( w i ) ) ∑ k = 1 ∣ V ∣ exp ⁡ ( y ( w k ) ) P\left( {{w_i}\left| {{w_{i - \left( {n - 1} \right)}}, \cdots ,{w_{i - 1}}} \right.} \right) = \frac{{\exp \left( {y\left( {{w_i}} \right)} \right)}}{{\sum\nolimits_{k = 1}^{\left| V \right|} {\exp \left( {y\left( {{w_k}} \right)} \right)} }} P(wiwi(n1),,wi1)=k=1Vexp(y(wk))exp(y(wi))
  • 训练方法
    使用随机梯度下降法法训练,在训练每个batch时,随机从语料库 D D D中抽取若干样本进行训练,迭代公式:
    θ : θ + α ∂ log ⁡ P ( w i ∣ w i − ( n − 1 ) , ⋯   , w i − 1 ) ∂ θ \theta :\theta + \alpha \frac{{\partial \log P\left( {{w_i}\left| {{w_{i - \left( {n - 1} \right)}}, \cdots ,{w_{i - 1}}} \right.} \right)}}{{\partial \theta }} θ:θ+αθlogP(wiwi(n1),,wi1)
    其中 α \alpha α为学习率, θ \theta θ为模型中涉及的所有参数。

C&W模型

  • 特点
    • NNLM的目标是构建一个语言概率模型,C&W则是生成词向量
  • 核心机制
    如果 n n n元短语在语料库中出现过,则给该短语打高分,如未出现过则打较低的评分
  • 模型结构
    Python与自然语言处理——文本向量化(一)_第2张图片
  • 目标函数
    ∑ ( w . c ) ∈ D ∑ w ′ ∈ V max ⁡ ( 0 , 1 − s c o r e ( w , c ) + s c o r e ( w ′ , c ) ) \sum\nolimits_{\left( {w.c} \right) \in D} {\sum\nolimits_{w' \in V} {\max \left( {0,1 - score\left( {w,c} \right) + score\left( {w',c} \right)} \right)} } (w.c)DwVmax(0,1score(w,c)+score(w,c))
    其中 ( w , c ) {\left( {w,c} \right)} (w,c)为正样本,从语料中抽取的 n n n元短语, n n n为单数, w w w为目标词, c c c为目标词的上下文语境, w ′ w' w是从词典中随机抽取的一个词语, ( w ′ , c ) \left( {w',c} \right) (w,c)为负样本。

CBOW模型和Skip-gram模型

CBOW模型
  • 简介
    • 以一段文本的中间词作为目标词
    • 去掉了隐含层,提高了运行速度
  • 模型结构
    Python与自然语言处理——文本向量化(一)_第3张图片
  • CBOW对目标词的条件概率计算公式
    P ( w ∣ c ) = exp ⁡ ( e ′ ( w ) T x ) ∑ w ′ ∈ V exp ⁡ ( e ′ ( w ′ ) T x ) P\left( {w\left| c \right.} \right) = \frac{{\exp \left( {e'{{\left( w \right)}^T}x} \right)}}{{\sum\nolimits_{w' \in V} {\exp \left( {e'{{\left( {w'} \right)}^T}x} \right)} }} P(wc)=wVexp(e(w)Tx)exp(e(w)Tx)
  • CBOW的目标函数
    max ⁡ ∑ ( w . c ) ∈ D log ⁡ P ( w , c ) \max \sum\nolimits_{\left( {w.c} \right) \in D} {\log P\left( {w,c} \right)} max(w.c)DlogP(w,c)
Skip-gram模型
  • 简介
    • 与CBOW类似,没有隐含层
    • CBOW输入上下文词的中间词向量,Skip-gram从目标词 w w w的上下文中选择一个词
  • 模型结构
    Python与自然语言处理——文本向量化(一)_第4张图片
  • Skip-gram目标函数
    max ⁡ ( ∑ ( w . c ) ∈ D ∑ w j ∈ c log ⁡ P ( w ∣ w j ) ) \max \left( {\sum\nolimits_{\left( {w.c} \right) \in D} {\sum\nolimits_{{w_j} \in c} {\log P\left( {w\left| {{w_j}} \right.} \right)} } } \right) max((w.c)DwjclogP(wwj))
参考文献

《Python与自然语言处理》

你可能感兴趣的:(Python与自然语言处理)