Word representation
One-hot形式
在上一周介绍RNN类模型时,使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的,算法很难学习到单词之间的关系。
比如下面的例子,即使语言模型已经知道orange juice是常用组合词,但是却不容易泛化到知道apple juice。这主要是因为单词之间的内积是0向量。
因此我们可以用非One-hot的多维向量描述一个单词,单词之间的距离可以描述单词之间的相似度,这样可以让算法更快的学习到单词之间的联系。
多维向量形式
使用多维向量,向量每一维是一个浮点数,这样可以使用更少维度的dense向量表征单词。
1. 可以使用迁移学习的思想,预训练大量数据获取每个单词的embdding,或者直接从网络找到其他人训练好的模型获取Embedding。
2. 获取到Embdding之后可以再应用到你的任务当中,比如名字识别等模型,这是你的训练集可能是比较小的。
3. 如果你的训练集很大,也可以尝试fine-tune第一步中的预训练模型
单词之间的相似度
使用多维向量表征单词时,可以使用cos距离或者L2距离等来表征单词之间的相似度
Learning Word Embddings
在NLP最开始的时候,研究人员尝试用很复杂的模型来获取Word Embdding,但是后来大家发现可以用越来越简单的模型来获取并且效果很好,尤其是在大数据集下。该小节从复杂模型讲起,然后逐步简化。
早期模型
每次取数据集中句子中待预测词前面的4(超参)个单词,输入到模型中,模型输出层是softmax输出每个单词的可能性。
Word2Vec 之 skip-grams
原始论文中作者提供了Word2Vec的两个版本:skip-grams、CBow。
CBow是利用中间词周围的上下文预测中间词,有优点有缺点,不展开讲,这里只介绍skip-grams。
定义
首先介绍什么是skip-grams,skip-grams需要提供一个context单词和一个target单词,先选定context单词,然后在其前后k(超参)个相邻单词的窗口内,随机选取一个target单词组成一个pair
模型结构
输出层为词库大小个softmax分类单元
缺点
这个算法存在一些问题:
1. softmax在词库很大时计算成本很高,可以使用多层softmax降低计算量(后面的课程中有更优的解决方案,这里没展开),建立多层softmax树时,可以使用启发式算法优化(不展开),把常用词放在浅层,低频词放在深层,减少检索成本。
2. 如何选取context单词,如果正态分布选取会导致抽取的都是高频词,低频词很难被取出来,也需要用启发式算法抽样(不展开)。
Negative Sampling
定义
负采样是对原始skip-grams的优化,可以有效降低多类分类问题的计算量。
负采样是选取一个context单词,然后从其前后一定窗口内选取一个临近的target单词作为正样本,其标签是1;然后用同样的context单词,从词库随机选取k(超参)次target单词分别组成负样本,其标签是0。
小概率会抽到实际也是context单词附近的单词,因为是随机误差所以影响不大。
模型结构
跟skip-grams相比,模型的输出层将词库大小个softmax单元,替换为了词库大小个逻辑回归单元,并且在每次迭代中只需要更新跟正负样本相关的k+1个输入层的逻辑回归单元参数,大幅降低计算量。
如何进行负样本选取
既不是随机采样,也不是按照词频采样,作者用了一个经验公式(无法证明是最好的,但是现在都用的这个公式):
GloVe
全称:Global Vectors for word representation。使用不如Word2Vec广泛。
定义
首先统计词库中每两个单词在训练集中一起出现的次数,然后输入context单词模型预测其跟target词出现次数并最小化两者之间的差值。
模型结构
在实际模型中,增加了一个权重系数经验公式用于对低频词提权,高频词降权。
和
分别是单词的context向量和target向量,分别为单词作为context单词时使用和作为target单词时使用,训练完成后可以使用
或
作为最终的词向量。
偏置项存在的意义ChatGPT的解释如下
词向量的应用
Sentiment Classification
通过分析文本的情感表达来确定其情感倾向。在NLP中经常使用。
在有词向量的情况下,你可以使用中等大小的标注训练集来进行情感分类,而不需要大量标注数据集。
如下图可以将评价中的所有词向量相加或取平均作为输入预测分数,但是这样存在一个问题,无法理解上下文,比如左下角例子,good出现更多可能预测分较高,但实际是差评
进一步使用RNN模型逐次输入每个单词词向量,输出打分。
消除词向量偏见
以性别偏见为例,计算he/she、male/female这些词向量的差并计算平均值,找到性别差异向量;然后对于不应该跟性别关联的词如医生、婴儿看护在这个方向上移动到0坐标;然后对性别差异的反义词组在这个方向上移动为对称的。