Neural Network Methods for Natural Language Processing 读书笔记2 —— 文本中的特征

前段时间一口气读完了 NN4NLP,很是畅快,非常喜欢作者行文讲解的口吻和逻辑。大概两周读完,每页都有收获,读完后反而担心有所疏漏,知识太多留不住,索性从头来一遍,把学习过程的知识点和思考记录下来,也算精简版供自己今后查阅。
感兴趣的,可以一起学习讨论,真的很推荐这本书。

大致介绍下该书。NN4NLP 由 Goldberg 撰写,是 CMU CS11-747 课程的教材,配合公开课食用更佳,公开课链接。本书并非系统介绍 NN 和 NLP,而是聚焦 NN 在 NLP 领域的具体应用,所以分成了四大部分:NN 中前馈神经网络的入门,前馈神经网络在 NLP 中的应用,RNN 等特殊结构在 NLP 中的应用,部分前沿方向介绍。
因此,本博客也打算分成多篇进行总结,其他篇章请自行搜索本博客。


自然语言数据

一、文本数据的特征

从文本数据到实值向量的映射,称为feature extraction/representation。
虽然 NN 大大减轻了特征工程的工作量,但定义一个好的核心特征集还是很有必要的。

1. NLP 分类问题的类型

自然语言的分类问题大致能分为以下几类(有些任务不属于下属分类,如文本摘要、机器翻译等):

(1)Word
如判断属于什么语言的词汇,与哪些其他词相近,是否其他词的误拼等任务。
这类问题,实际很少见,词一般很少孤立出现,多依赖于上下文。

(2)Texts
如判断是否垃圾,属于什么新闻类别,情感类别等任务。
很常见,通常统称为文档分类问题。

(3)Paired texts
如词 A 与词 B 是否同义词,文档 A 与文档 B 是否一人所写等任务。

(4)Word in context
如文档 A 中的词 B 是否一个名词,文档 A 中的 词 B 是否正确的介词等。
这类人物通常存在于更高层面的任务之中,如标注语句的 pos,查找语句中所有命名实体,找到所有提及给定实体的文档等等。

(5)Relation between two words
如给定语句中,词 A 是否词 B 的主语,词 A 与词 B 之间是否存在买卖关系等。

此外,关于“词”的定义,也是一个开放问题。
通常区分 word 和 token,分词器的输出为 tokens,包含意义的单元为 words。token可能由多个 word 组成,多个 token 可以是一个 word,有时不同 token 代表一个本质相同的 word。

2. NLP 问题的特征

在上面提到的 NLP 常见问题中,有些常用特征描述如下。

(1)Features for Single Words
对于没有上下文的孤立词来说,信息通常来源于其字符构成顺序、前后缀等。
除此之外,还可以从外部资源去挖掘其信息,比如:
① Lemmas and Stems
注意,lemma 存在于词典上,stem 可能压根不是一个正确词。stemming 相对 lemmatization 更粗糙。
② Lexical Resources
如 WordNet、HowNet等。虽然词典资源能提供孤立词的很多相关信息,但具体使用通常是针对具体任务的,通常要求大量细致的工程操作,实际上目前在 NN 中用的很少。
③ Distributional Information

应用实例:
① 语种识别任务中,bag of letter-bigrams是很好的特征
② 编码检测任务中,bag of byte-bigrams 是很好的特征
③ 主题分类任务中,bag-of-words 是很好的特征,有时 bag of word-bigrams 也不错。注意,使用 BOW 时配合 TF-IDF 确实不错,但实际上学习算法本身就会学习到词的权重,有时没必要计算 TF-IDF,也许仅指示位即可。

(2)Features for Text
对于句段落文档等,显然特征可以选取单词在文本中的计数和顺序。这里单词也可以是 ngram。
① BOW
注意还有 bag-of-letter-bigrams 等特殊 BOW。
② Weighting
通常结合 TF、TF-IDF 等。

