第五门课:序列模型(第二周)——自然语言处理与词嵌入

1. 词汇表征

词嵌入(word embeddings)是一种将文本中的词转换成数字向量的方法,这样就可以使用标准机器学习算法来对它们进行分析,并让算法自动的理解一些类似的词,比如 男人对女人,国王对王后

词嵌入过程就是把一个维数为所有词数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,词嵌入的结果就生成了词向量

词向量模型基于语言学的“距离相似性“原理,可以衡量词之间的相似性。

为什么不常使用one-hot 向量来表示词?
缺点:它把每个词孤立起来,算法对相关词的泛化能力不强(每两个词之间的向量内积都是0)

在这里插入图片描述

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出。t-SNE 作为一种非线性降维算法,非常适用于高维数据降维到2维或者3维,便于进行可视化。在这里插入图片描述

2. 使用词嵌入

在这里插入图片描述
词嵌入迁移学习的步骤:

  1. 从大量的文本集中学习词嵌入,或者下载网上预训练好的词嵌入模型

  2. 用词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中
    例如,用这个300维的词嵌入来表示你的单词,代替原来的10000维的one-hot向量

  3. 新的任务训练模型时,你可以选择要不要继续微调,用新的数据调整词嵌入。实际中,只有第二步中有很大的数据集你才会这样做,如果数据集不是很大,通常不会在微调词嵌入上费力气(你的数据很小,微调词嵌入,效果也不明显)

词嵌入语言模型、机器翻译领域用的少一些,因为这些任务你有大量的数据(可用于训练,不必使用迁移)

总结:
用词嵌入来实现迁移学习,抛弃原来的one-hot表示,而是采用之前的嵌入的向量,你的算法会泛化的更好

3. 词嵌入的特性

在这里插入图片描述
通过 argmax ⁡ Similarity ⁡ ( e w , e king  − e man ⁡ + e woman  ) \operatorname{argmax} \operatorname{Similarity}\left(e_{w}, e_{\text {king }}-e_{\operatorname{man}}+e_{\text {woman }}\right) argmaxSimilarity(ew,eking eman+ewoman ) 寻找一个单词 w ,这种方法来做类比推理准确率大概只有30%~75%

更常用的表示方式是利用余弦相似度(夹角) sim ⁡ ( u , v ) = cos ⁡ ( θ ) = u T v ∣ u ∥ 2 ∥ v ∥ 2 \operatorname{sim}(u, v)=\cos (\theta)=\frac{u^{T} v}{\mid u\left\|_{2}\right\| v \|_{2}} sim(u,v)=cos(θ)=u2v2uTv , 如果向量 u u u和向量 v v v和非常相似, s i m ( u , v ) sim(u,v) sim(u,v) 将接近1;如果它们不相似,则 s i m ( u , v ) sim(u,v) sim(u,v)将取得较小的值。

4. 嵌入矩阵

在这里插入图片描述
我们的目标是学习一个嵌入矩阵 E

我们将随机地初始化矩阵,然后使用梯度下降法来学习这个300×10000的矩阵中的各个参数,然后取出你需要的列

5. 学习词嵌入

在这里插入图片描述
如果想建立一个语言模型,用目标词的前几个单词作为上下文是常见做法

如果你的目标是学习词嵌入,那么你就可以用这些其他类型的上下文(下图所示),也能得到很好的词嵌入

在这里插入图片描述

6. Word2Vec

在这里插入图片描述
s o f t m a x : p ( t ∣ c ) = e θ t T e c ∑ j = 1 10 , 000 e θ j T e c 损 失 函 数 : L ( y ^ , y ) = − ∑ i = 1 10 , 000 y i log ⁡ y ^ i softmax:p(t \mid c)=\frac{e^{\theta_{t}^{T} e_{c}}}{\sum_{j=1}^{10,000} e^{\theta_{j}^{T} e_{c}}}\\ 损失函数:L(\hat{y}, y)=-\sum_{i=1}^{10,000} y_{i} \log \hat{y}_{i} softmaxp(tc)=j=110,000eθjTeceθtTecL(y^,y)=i=110,000yilogy^i
为了解决 softmax 对分母求和很慢的问题:

  • 采用 分级(hierarchical)的softmax分类器、负采样(Negative Sampling)
    在这里插入图片描述

