糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 自然语言处理NPL

自然语言处理NPL

时间:2023-09-13 18:47:41

相关推荐

自然语言处理NPL

origin from :datawhale team

文章目录

AttentionSeq2Seq TransformerWord2Vec构建统计共现矩阵X构建词向量和共现矩阵之间的关系 BERT

Attention

Seq2Seq

Transformer

Word2Vec

Word vectors

我们将为每个单词构建一个稠密的向量,使得它能够与相似文本里的词向量相近,word meaning 作为一种神经词向量,在我们对向量空间进行可视化:

注:word vector 有时也叫做 word embedding 或者 word representations,他们都是一种表示结构。

Word2vec:Overview

Word2vec(Mikolov et al. ) 是一种学习词向量的框架,包含大量的文本语料,固定词表中的每一个单词由一个词向量表示,文本中的每个单词位置 t,有一个中心词c,和它的上下文 o(除了 c 的外部单词)。

通过 c 和 o 的词向量相似性来计算 P(o/c),不断的调整词向量,最大化概率,固定窗口,滑动窗口并计算:

Word2vec的目标函数:

对于每个位置 t = 1,…,T,固定窗口大小m,给定中心词wj:

l i k e l i h o o d = L ( θ ) = ∏ t = 1 T ∏ − m ≤ j ≤ m j ≠ 0 p ( w t + j ∣ w t ; θ ) likelihood=L(\theta)=\prod_{t=1}^{T}\prod_{-m \le j \le m\\ \ \ \ \ j\ne0}^{}p(w_{t+j}|w_t;\theta) likelihood=L(θ)=t=1∏T​−m≤j≤mj​=0∏​p(wt+j​∣wt​;θ)

注: θ \theta θ 是需要优化的参数

( 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 1TlogL(\theta)=-\frac1T\sum_{t=1}^T\sum_{-m\le j\le m \\ \ \ \ \ j\ne 0}logP(w_{t+j}|w_t;\theta) J(θ)=−T1​logL(θ)=−T1​t=1∑T​−m≤j≤mj​=0∑​logP(wt+j​∣wt​;θ)

注:

J ( θ ) J(\theta) J(θ)为损失函数(这里是平均负对数似然);

负号将极大化损失函数转化为极小化损失函数;

log函数方便将乘法转化为求和(优化处理)

如何计算?

问:如何计算 P ( w t + j ∣ w t ; θ ) P(w_{t+j}|w_t;\theta) P(wt+j​∣wt​;θ)?

答:对于每个单词 w 我们使用两个向量 v w v_w vw​ 和 u w u_w uw​

v w v_w vw​ :当 w 是中心词时

u w u_w uw​ :当 w 是上下文单词时

对于中心词 c 和上下文单词 o,有:

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_o^Tv_c)}{\sum_{w\epsilon V}exp(u_w^Tv_c)} P(o∣c)=∑wϵV​exp(uwT​vc​)exp(uoT​vc​)​

在概率函数中:

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_o^Tv_c)}{\sum_{w\epsilon V}exp(u_w^Tv_c)} P(o∣c)=∑wϵV​exp(uwT​vc​)exp(uoT​vc​)​

分子取幂函数使得始终可以为正

向量 u o u_o uo​ 和向量 v c v_c vc​ 点乘,点乘结果越大,向量之间越相似

u T v = u ⋅ v = ∑ i = 1 n u i v i u^Tv=u·v=\sum_{i=1}^nu_iv_i uTv=u⋅v=∑i=1n​ui​vi​

对整个词表标准化,给出概率分布

softmax函数进行归一化(深度学习中常用): R n → R n \Bbb{R^n}\to \Bbb{R^n} Rn→Rn

