基于深度学习的自然语言处理--笔记(第八章)

第8章 从文本特征到输入


前言

本章将讨论如何将一系列核心特征转换成分类器可接收的特征向量的细节。

8.1 编码分类特征

处理自然语言时用到的大部分特征是离散、分类特征,比如单词、字母和词性。我如何将这样的分类数据编码成便于统计分类器使用的形式呢?
我们将讨论独热( one hot)编码稠密嵌入向量两种方案,及两种方案间的权衡和关系。

8.1.1 独热编码

当用词袋模型表示包含 40 000 项的词表时,输入矩阵将会是40 000 维的向量,其中第 23 227 维对应单词 dog ,第 12 425 对应单词 cat 。一篇
20 个词的文档将由非常稀疏的 40 000 维向量表示,其中至多 20 维包含非零值。相应地权重矩阵 40 000 行,每行对应词表中一个单词。
这种方法即为onehot 编码,因为每一维对应一个单独特征,可以把结果特征向量想象为高维指示向量(其中只有一维值为1 ,其余维均为0 )的组合.

8.1.2 稠密编码(特征嵌入)

从稀疏输入的线性模型到深度非线性模型的最大概念跨越可能就是不再以独热 (one-hot )中的一维来表示各个特征,转而使用稠密向量表示,也就是每个核心特征都被嵌入到dd维空间中 ,并用空间中的一个向量表示。
基于前馈神经网络的 NLP 分类系统的一般结构如:

  1. 抽取一组和预测输出类别相关的核心语言学特征f1,...,fkf_1,...,f_k
  2. 对于每一个感兴趣的特征fif_i,检索出相应的向 量v(fi)v(f_i)
  3. 将特征向量组合成(拼接、相加或者两者组合)输入向量xx
  4. xx输入到非线性分类器中(前馈神经网络)

基于深度学习的自然语言处理--笔记(第八章)对输入来说,从线性分类器到深度分类器的最大变化是从每个特征用单独一维的稀疏表示到把每个特征映射到一个向量的稠密表示,另外一个区别是我们基本上只需要抽取核心特征而不需要做特征组合。

8.1.3 稠密向量与独热表示

独热( one-hot )表示 每个特征有单独一维。

  1. 独热向量维度与不同特征的数目相同
  2. 特征间完全相互独立,特征“word is’ dog '”与“ word is thinking '”和“ word is‘ cat’" 同样不相似

稠密表示 每个特征为一个dd维向量。

  1. 维度是dd
  2. 模型训练会导致相似特征对应相似向量,相似特征间的信息是共享的。

使用稠密低维向量的一个好处是可计算:大部分神经网络工具包不能很好地处理高维稀疏向量 。

稠密表示的主要益处是具有很强的泛化能力。
在缺乏同一类别下区分度大的特征并且不同特征间没有相互关系的情况下,我们可能使用独热表示。

8.2 组合稠密向量

每个特征对应一个稠密向量,需要用某种方式将不同的向量组合起来,主要有拼接、相加(或者平均)和同时使用拼接与相加。

8.2.1 基于窗口的特征

考虑以ii位置 为中心词,两边各包含kk个单词的窗口,设窗口大小 k=2k=2,我们要编码在位置 i2,i1,i+1,i+2i-2, i-1,i+1, i+2 上的词,窗口内的词为a,b,c,da, b,c ,d对应的词向量为a,b,c,d

  1. 不关心窗口内词的位置,可以通过求和方式对窗口编码:a+b+c+d
  2. 关心相对未知,可以使用拼接方式[a,b,c,d],尽管同一个词不管其在窗口中的什么位置都会用相同的向量表示, 但词的位置信息可以在拼接位置中反映出来。
  3. 我们有时可能不太关心词的顺序,但相比于离中心较远的词,我们更加注重距中心较近的词,这时可以使用加权求和的方式进行编码:1/2a+b+c+1/2d
  4. 同时也可以组合多种不同的编码方式,假如我们关心特征是出现在中心词前还是中心词后,但不关心窗口内的词距中心词的距离,这时可以采用拼接和相加组合的编码方式:[(a+b) ; (c+d)]

