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. 使用词嵌入
词嵌入(Word Embedding)是一种将文本中的词转换成数字向量的方法,为了使用标准机器学习算法来对它们进行分析,就需要把这些被转换成数字的向量以数字形式作为输入。
词嵌入过程就是把一个维数为所有词数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,词嵌入的结果就生成了词向量。
词向量模型基于语言学的“距离相似性“原理,可以衡量词之间的相似性。 用词嵌入做迁移学习的步骤:
-
从大量的文本集中学习词嵌入,或者下载网上预训练好的词嵌入模型 -
用词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中 例如,用这个300维的词嵌入来表示你的单词,代替原来的10000维的one-hot向量 -
新的任务训练模型时,你可以选择要不要继续微调,用新的数据调整词嵌入。实际中,只有第二步中有很大的数据集你才会这样做,如果数据集不是很大,通常不会在微调词嵌入上费力气(你的数据很小,微调词嵌入,效果也不明显)
词嵌入 在语言模型、机器翻译领域用的少一些,因为这些任务你有大量的数据(可用于训练,不必使用迁移)
人脸识别中的人脸Encoding算法,未来可能涉及到海量的人脸照片 而自然语言处理 有一个固定的词汇表 embedding,而像一些没有出现过的单词我们就记为 未知单词UNK
总结: 用词嵌入来实现迁移学习,抛弃原来的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(θ)=∣u∥2?∥v∥2?uTv? , 如果向量
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}
softmax:p(t∣c)=∑j=110,000?eθjT?ec?eθtT?ec??损失函数:L(y^?,y)=?i=1∑10,000?yi?logy^?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
(
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,000?f(wj?)43?f(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=1∑10,000?j=1∑10,000?f(Xij?)(θiT?ej?+bi?+bj′??logXij?)2
9. 情感分类
情感分类一个最大的挑战就是可能标记的训练集没有那么多。
对于情感分类任务来说,训练集大小从10,000到100,000个单词都很常见,甚至有时会小于10,000个单词,采用了词嵌入能够带来更好的效果(泛化好),尤其是只有很小的训练集时。 怎么解决呢?将嵌入向量输入到RNN,通过RNN感知词的顺序
10. 词嵌入除偏
根据训练模型所使用的文本,词嵌入能够反映出性别、种族、年龄、性取向等其他方面的偏见,修改学习算法来尽可能减少或是理想化消除这些非预期类型的偏见是十分重要的
- 定位偏见
- 中和,减少两个词在某个轴上的距离(PCA)
- 均衡,将两个词移至与中间轴线等距的一对点上
|