应用实例:
① 作者归属任务中,bag of POS 和 bag of 功能词(如连词介词冠词等包含信息较少但连接含信息的词的一类词)会是很好的特征。

(3)Features of Words in Context
对于文本中的词来说,显然其在文档中的位置、周围词可以作为特征。通常来说距离更近的词蕴含的信息更多。
① Windows
窗口可考虑周围词的相对位置也可以不考虑位置信息。在 biRNN 结构中,通过可调节可训练的窗口进一步拓展了窗口特征。
② Position

应用实例:
① POS 标注任务中,信息来源于基于词本身的内在信息和基于上下文的外在信息。
② NER 任务中,首先 NER 任务本身是上下文相关的,即某个词的归属类别与其上下文有关。NER 任务也是一个序列分割任务,通常建模为序列标注任务,即使用 BIO 编码标注法。核心特征同 POS 标注任务。
③ 介词语义消岐任务中,首先介词本身是个很有用的特征,此时词周围窗口的信息远不如依存分析关系窗口的信息有效,此外,基于 wordnet 的信息也会是很有用的特征。

(4)Features for Word Relations in Context
当考虑文档中的两个词时,除了两个词的位置、周围词,还有两个词的位置距离、两次之间词的特性等特征。

应用实例:
① 弧分解任务,即给定语句返回语义依存树,此时,词性可以提供特定信息,pos 可以提供低层次的语义信息,此外,利用词嵌入信息更有效。

3. 语言学上的性质

自然语言的语句本身存在超出所构成词的线性顺序的结构,而我们并未掌握这种结构遵循的规则,这些规则即语法,研究语法的本质和规则属于语言学范畴。语言背后的规则有词性(pos)、词法(morphology)、语法(syntax)、甚至是一部分的语义(semantics)。有专门的系统来完成词性标注、语法树、语义角色、对话角色、指代消解等任务的预测,这些预测通常可以很好的作为后续分类的特征使用。这些概念是语言学家为了捕捉语言背后的规则而发明研究的,也确实捕捉到了语言中很多广泛而是重要的规则。

但是这些语言学性质在 NN 中是否有必要呢?
有些人认为这些中间表示可以由 NN 自己学到甚至更好。作者则认为确实只要给够大量数据 NN 是可以学到这些语言学性质的甚至更好,但现实并没这么完美。因为:
① 通常对于关注的任务并没有足够的训练数据
② 即使有,可以通过将普通性质直接添加甚至替代那些浮于表面形式的词,从而实现只聚焦于文本的某些方面
③ 即使不作为输入特征,也可以在多任务学习环境、设计网络结构、训练范式时,作为监督信息来指导。

4. 组合特征

有时,特征的结合能表达更多信息,如特征1“窗口中是否存在词汇‘难过’”,特征2“窗口中是否存在动词”,显然特征“窗口中是否存在词汇‘难过’和动词”能表达更多信息。
线性模型无法model组合特征,除非手动将组合特征作为特征输入。NN 的非线性就没有这个问题。
实践中,仅基于核心特征, NN 确实能学习到好的分类器,有时能超过人工设计了特征组合的最好线性分类器,但是,通常很难强过人工设计了特征组合的最好线性分类器,通常接近而难以超越。

5. Ngram 特征

ngrams 算是特征组合的一种特例,bigram、trigram 常见,4-gram 和5-gram 由于数据稀疏的问题很少使用。
ngram 通常能比孤立词捕获更多信息,如长江大桥,不喜欢。
普通 NN 结构(如 MLP)无法从 BOW 输入特征中推理出 ngram 特征。即能学习到“词A 和 词B 都出现在了文档中”,但学不到“词AB 出现在了文档中”。可见,ngram 特征对非线性分类器中还是很有用的。
当然如果 MLP 的输入特征中添加了词的位置信息,是可以推理出 ngrams 特征的。CNN 本身也可以挖掘出 ngram 特征,biRNN 更厉害甚至能挖掘出不相连的变长的 ngram 特征。

二、从文本特征到输入

