#Datawhale_NLP Task5 基于深度学习的文本分类2

文本表示方法Parts3

word2Vec模型

语言模型+训练算法
自然语言处理最细的粒度是词语,词语是人类的抽象总结,是一种符号,对计算机而言是无法识别的。因此,要先把词语表示成可以让计算机识别并处理的数字或向量,这个过程叫做词嵌入(word Embedding)方法。

word2Vec模型
语言模型 CBOW:预测目标单词 SG:预测上下文
训练算法 Hierachical Softmax Negtive Sampling

基本思想

word2vec模型背后的基本思想是出现在上下文环境里的词进行预测。对于每一条输入文本,选取一个上下文窗口和一个中心词,并基于中心词去预测窗口里其他词出现的概率。

  • 两种常见的语言模型的网络结构:

在这里插入图片描述

符号说明:w(t)代表当前词语在句子中位置t,其他记号同理。在这两种语言模型的示意图中,窗口大小为5,除了当前词语之外的其他词语共同构成上下文。

  • Word2Vec模型实际上分为了两个部分,第一部分是建立模型,第二部分是通过模型获取嵌入词向量。
  • Word2Vector的整个建模过程实际上与自编码器的思想很相似,即先基于训练数据构建一个神经网络,当这个模型训练好以后,我们并不会以这个训练好的模型处理新的任务,我们真正需要的是这个模型通过训练数据所学的的参数,例如隐层的权重矩阵。后面我们将会看到这些权重在Word2Vec中实际上就是我们试图去学习的“word vectors”。

如果看不懂的话,还有更白话的解释,神仙指路

语言模型

  • 在统计自然语言处理中,语言模型指的是计算一个句子的概率模型。传统的语言模型中词的表示是原始的、面向字符串的、两个语义相似地词的字符串可能完全不同,比如“土豆”和“洋芋”。字符串本身无法储存语义信息。
  • 神经概率语言模型(Neuaral Probabilistic Language
    Model)中词的表示是向量形式、面向语义的。是一种有监督的机器学习模型。

语言模型CBOW

sample
{ ( C o n t e x t ( w ) , w ) w C } \{(Context(w),w)|w\in C\}
model
y = f ( x ) y=f(x)
goal: 基于训练集数据用机器学习算法得到语言模型f。这样做的好处是:利用这个f的模型参数得到输入x的某种向量化表示。

最大化对数似然函数
L = w C l o g P ( w C o n t e x t ( w ) ) L=\sum_{w \in C} log P(w|Context(w))
其中w表示语料库C中任意一个词。

  • Input(输入层)是下文词语的词向量(什么!我们不是在训练词向量吗?不不不,我们是在训练CBOW模型,词向量只是个副产品,确切来说,是CBOW模型的一个参数。训练开始的时候,词向量是个随机值,随着训练的进行不断被更新)
  • Projection(投影层)对其求和,所谓求和,就是简单的向量加法。
  • Output(输出层)输出最可能的w。由于语料库中词汇量是固定的|C|个,所以上述过程其实可以看做一个多分类问题。给定特征,从|C|个分类中挑一个。

在这里插入图片描述
解决基于神经网络模型的多分类问题常用方法是softmax回归。
[ p ( y ( i ) = 1 x ( i ) ; θ ) p ( y ( i ) = 2 x ( i ) ; θ ) . . . p ( y ( i ) = k x ( i ) ; θ ) ] = 1 j = 1 k e θ j T x ( i ) [ e θ j T x ( 1 ) e θ j T x ( 2 ) . . . e θ j T x ( n ) ] \begin{gathered} \begin{bmatrix} p(y^{(i)} = 1| x^{(i)};\theta) \\p(y^{(i)} = 2| x^{(i)};\theta)\\...\\p(y^{(i)} = k| x^{(i)};\theta) \end{bmatrix}=\frac{1}{\sum_{j=1}^k e^{\theta^{T}_{j}x^{(i)}} }\begin{bmatrix} e^{\theta^{T}_{j}x^{(1)}} \\e^{\theta^{T}_{j}x^{(2)}}\\...\\e^{\theta^{T}_{j}x^{(n)}} \end{bmatrix} \end{gathered}
也就是说,softmax回归需要对语料库中每个词语(类)都计算一遍输出概率并进行归一化。(一个词一个类 ????这。。)因此,
为了避免要计算所有词的softmax概率,word2vec采样了霍夫曼树来代替从隐藏层到输出softmax层的映射。在这里插入图片描述
CBOW模型的网络输出层就是一个霍夫曼树
非叶子节点相当于一个神经元(感知机,逻辑斯谛回归就是感知机的输出带入 f ( x ) = 1 1 + e x f(x)=\frac{1}{1+ e ^{x}} ),二分类决策输出1或者0,分别代表向下左转或向下右转;每个叶子节点代表语料库中的一个词语,于是每个词语都可以被01唯一地编码,并且其编码序列对应一个事件序列,于是我们可以计算条件概率
P ( w C o n t e x t ( w ) ) P(w|Context(w)) 具体的推算过程可见数学推导

语言模型Skip-grams

举例说明Skip-grams过程:
假如我们有一个句子“The dog barked at the mailman”。
1、首先我们选句子中间的一个词作为我们的输入词,例如我们选取‘doa’作为input word,称其为中心词
2、有了中心词,我们再设置一个skip_window
的参数,它代表着我们从当前input word的一侧(左边或者右边)选取词的数量,称其为窗口大小。如果我们设置skip_window = 2,那我们最终获得窗口的词就是[‘The’, ‘dog’,‘barked’,‘at’]。skip_window = 2代表着选取左input word左侧2个词和右侧2个词进入我们的窗口,所以整个窗口大小span = 2*2=4。中心词两侧的词称其为背景词。另一个参数叫做num_skips,它代表着我们从整个窗口中选取多少个不同的词作为我们的output word。语料库中的每一个词都有两种身份,中心词或者背景词。
3、神经网络基于这些训练数据将会输出一个概率分布,这个概率代表着我们的词典中每个词作为input word的ouput word 的可能性。

  • 模型构建:
    sample
    { ( w , C o n t e x t ( w ) ) w C } \{(w,Context(w))|w\in C\}
    model
    y = f ( x ) y=f(x)
    goal: 基于训练集数据用机器学习算法得到语言模型f。这样做的好处是:利用这个f的模型参数得到输入x的某种向量化表示。
    在这里插入图片描述