如果对上下文进行随机均匀采样,像 the、of、a、and、to 之类出现得相当频繁,那么上下文到目标词的映射会相当频繁地得到这些种类的词,实际上,词 p ( c ) p(c) p(c) 的分布并不是单纯的在训练集语料库上均匀且随机的采样得到的,而是采用了不同的分级来平衡更常见的词和不那么常见的词

以上就是 Word2Vec 中的 Skip-Gram 模型,还提到了一种叫做CBOW模型,即连续词袋模型(Continuous Bag-Of-Words Model),它获得中间词两边的上下文,然后用周围的词去预测中间的词,这个模型也很有效。

总结

  1. CBOW是从原始语句推测目标字词;而Skip-Gram正好相反,是从目标字词推测出原始语句。
  2. CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好

7. 负采样

构造一个新的监督学习问题,就是给定一对单词,比如orange和juice,要去预测这是否是一对上下文词-目标词(context-target)
在这里插入图片描述
选取负样本采用经验分布

P ( w i ) = f ( w i ) 3 4 ∑ j = 1 10 , 000 f ( w j ) 3 4 P\left(w_{i}\right)=\frac{f\left(w_{i}\right)^{\frac{3}{4}}}{\sum_{j=1}^{10,000} f\left(w_{j}\right)^{\frac{3}{4}}} P(wi)=j=110,000f(wj)43f(wi)43

因为在softmax分类器中计算成本很高。本节我们学到了如何通过将其转化为一系列二分类问题使你可以非常有效的学习词向量。

当然网上也有别人预训练过的词向量,你想要在NLP问题上取得快速进展,去下载他人的词向量是很好的方法,并在此基础上进行改进

8. GloVe 词向量

GloVe:用词表示的全局变量(global vectors for word representation)

对于GloVe算法,我们可以定义上下文和目标词为任意两个位置相近的单词,假设是左右各10词的距离,那么 X i j X_{ij} Xij 就是一个能够获取单词 i i i 和单词 j j j 出现位置相近时或是彼此接近的频率的计数器

GloVe模型做的就是进行优化,我们将他们之间的差距进行最小化处理:
minimize ⁡ ∑ i = 1 10 , 000 ∑ j = 1 10 , 000 f ( X i j ) ( θ i T e j + b i + b j ′ − log ⁡ X i j ) 2 \operatorname{minimize} \sum_{i=1}^{10,000} \sum_{j=1}^{10,000} f\left(X_{i j}\right)\left(\theta_{i}^{T} e_{j}+b_{i}+b_{j}^{\prime}-\log X_{i j}\right)^{2} minimizei=110,000j=110,000f(Xij)(θiTej+bi+bjlogXij)2

9. 情感分类

情感分类一个最大的挑战就是可能标记的训练集没有那么多

对于情感分类任务来说,训练集大小从10,000到100,000个单词都很常见,甚至有时会小于10,000个单词,采用了词嵌入能够带来更好的效果(泛化好),尤其是只有很小的训练集时。
在这里插入图片描述
怎么解决呢?将嵌入向量输入到RNN,通过RNN感知词的顺序
在这里插入图片描述

10. 词嵌入除偏

根据训练模型所使用的文本,词嵌入能够反映出性别、种族、年龄、性取向等其他方面的偏见,修改学习算法来尽可能减少或是理想化消除这些非预期类型的偏见是十分重要的

  • 定位偏见
  • 中和,减少两个词在某个轴上的距离(PCA)
  • 均衡,将两个词移至与中间轴线等距的一对点上

猜你喜欢

转载自blog.csdn.net/qq_42859149/article/details/120068442
今日推荐