Task05 基于深度学习的文本分类2 (word2Vec模型)

电脑配置:Anaconda3 + Pycharm

word2Vec模型

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

word2Vec模型
语言模型CBOW:预测目标单词SG:预测上下文
优化算法Hierachical SoftmaxNegtive Sampling

基本思想

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

  • 两种常见的语言模型的网络结构:
    在这里插入图片描述

符号说明: w ( t ) w(t) w(t)代表在句子中位置 t t t的词语,一般用one-hot编码的向量表示,其他记号同理。上图中CBOW是根据背景词预测中心词,跳词模型是根据中心词预测背景词。

  • Word2Vec模型先基于训练数据构建一个神经网络,当这个模型训练好以后,我们并不会以这个训练好的模型处理新的任务,我们真正需要的是这个模型通过训练数据所学的的参数,例如隐层的权重矩阵。后面我们将会看到这些权重在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\} {(Context(w),w)wC}
输入样本train_X:Context(w),由w前后各c个词构成,称其为w的上下文。
输出值train_y:w

model
y = f ( x ) 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)) L=wClogP(wContext(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} p(y(i)=1x(i);θ)p(y(i)=2x(i);θ)...p(y(i)=kx(i);θ)=j=1keθjTx(i)1eθjTx(1)eθjTx(2)...eθjTx(n)
也就是说,softmax回归需要对语料库中每个词语(类)都计算一遍输出概率并进行归一化。(一个词一个类 ????这。。)因此,
为了避免要计算所有词的softmax概率,word2vec采样了霍夫曼树来代替从隐藏层到输出softmax层的映射。在这里插入图片描述
CBOW模型的网络输出层就是一个霍夫曼树
非叶子节点相当于一个神经元(感知机,逻辑斯谛回归就是感知机的输出带入 f ( x ) = 1 1 + e x f(x)=\frac{1}{1+ e ^{x}} f(x)=1+ex1),二分类决策输出1或者0,分别代表向下左转或向下右转;每个叶子节点代表语料库中的一个词语,于是每个词语都可以被01唯一地编码,并且其编码序列对应一个事件序列,于是我们可以计算条件概率
P ( w ∣ C o n t e x t ( w ) ) P(w|Context(w)) P(wContext(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\} {(w,Context(w))wC}
    model
    y = f ( x ) y=f(x) y=f(x)
    goal: 基于训练集数据用机器学习算法得到语言模型f。这样做的好处是:利用这个f的模型参数得到输入x的某种向量化表示。
    在这里插入图片描述

作业

尝试通过Word2Vec训练词向量
安装torch费了点时间,一直报错无法安装,参考了博客安装代码
直接在cmd里输入:

pip install torch==1.5.1+cpu torchvision==0.6.1+cpu -f https://download.pytorch.org/whl/torch_stable.html

回车,安装成功。
在这里插入图片描述

  • 导入第三方模块

TextCNN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值