前面介绍了经典 NLP 任务总的核心特征,本部分介绍从这些核心特征到特征向量输入到分类器的过程。

1. 编码分类特征

绝大多数核心特征都是离散的分类特征,将它们编码为分类器能使用的通常有两种选择:one-hot 编码,稠密嵌入向量。

one-hot 编码,即每个特征对应一个特定维度。one-hot 向量的维度等于离散特征的个数。特征之间是完全独立的,即存在语言鸿沟。
稠密嵌入向量,即每个特征表征为 d 维向量。稠密嵌入向量的维度即 d。相似的特征之间存在信息共享。

dense embedding representation 的主要优势在于泛化能力,即如果有些特征能提供相似性上的信息,就值得利用 dense embedding 来捕捉这些相似性信息。如果这类特征只要相对很少的类别且不同特征间不存在相似性,即可利用 one-hot representation。
组合不同 dense vector 的主流方式有:串联、求和(或平均)、或前两者结合。
串联考虑了不同特征的相对位置关系,而求和则不关注位置信息。如果不关注顺序只关注窗口里的位置远近,可以考虑加权求和。
前馈网络要求固定维度的输入,这可以通过设定特征抽取函数,每次抽取固定数量的特征达到,即每个特征表征为一个向量,然后所有串联。有时有些任务,需要用的特征的数量不确定,如文档类型分类任务中,通常文档中每个词都是特征,这时候需要将不定数量的特征表征为固定尺寸的向量。一种方式是 CBOW representation,即加和或平均所有特征的 embedding vector。

2. One-hot 和稠密向量之间的关系

事实上,训练 NN 时使用 one-hot 向量作为输入,相当于让网络的第一层来从训练数据中学习 dense embedding vector。
因而,对于多层前馈网络来说,使用 dense 或 sparse 输入并没太大区别。

3. 零碎备注

(1)距离和位置特征

事件抽取任务、指代消解任务中,距离或说相对位置是很重要的特征。
距离特征,在传统 NLP 处理中,通常根据值的范围分为几组然后作为分类特征编码为 one-hot 特征。在 NN 中,也不是作为单独一个数值特征输入的,还是根据值得范围分为几组然后每组像词特征一样被训练为距离嵌入向量。

(2)padding

有时有些特征不存在需要填充,如需要确定给定词左侧的词,这对于句子最左侧的词是没有该特征的,这时候就需要填充了。
对于求和平均类的组合方式还好说,直接抛弃该特征即可,对于串联式的,则需要补充全零向量之类的。虽然方法简陋但有效。
如果该特征空缺还蕴含着信息,则可以专门在 embedding 表中添加一个特殊符号即 padding symbol,用来表征这种情况。

注意,词向量的应用存在一种类似的情况,即需要给出训练中并不存在的词的向量,这种情况区别于 padding,前者是它存在而我们不知道,padding 是它本身就不存在。
通常方案也是设定一个特殊符号用来表征这种情况。当时千万不要这种情况和 padding 共享一个特殊符号,毕竟代表的含义不用。

(3)Word dropout

上面提到的对 unknown 词设定一个特殊的嵌入向量还不够,因为 unknown 此并不会在训练过程出现,即配置给它的相关向量并不会被更新,那么训练出来的模型也就很好适应这种 unknown 词。这就相当于直接给测试时碰到的 unknown 词设置一个随机向量。
可行的方式即在训练过程中,以相对低的频次置换全部或部分特征为 unknown symbol。但也有问题,即由于一些稀有单词可能接收不到信号,导致损失部分训练数据。
更好的方式是采用 word-dropout,即抽取特征时,随机将某些词换为 unknown symbol。这种替换和词频有关,词频越低的越有可能被置换。

此外,word-dropout 通过不让模型过度依赖于某个词,对预防过拟合和提升强健性也有一定帮助。

(4)维度

并没有理论界或者最佳实践指导嵌入向量的最佳维度。通常只能实验。

猜你喜欢

转载自blog.csdn.net/lipengcn/article/details/79382646
今日推荐