词嵌入(word embeddings)是一种将文本中的词转换成数字向量的方法,这样就可以使用标准机器学习算法来对它们进行分析,并让算法自动的理解一些类似的词,比如 男人对女人,国王对王后
词嵌入过程就是把一个维数为所有词数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,词嵌入的结果就生成了词向量。
词向量模型基于语言学的“距离相似性“原理,可以衡量词之间的相似性。
为什么不常使用one-hot 向量来表示词?
缺点:它把每个词孤立起来,算法对相关词的泛化能力不强(每两个词之间的向量内积都是0)
t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出。t-SNE 作为一种非线性降维算法,非常适用于高维数据降维到2维或者3维,便于进行可视化。
从大量的文本集中学习词嵌入,或者下载网上预训练好的词嵌入模型
用词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中
例如,用这个300维的词嵌入来表示你的单词,代替原来的10000维的one-hot向量
新的任务训练模型时,你可以选择要不要继续微调,用新的数据调整词嵌入。实际中,只有第二步中有很大的数据集你才会这样做,如果数据集不是很大,通常不会在微调词嵌入上费力气(你的数据很小,微调词嵌入,效果也不明显)
词嵌入
在语言模型、机器翻译领域用的少一些,因为这些任务你有大量的数据(可用于训练,不必使用迁移)
总结:
用词嵌入来实现迁移学习,抛弃原来的one-hot表示,而是采用之前的嵌入的向量,你的算法会泛化的更好
通过 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∥2uTv , 如果向量 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)将取得较小的值。
我们将随机地初始化矩阵,然后使用梯度下降法来学习这个300×10000
的矩阵中的各个参数,然后取出你需要的列
如果想建立一个语言模型,用目标词的前几个单词作为上下文是常见做法
如果你的目标是学习词嵌入,那么你就可以用这些其他类型的上下文(下图所示),也能得到很好的词嵌入
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,000eθjTeceθtTec损失函数:L(y^,y)=−i=1∑10,000yilogy^i
为了解决 softmax 对分母求和很慢的问题:
如果对上下文进行随机均匀采样,像 the、of、a、and、to 之类出现得相当频繁,那么上下文到目标词的映射会相当频繁地得到这些种类的词,实际上,词 p ( c ) p(c) p(c) 的分布并不是单纯的在训练集语料库上均匀且随机的采样得到的,而是采用了不同的分级来平衡更常见的词和不那么常见的词。
以上就是 Word2Vec 中的 Skip-Gram 模型,还提到了一种叫做CBOW模型,即连续词袋模型(Continuous Bag-Of-Words Model),它获得中间词两边的上下文,然后用周围的词去预测中间的词,这个模型也很有效。
总结:
构造一个新的监督学习问题,就是给定一对单词,比如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问题上取得快速进展,去下载他人的词向量是很好的方法,并在此基础上进行改进
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,000j=1∑10,000f(Xij)(θiTej+bi+bj′−logXij)2
情感分类一个最大的挑战就是可能标记的训练集没有那么多。
对于情感分类任务来说,训练集大小从10,000到100,000个单词都很常见,甚至有时会小于10,000个单词,采用了词嵌入能够带来更好的效果(泛化好),尤其是只有很小的训练集时。
怎么解决呢?将嵌入向量输入到RNN,通过RNN感知词的顺序
根据训练模型所使用的文本,词嵌入能够反映出性别、种族、年龄、性取向等其他方面的偏见,修改学习算法来尽可能减少或是理想化消除这些非预期类型的偏见是十分重要的