(公式 x s o f t m a x ( x ) = e x p ( x i ) ∑ j = 1 n e x p ( x j ) = p i xsoftmax(x)= \frac {exp(x_i)}{\sum_{j=1}^nexp(x_j)}=p_i xsoftmax(x)=∑j=1n​exp(xj​)exp(xi​)​=pi​

注:用于将任意值 x i x_i xi​ 映射到概率分布 p i p_i pi​

Word2vec objective function gradients

Training a model by optimizing parameters

(通过优化参数的方式训练模型)- 最小化损失

To train the model: Compute all vector gradients

整个模型里只有一个参数 θ \theta θ ,所以我们只用优化这一个参数就行。

例如:模型在一个 d 维,词典大小为 V :

θ = [ v a a r d v a r k v a ⋮ v z e b r a u a a r d v a r k u a ⋮ u z e b r a ] ϵ R 2 d V \theta=\begin{bmatrix}v_{aardvark}\\v_a\\\vdots\\v_{zebra}\\u_{aardvark}\\u_a\\\vdots\\u_{zebra} \end{bmatrix}\epsilon\ \Bbb R^{2dV} θ=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​vaardvark​va​⋮vzebra​uaardvark​ua​⋮uzebra​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​ϵR2dV

2:每个单词有两个向量

通过梯度(导数)下降的方式优化参数

梯度下降会用到链式法则

迭代计算每个中心词向量和上下文词向量随着滑动窗口移动的梯度

依次迭代更新窗口中所有的参数

Example:

5. Optimization basics

Optimization:Gradient Descent(梯度下降)

我们的损失函数 J ( θ ) J(\theta) J(θ) 需要最小化

使用的方法为:梯度下降

对于当前 θ \theta θ ,计算 J ( θ ) J(\theta) J(θ) 的梯度

然后小步重复朝着负梯度方向更新方程里的参数 α = ( s t e p s i z e ) o r ( l e a r n i n g r a t e ) \alpha=(step\ size)\ or\ (learning\ rate) α=(stepsize)or(learningrate)

θ n e w = θ o l d − α ∇ θ J ( θ ) \theta^{new}=\theta^{old}-\alpha \nabla_\theta J(\theta) θnew=θold−α∇θ​J(θ)

更新唯一的参数 θ \theta θ:

θ j n e w = θ j o l d − α α α θ j o l d J ( θ ) \theta_j^{new}=\theta_j^{old}-\alpha \frac \alpha{\alpha\ \theta_j^{old}}J(\theta) θjnew​=θjold​−ααθjold​α​J(θ)

while True:theta_grad = evaluate_gradient(J,corpus,theta)theta = theta - alpha * theta_grad

SGD:Stochastic Gradient Descent

由于 J ( θ ) J(\theta) J(θ) 是在语料文本中所有窗口的方程

当语料很大的时候,计算梯度会消耗巨大

解决办法:SGD

不断sample窗口,不断更新

while True:window = sample_window(corpus)theta_grad = evaluate_gradient(J,window,theta)theta = tehta - alpha * theta_grad

# GloVe GloVe的全称是GloVe: [bal ](https://nlp.stanford.edu/projects/glove/)[Ve](https://nlp.stanford.edu/projects/glove/)[ctors for Word Representation](https://nlp.stanford.edu/projects/glove/)

是这门课的老师Christopher D. Manning的研究成果

GloVe目标是综合基于统计和基于预测的两种方法的优点。

模型目标:词进行向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息

流程:输入语料库–> 统计共现矩阵–> 训练词向量–>输出词向量

构建统计共现矩阵X

Xij代表单词

i表示上下文单词

j表示在特定大小的上下文窗口(context window)内共同出现的次数。这个次数的最小单位是1,但是GloVe不这么认为:它根据两个单词在上下文窗口的距离dd.

提出了一个衰减函数(decreasing weighting):用于计算权重,也就是说距离越远的两个单词所占总计数(total count)的权重越小。

构建词向量和共现矩阵之间的关系

公式

w i T w ~ j + b i + b ~ j = log ⁡ ( X i j ) w_{i}^{T} \tilde{w}_{j}+b_{i}+\tilde{b}_{j}=\log \left(X_{i j}\right) wiT​w~j​+bi​+b~j​=log(Xij​)

其中, w i T w_{i}^{T} wiT​ 和 w ~ j \tilde{w}_{j} w~j​是我们最终要求解的词向量; b i b_{i} bi​和 b ~ j \tilde{b}_{j} b~j​分别是两个词向量的bias term

那它到底是怎么来的,为什么要使用这个公式?为什么要构造两个词向量 w i T w_{i}^{T} wiT​ 和 w ~ j \tilde{w}_{j} w~j​?

有了上述公式之后,我们可以构建Loss function:

J = ∑ i , j = 1 V f ( X i j ) ( w i T w ~ j + b i + b ~ j − log ⁡ ( X i j ) ) 2 J=\sum_{i, j=1}^{V} f\left(X_{i j}\right)\left(w_{i}^{T} \tilde{w}_{j}+b_{i}+\tilde{b}_{j}-\log \left(X_{i j}\right)\right)^{2} J=i,j=1∑V​f(Xij​)(wiT​w~j​+bi​+b~j​−log(Xij​))2

loss function的基本形式就是最简单的mean square loss,只不过在此基础上加了一个权重函数$ f\left(X_{i j}\right) $,那么这个函数起了什么作用,为什么要添加这个函数呢?我们知道在一个语料库中,肯定存在很多单词他们在一起出现的次数是很多的(frequent co-occurrences),那么我们希望:

这些单词的权重要大于那些很少在一起出现的单词,因此这个函数要是非递减函数(non-decreasing);但这个权重也不能过大,当到达一定程度之后当不再增加;如果两个单词没有在一起出现,也就是 X i j X_{i j} Xij​,那么他们应该不参与到loss function的计算当中去,也就是f(x)要满足f(x)=0

为此,作者提出了以下权重函数:

f ( x ) = { ( x / x max ⁡ ) α if x < x max 1 otherwise f(x)=\left\{\begin{array}{cc} \left(x / x_{\max }\right)^{\alpha} & \text { if } x<x_{\text {max }} \\ 1 & \text { otherwise } \end{array}\right. f(x)={(x/xmax​)α1​ifx<xmax​otherwise​

实验中作者设定 x max ⁡ = 100 x_{\max }=100 xmax​=100,并且发现 α = 3 / 4 \alpha=3 / 4 α=3/4时效果比较好。

BERT

如果觉得《自然语言处理NPL》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。