文章目录
- 1. 词汇表征
- 2. 使用词嵌入
- 3. 词嵌入的特性
- 4. 嵌入矩阵
- 5. 学习词嵌入
- 6. Word2Vec
- 7. 负采样
- 8. GloVe 词向量
- 9. 情感分类
- 10. 词嵌入除偏
- 作业
参考:
吴恩达视频课
深度学习笔记
自然语言处理与词嵌入
Natural Language Processing and Word Embeddings
1. 词汇表征
词嵌入(word embeddings),这是语言表示的一种方式,可以让算法自动的理解一些类似的词,比如 男人对女人,比如 国王对王后
one-hot 向量来表示词,缺点:它把每个词孤立起来,算法对相关词的泛化能力不强(每两个词之间的向量内积都是0)
2. 使用词嵌入
用词嵌入做迁移学习的步骤:
-
从大量的文本集中学习词嵌入。或者下载网上预训练好的词嵌入模型
-
用词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中
例如,用这个300维的词嵌入来表示你的单词,代替原来的10000维的one-hot向量 -
新的任务训练模型时,你可以选择要不要继续微调,用新的数据调整词嵌入。实际中,只有第二步中有很大的数据集你才会这样做,如果数据集不是很大,通常不会在微调词嵌入上费力气(你的数据很小,微调词嵌入,效果也不明显)
词嵌入 在语言模型、机器翻译领域用的少一些,因为这些任务你有大量的数据(可用于训练,不必使用迁移)
人脸识别中的人脸Encoding算法,未来可能涉及到海量的人脸照片
而自然语言处理 有一个固定的词汇表 embedding,而像一些没有出现过的单词我们就记为 未知单词UNK
总结:
用词嵌入来实现迁移学习,抛弃原来的one-hot表示,而是用之前的嵌入的向量,你的算法会泛化的更好,你也可以从较少的标记数据中进行学习
3. 词嵌入的特性
找到一个单词 w:argmaxSimilarity(ew,eking −eman+ewoman )w : \operatorname{argmax} \operatorname{Similarity}\left(e_{w}, e_{\text {king }}-e_{\operatorname{man}}+e_{\text {woman }}\right)w:argmaxSimilarity(ew,eking −eman+ewoman )
通过这种方法来做类比推理准确率大概只有30%~75%
还有余弦相似度(夹角):
sim(u,v)=cos(θ)=uTv∣u∣∣2∣∣v∣∣2\operatorname{sim}(u, v)= cos(\theta) = \frac{u^{T} v}{\left.|u|\right|_{2}|| v||_{2}}sim(u,v)=cos(θ)=∣u∣∣2∣∣v∣∣2uTv
4. 嵌入矩阵
我们的目标是学习一个嵌入矩阵。
我们将随机地初始化矩阵,然后使用梯度下降法来学习这个300×10000
的矩阵中的各个参数,然后取出你需要的列
5. 学习词嵌入
如果想建立一个语言模型,用目标词的前几个单词作为上下文是常见做法
如果你的目标是学习词嵌入,那么你就可以用这些其他类型的上下文(下图所示),也能得到很好的词嵌入
6. Word2Vec
p(t∣c)=eθtTec∑j=110,000eθjTecp(t \mid c)=\frac{e^{\theta_{t}^{T} e_{c}}}{\sum_{j=1}^{10,000} e^{\theta_{j}^{T} e_{c}}}p(t∣c)=∑j=110,000eθjTeceθtTec
L(y^,y)=−∑i=110,000yilogy^iL(\hat{y}, y)=-\sum_{i=1}^{10,000} y_{i} \log \hat{y}_{i}L(y^,y)=−i=1∑10,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),它获得中间词两边的上下文,然后用周围的词去预测中间的词,这个模型也很有效
总结下:CBOW是从原始语句推测目标字词;而Skip-Gram正好相反,是从目标字词推测出原始语句。
CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好
7. 负采样
构造一个新的监督学习问题,就是给定一对单词,比如orange和juice,要去预测这是否是一对上下文词-目标词(context-target)
选取负样本采用经验分布:
P(wi)=f(wi)34∑j=110,000f(wj)34P\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词的距离,那么 XijX_{ij}Xij 就是一个能够获取单词 iii 和单词 jjj 出现位置相近时或是彼此接近的频率的计数器
GloVe模型做的就是进行优化,我们将他们之间的差距进行最小化处理:
minimize∑i=110,000∑j=110,000f(Xij)(θiTej+bi+bj′−logXij)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=1∑10,000j=1∑10,000f(Xij)(θiTej+bi+bj′−logXij)2
9. 情感分类
情感分类一个最大的挑战就是可能标记的训练集没有那么多。
对于情感分类任务来说,训练集大小从10,000到100,000个单词都很常见,甚至有时会小于10,000个单词,采用了词嵌入能够带来更好的效果(泛化好),尤其是只有很小的训练集时。
10. 词嵌入除偏
根据训练模型所使用的文本,词嵌入能够反映出性别、种族、年龄、性取向等其他方面的偏见,修改学习算法来尽可能减少或是理想化消除这些非预期类型的偏见是十分重要的
- 定位偏见
- 中和,减少两个词在某个轴上的距离
- 均衡,将两个词移至与中间轴线等距的一对点上
作业
作业:词向量+Emoji表情生成
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!