第二周:自然语言处理与词嵌入

本文是序列模型的笔记

2.1 词汇特征(Word Representation)

  • Recap:
    我们之前使用了字典+One-Hot表示。
    因为任意两个One-hot向量的内积为0,所以模型泛化能力比较差。不能通过已有的信息根据类别进行类推。

词嵌入 Word Embedding

我们定义几个特征,用来表示这些词汇。例如

FeatureManWomenKingQueenAppleOranges
Gender-11-0.950.970.000.01
Royal0.010.020.930.95-0.010.00
Age0.030.02-0.950.970.03-0.02
Food0.090.01-0.950.970.950.97

这样每一列就可以用来表示这个词,并且比较好地保留了相似的信息。

t-SNE

可以将上面的向量降维到2维,从而可以进行可视化。
【图片】

2.2 使用词嵌入

Name entity例子

(1) Sally is an orange farmer.
(2) Robert is a durian cultivator.
如果我们通过训练知道了句子(1),这样如果通过词嵌入直到orange和durian,farmer和cultivator属于同一类。所以我们可以推出Robet也是一个人。

我们可以通过无监督学习分出各种文字的类别,然后再进行迁移学习。

步骤:

  1. 训练或者下载根据大型语料库训练的一个词嵌入的模型,目的是可以对每个词都得到一个紧凑的向量,用来代替之前稀疏的one-hot向量。
  2. 我们对这个模型进行迁移(因为我们的任务可能数据比较少),迁移到我们小的数据集上。

Rq:
这些对于数据比较少的时候采用迁移学习。

词向量和人脸识别的关系

例如我们之前在Face Recognition里面为了得到一个人的面部特征,使用的Face Encoding和这里的Words Embedding的含义类似。

2.3 词嵌入的特性

例子:

在这里插入图片描述

  • 问题:如果 Man 对应 Women,那么 King 对应什么?
  • Sol:
    我们可以发现
    e m a n − e w o m e n = [ − 2 − 0.01 0.01 0.08 ] ≈ e k i n g − e q u e e n e_{man}-e_{women}=\begin{bmatrix} -2\\ -0.01\\ 0.01\\ 0.08 \end{bmatrix} \approx e_{king}-e_{queen} emanewomen=20.010.010.08ekingequeen
    所以一般来说,为了回答这个问题,我们就需要解这个向量“方程”:
    e m a n − e w o m e n ≈ e k i n g − e ? e_{man}-e_{women}\approx e_{king}-e_? emanewomenekinge?
    换言之,我们想要找到 w i w_i wi使得
    a r m m a x w ( s i m ( e ? , e m a n − e w o m e n − e k i n g ) ) armmax_{w}(sim(e_?,e_{man}-e_{women}-e_{king})) armmaxw(sim(e?,emanewomeneking))
    s i m ( v e c t 1 , v e c t 2 ) sim(vect1,vect2) sim(vect1,vect2)是一个用来衡量两个向量像素的函数。

常见的 s i m ( v e c t 1 , v e c t 2 ) sim(vect1,vect2) sim(vect1,vect2)

Cosine similarity

s i m ( u , v ) = u T v ∣ ∣ u ∣ ∣ 2 , ∣ ∣ v ∣ ∣ 2 sim(u,v)=\frac{u^Tv}{||u||_2,||v||_2} sim(u,v)=u2,v2uTv

Distance(用来描述相异程度)

∣ ∣ u − v ∣ ∣ 2 2 ||u-v||_2^2 uv22

2.4 Embedding Matrix(嵌入矩阵)

在训练word embedding的时候我们实际上训练的是一个Embedding Matrix。

【图片,说明什么是Embedding Matrix和它与One-Hot之间的关系。】

E m b e d d i n g M a t r i x × O n e H o t = 对 应 元 素 的 E m b e d d i n g EmbeddingMatrix \times OneHot = 对应元素的Embedding EmbeddingMatrix×OneHot=Embedding
Rq: 实际上我们不会这样做,因为OneHot向量里面有太多的0了。

2.5 实现词嵌入

我们应该是希望学会一个词语(Content)到目标(Target)之间的映射。

方法一:Neural language model

