Natural Language Processing Lecture05

Natural Language Processing Lecture05

Word2Vec

如果我们设想⼀种神经⽹络:

  • 每个单词的意思是⼀个向量,v1,v2,v3,..vN
  • 前⽂中所述的 function 也是⼀个神经⽹络线性变化,F
  • 对于⽂章中的每个单词 C,使⽤ C 的上下⽂单词,v_i,v_i+1,..v_k 送⼊ F 中,使得 \(F(v_i,v_{i+1},..v_k)\) 产出⼀个概率分布,该概率分布中,使得 C 的位置值的概率值最⼤
  • 使⽤ backpropagation 不断优化 v_1,v_2,..v_n 的值,以及 F 的值
  • 不断更新各个向量以及F的值,使得预测概率分布的准确性越来越⾼
  • 则,我们获得了⼀个函数 F(context_words)=具体某个单词
  • 对于某个单词 v-k,假设它有两组上下⽂:
    • \(v_i,v_j,v-k,v_m,v_n\)
    • $v_i,v_j,v-k,v_p,v_n $
    • \(F(v_1,v_j,v_m,v_n)=F(v_i,v_j,v_p,v_n)\)
    • 则,\(v_m=v_p\)
  • V-m 和 v-p 的上下⽂类似,经过不断的迭代更新,其向量也⼀样了,⽽上下⽂类似,说明其语义类似
  • 所以,v-m 和 v-p 的语义⼀样,⽽向量表⽰也⼀样了
  • Mikolov et.al 2013, Google
  • Two model variants
    • Skip-Gram (SG): Predict context ("outside") words (position independent) given center word
      • 用一个词语作为输入,来预测它周围的上下文
    • Continuous Bag of Words (CBOW): Predict center word from (bag of) context words
      • 拿一个词语的上下文作为输入,来预测这个词语本身

## Skip Gram Model

For each position c=1,…,T, predicate context words within a window of fixed size m, given center word \(w_c\), given parameters θ

\[Likehood(\theta)=\prod_{c=1}^T\prod_{-m\le j \le m,j\neq0}Pr(w_{c+j}|w_c;\theta) \]

\[Loss(\theta)=-\frac1TLogLikehood(\theta)=-\frac1T\sum_{t=1}^T\sum_{-m\le j \le m,j\neq0}log(Pr(w_{c+j})|w_c;\theta)\]

\[Pr(w_{c+j})=\frac{\vec{e}^T_{c+j}\cdot\vec{c}}{\sum_{w\in W \ e^{\vec{v_w^T \cdot \vec{v_C}}} }}\]

  • Loss函数趋向于 0 <=> 拟合的函数 + 向量,根据上下文预测单词的能力越强

本质上是用反向传播算法训练模型,得到神经网络权重,组成一个向量,唯一地对应输入 x。

Softmax

1
2
3
4
5
6
7
8
import numpy as np

def softmax(array):
array -= np.max(array) # 所有数减去最大的数,防止指数运算溢出
exp_x = np.exp(array)
return exp_x / np.sum(exp_x)

softmax(np.array([1, 2, 3, 4]))

Softmax 函数可以把任意给定的向量 X 变成概率分布:

  • Max:把 X 中最大的 \(x_i\) 值变得更大
  • Soft:依然对较小的值会给到权重

Hierarchical Softmax

分层 Softmax 用二叉树来表示词汇表中的所有单词,假设词汇表有 V 个单词,那么用二叉树来表示这 V 个单词时,这些单词都只能在叶子节点上。而由于二叉树的性质,那些非叶子的节点为 V - 1 个。对于每个叶子节点,存在也只存在一条从根节点出发到达此节点的绝对路径。通过这条路径,我们就能预估这个叶子节点表示的单词的可能性。下面是一个二叉树的示例:

Huffman Tree

树的建立采用哈夫曼树,这样把 N 分类问题化为了 \(log(N)\) 分类问题。

Negative Sampling

每次循环迭代过程中需要处理大量的节点上的计算,为了解决这个问题,Negative Sampling 提出了只更新其中一部分输出向量的解决方案。

经实践发现,使用如下目标函数可产生高质量且可靠的 word embeddings:

\[E=-log(\sigma(u_0^Tv_c))+\sum_{j-P(W)}[log\sigma (-u^T_jv_c)] \]

Other WordEmbedding

Glove (Global Vector)

可进行分布式运算,其实与 Word2Vec 差别不大

CoVe (Context Vector)

之前的词向量并没有解决一词多义问题

EMLO (Embedding of Language Model)

使用双向 LSTM 语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个语言模型的最大似然。

Sentence Embedding

探究句子间的相似性

Weighted Bag-of-words + remove some special direction

  • Step1: 构建平滑的加权词向量
  • Step2: 计算 PCA,减去最明显的第一个维度

https://openreview.net/pdf?id=SyK00v5xx

# NLP

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×