8.2.2 可变特征数目:连续词袋

前馈神经网络使用固定维度的输入,这样能够很容易地与抽取固定数目特征的抽取函数相适应,每个特征用一个向量表示,通过拼接组合向量,这种方法中输入向量的每个区域对应一个不同特征。但有时不能预先确定特征的数目(如在文本分类任务中,通常句子中的每个词都是一个特征),因此我们需要使用固定大小的向量表示任意数量的特征 。一种方案是使用 作连续词袋 (CBOW)的方法表示。
CBOW通过相加或者平均的方式组合特征的嵌入向量:
基于深度学习的自然语言处理--笔记(第八章)
加权 CBOW是CBOW 一种简单变换,为不同的向量赋予不同的权重:
基于深度学习的自然语言处理--笔记(第八章)每个特征fif_i都有对应的权重aia_i,表明特征的相对重要性。比如在文本分类任务中,特征fif_i可能对应文本中的一个词,相关的权重aia_i 可以是这个词的 tf-idf值。

8.3 独热和稠密向量间的关系

使用稠密向量表示特征是神经网络框架的必要部分,使用稀疏和稠密特征表示的区别也必然比之前更加微妙。事实上,在训练神经网络时,使用稀疏独热向量作为输入,意味着使网络的第一层从 练数据中学习特征的稠密嵌入向量。

稠密向量
每个分类特征值fif_i被映射为稠密的dd维向量v(fi)v(f_i)
对于包含V个词的词表,每个词用dd维向量嵌入,所有词的向量的集合可以看作一个VdV*d的嵌入矩阵EE,矩阵每一行对应一个嵌入的特征。
FiF_i为特征fif_i的V维独热表示向量,除一维对应第ii个特征的值,其余维均为0,乘法操作FiEF_i*E会选择EE的对应行,因此v(fi)v(f_i)通过EEFiF_i来定义:
v(fi)=FiEv(f_i)=F_i*E

8.4 杂项

补齐:有时你的特征抽取器会寻找一些不存在的东西,比如从句法树中抽取特征时,可能需要找到一个词的最左依存结点,但可能有的词左侧没有任何依存结点 或者你可能抽取当前词右侧的一些词,但当前词却在序列的末端,距当前词右侧两个位置已经越过序列边界。这种情况下该怎么处理呢?
推荐的做法是添加个特殊符号( 齐符号〉到嵌入词表中,并且在上述情况中使用相应的补齐向量。

未登录词:条目是存在的,但是却无法进行映射 解决方法是相同的,保留一个特殊符号 UNK 表示未知记号来应对这种情况。
词签名:处理未登录词的另一种技术是将词的形式回退到词签名。使用 UNK 符号表示未登录词是将所有未登陆词回退到同样的签名,但是根据要解决的问题的不同,可能使用更加细粒度的策略,比如用 一ing 符号代替以 ing 结尾的未登录词,以 —ed 符号代替以 ed结尾的未登录词,以 un一 代替以 un 开头的未登录词,用 NUM 符号代替所
有数字等。

词丢弃:在训练集中抽取特征时,用未登录符号随机替换单词。这种替换应基于词频:低频词相较高频词更可能被未登录符号代替。

使用词丢弃进行正则化:除了更好地适应未登录词之外,词丢弃可能也会有助于避免 过拟合和通过让模型不过分依赖任何当前词来提高鲁棒性。

8.4.3 特征组合

对于神经网络来说,特征抽取阶段只抽取核心特征。非线性神经网络模型的一个优势是人们只需要定义核心特征,由神经网络结构定义的非线性分类器被期望去寻找具有指示性的特征组合,减轻对特征组合工程的需求。

8.4.4 向量共享

一个词在中心词前和在中心词后面(位置不同),那么对应的向量是否相同呢?取决于位置是否重要,也许共享词表会有不一样的收益。

8.4.5 维度

每个特征分配多少维?没有一个理论界限甚至最佳事件来回答 。经验方法是对几个不同大小的维度进行实验,然后在速度和任务准确性之间取得一个良好的平衡。50到几百,甚至上千维都有可能。