这里不是前面的RNN网络,而是采用嵌入词向量+SoftMax输出
在这里插入图片描述
Rq:

  • 利用一个历史窗口,输入4个词预测下一个,然后再让窗口移动。(目的是给出一个Context)
  • 我们对矩阵E进行更新。这样系数会逐渐调整,直到把同类的事物合并在一起。
  • 如果想要构建一个语言模型,我们需要用目标词的前几个单词作为上下文(Context),但如果是为了学习词嵌入,我们可以尝试其他的方法(目标词前面4个词语、前后各4个词语、最近的一个词等等。)

2.6 方法二:Word2Vec

Skip-grams

可以随机的选择句子中的一个单词作为上下文词。例如选择orange作为上下文单词,然后 随机在一定词距内选定另一个词,在上下文单词前后的五到十个单词随机选择目标词

随机选取一个词作为Context,在这个前后一定范围内随机选一个作为Target。

在这里插入图片描述

Skip-grams Model

我们想从一个Context学习预测一个Target t。

一个例子

  • 假设:我们研究一个Content为"Orange",Target为"Juice"的映射。
  • 记号:
    • 在词典中"Orange" 的位置为第6257,记其OneHot向量为 O c O_c Oc
    • 在词典中"Juice" 的位置为第4834,记其OneHot向量为 O t O_t Ot
    • 记词嵌入矩阵为E,"Orange"的嵌入词向量为 e c e_c ec,“Juice”的嵌入词向量为 e t e_t et
    • 由2.4的内容我们可知 e c = E × O c , e t = E × O t e_c=E\times O_c,e_t=E\times O_t ec=E×Oc,et=E×Ot
  • 模型的具体步骤:
    • 将词嵌入向量输入到一个SoftMax单元里面。(对于SoftMax单元,把我们选的内容词Content看成是Context,然后在已知“上下文”的情况下计算目标词出现的概率)
    • θ t \theta_t θt为一个与输出 t t t有关的参数,即表示和标签 t t t相符的概率 P ( t a r g e t ∣ c o n t e n t ) = e θ t T e c ∑ j = 1 10 , 000 e θ j T e c  for  ∀  target  ∈ 词 典 \mathbb{P}(target|content)=\frac{e^{\theta_t^Te_c}}{\sum_{j=1}^{10,000}e^{\theta_j^Te_c}} \text{ for } \forall \text{ target } \in 词典 P(targetcontent)=j=110,000eθjTeceθtTec for  target 
    • 因此我们得到一个由这些条件概率 P ( t a r g e t ∣ c o n t e n t ) \mathbb{P}(target|content) P(targetcontent)所组合成的预测值向量 y ^ \hat{y} y^。然后我们采用交叉熵损失函数 L ( y ^ , y ) = − ∑ i = 1 10 , 002 y i l o g ( y i ^ ) L(\hat{y},y)=-\sum_{i=1}^{10,002}y_ilog(\hat{y_i}) L(y^,y)=i=110,002yilog(yi^)其中 y ^ i = P ( t a r g e t i ∣ c o n t e n t ) \hat{y}_i=\mathbb{P}(target_i|content) y^i=P(targeticontent),而因为我们这个例子中的Value为第4834位的"Juice",所以 y i = { 1  if  i = 4834 0  sinon  y_i=\begin{cases} 1 & \text{ if } i= 4834 \\ 0 & \text{ sinon } \end{cases} yi={10 if i=4834 sinon 

Rq:

  • 我们忽略了SoftMax里面的偏置项。
  • 因为最后正确的Target是众多词语中的一个,所以我们使用SoftMax损失函数。

缺点:

  • 计算时间长,因为要遍历整个例子来计算SoftMax。 p ( t ∣ c ) = e θ t T e c ∑ j = 1 10 , 000 e θ j T e c p(t|c)=\frac{e^{\theta_t^Te_c}}{\sum_{j=1}^{10,000}e^{\theta_j^Te_c}} p(tc)=j=110,000eθjTeceθtTec

    • Sol: Hierarchical SoftMax Classifier(分级SoftMax分类器,用来加速SoftMax)在这里插入图片描述

      • 采用二分的思想,先训练一个二分类器(Logistic)告诉你是属于前5000还是后5000然后再不断2分下去,通过logN的时间复杂度得到最后的类别。
      • 为了节省查找的时间和计算资源,将常见词汇构造在查找树的靠近根部的节点,而不常见的词汇则构造在查找树更深的节点上。
  • 问题:怎么对Context采样?因为一般来说句子中the,a等比较多,容易被选为Context。

  • Sol:通过一些启发式算法。

Rq:

  • 这就是本节介绍的Word2Vec中的skip-gram模型,在参考文献提及的论文原文中,实际上提到了两个不同版本的Word2Vec模型, skip-gram 只是其中之一。还有另外一个模型称为CBOW–连续词袋模型
  • CBOW–连续词袋模型:获得中间词两边的上下文,然后用周围的词来预测中间的词,这个模型也十分的有效也有其优点和缺点。

2.7 负采样 (Negative Sampling)

改善过的学习问题,改善了运算效率

目的:
判断一个Context和Word对,如果是一对,则输出为1,否则为0。
Orange Juice为1,Orange King为0。

步骤:

  1. 选取同一个Context词语,再从字典中选取 k k k个随机的词,并把这些词作为负样本。(一般k = 5 - 20,数据集越小k越大。)
  2. 这些随机取的词语即便出现在了Context前后10个范围里也不要紧。
  3. 构建一个有监督的模型,输入x为Context - word对,输出是否为target。
    对于每一个Context - word对,我们的输出都是0或者1,表示这两者之间是否构成Context -> Target 的映射关系。(对于Context Target的判断可以用Target是否在Context的一定范围内)
    鉴于我们的输出是0或1,我们可以用Sigmoid函数来描述这一个过程:
    P ( y = 1 ∣ c , t ) = σ ( θ t T e c ) \mathbb{P}(y=1 | c,t) =\sigma (\theta_t^T e_c) P(y=1c,t)=σ(θtTec)
    具体来说:
    在这里插入图片描述
    Rq:
    对比之前的SoftMax每一次都需要计算10,000个样本。这里我们只需要更新k+1个Logistic单元(k个负样本+1个正样本),因此这样速度更快。

怎么选择负样本?

  • 如果直接按照出现频率+均匀分布来,则一些词如end出现的次数会比较多。因此作者采用了如下的采样方法计算某一个词 w i w_i wi出现的概率,然后按照这个概率进行采样:
    P ( w i ) = f ( w i ) 3 4 ∑ j = 1 10 , 000 f ( w j ) 3 4 \mathbb{P}(w_i)=\frac{f(w_i)^{\frac{3}{4}}}{\sum_{j=1}^{10,000}f(w_j)^{\frac{3}{4}}} P(wi)=j=110,000f(wj)43f(wi)43

2.8 GloVe词向量 (Global Vectors for word representation)

  • X i , j X_{i,j} Xi,jTarget i出现在Content j的Context里的次数。
    • 如果Context定义为左右各10个词语,则一般来说我们有 X i , j = X j , i X_{i,j}=X_{j,i} Xi,j=Xj,i
    • X i , j X_{i,j} Xi,j可以表示两者同时出现的频率

目的:

Minimize ∑ i = 1 10 , 000 ∑ j = 1 10 , 000 f ( X i , j ) ( θ i T e j + b i + b j ′ − l o g ( X i , j ) ) 2 \sum_{i=1}^{10,000}\sum_{j=1}^{10,000} f(X_{i,j})(\theta_i^Te_j+b_i+b'_j-log(X_{i,j}))^2 i=110,000j=110,000f(Xi,j)(θiTej+bi+bjlog(Xi,j))2

Rq:

  1. 可以把这里的 θ i T e j \theta_i^Te_j θiTej想象成一个测量 θ i \theta_i θi e j e_j ej相似程度的指标,如果 X i , j X_{i,j} Xi,j次数多,则他们两个应该越相似。
  2. Target iContent j
  3. f ( X i , j ) f(X_{i,j}) f(Xi,j)是为了防止 X i , j X_{i,j} Xi,j为0,即 f ( X i , j ) = 0  if  X i , j = 0 f(X_{i,j})=0 \text{ if } X_{i,j}=0 f(Xi,j)=0 if Xi,j=0。此外 f ( X i , j ) f(X_{i,j}) f(Xi,j)也可以用来调整权重:减少对于this等常见的停用词的权重,增大 d u r i o n durion durion这种不太常见的词的权重。
  4. 这里如果Context为Content前后10个词语的话,这里的 θ i \theta_i θi e j e_j ej是对称的。所以我们可以最后取平均得到词向量 e w ( f i n a l ) = e w + θ w 2 e_{w}^{(final)}=\frac{e_w+\theta_w}{2} ew(final)=2ew+θw
  5. 最后得到的词向量有可能是很多因素混在一起的结果,因此不一定具有良好的解释性。

2.9 情绪分类

目的:
输入一句话,输出一个分数(1星到5星)

问题:
训练集数据少。

Sol:
使用词向量,我们可以对一个大一点的语料库使用Neural Language Model或者Word2Vec 或者GloVe得到一个嵌入矩阵E,这样通过调用这个训练好的模型我们就可以对任意词语输出一个词向量。

一种可能的架构

在这里插入图片描述

Rq:

  1. 用SoftMax输出一个1-5分的评价。

问题:

  • 没有考虑词序,会在一个重复出现good的评分上翻车。

改进:

在这里插入图片描述

2.10 词嵌入除偏

我们发现一些模型会反应一些偏见:
Man is to computer programmer as woman is to homework
鉴于深度学习模型会做比较重要的决策,所以需要去除这个偏见。

假设我们已经训练了一个嵌入词向量(Content -> Target)的模型,假设我们想要去除性别的偏见。

  1. 我们可以通过 e h e − e s h e e_{he}-e_{she} eheeshe, e m a l e − e f e m a l e e_{male}-e_{female} emaleefemale相加取平均的方法确定一个Bias Direction,然后我们可以引入一个和Bias Direction垂直的299维的空间(Hyperspace)。这里假定我们的词向量是300维的。【其实也可以使用奇异值分解或者PCA降维等方法得到】
  2. 对于每一个希望中立的词语(如doctor等等),我们减去这个Bias。(但是Mother这种不减)
  3. Equalize Pairs。例如我们希望girlboy之间唯一的区别是性别,即想办法让他们到299维度的Hyperspace的距离相同。(这样他们到Babysitter的距离就相同了。)

最后,我们可以训练一个Classifiers来找到一些我们想要去除性别偏见的词语。
在这里插入图片描述

第二周测试重点:

  1. t-SNE是一种非线性降维算法。
  2. 对于词嵌入而言,这些方程是成立的:
    e b o y − e g i r l ≈ e b r o t h e r − e s i s t e r e_{boy}-e_{girl} \approx e_{brother}-e_{sister} eboyegirlebrotheresister

e b o y − e b r o t h e r ≈ e g i r l − e s i s t e r e_{boy}-e_{brother} \approx e_{girl}-e_{sister} eboyebrotheregirlesister

  1. word2vec模型:
    P ( t ∣ c ) = e θ t T e c ∑ i = 1 10 , 000 e θ i T e c \mathbb{P}(t|c)=\frac{e^{\theta_t^Te_c}}{\sum_{i=1}^{10,000}e^{\theta_i^T e_c}} P(tc)=i=110,000eθiTeceθtTec
    假如我们需要训练一个500维的词嵌入,则 θ t \theta_t θt e c e_c ec都是500维的向量。 θ t \theta_t θt e c e_c ec都是通过Adam或梯度下降等优化算法进行训练的。
  2. GloVe模型:
    m i n ∑ i = 1 10 , 000 ∑ j = 1 10 , 00 f ( X i j ) ( θ i T e j + b i + b j ′ − l o g ( X i j ) ) 2 min \sum_{i=1}^{10,000}\sum_{j=1}^{10,00} f(X_{ij})(\theta_i^Te_j+b_i+b'_j-log(X_{ij}))^2 mini=110,000j=110,00f(Xij)(θiTej+bi+bjlog(Xij))2
    θ i \theta_i θi e j e_j ej应当使用随机数进行初始化, X i j X_{ij} Xij是单词i在Content j的Context中的次数。函数f要满足: f ( 0 ) = 0 f(0)=0 f(0)=0

课程中提到的一些论文:

Linguistic regularities in continuous space word representations
A neural probabilistic language model
Efficient estimation of word representations in vector space
Distributed representation of words and phrases and their compositionally
Global Vectors for word representation
Man is to computer programmer as woman is to homework

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值