文本特征构造
在前一章中,我们讨论了通用的学习问题,并且看到了一些适用于训练这些问题的机器学习模型和算法。这些模型都将x视为输入向量,之后进行预测。迄今为止,我们假设向量x是已知的。在语言处理中,向量x来源于文本数据,能够反映文本数据所具有的多种语言学特性。这种从文本数据到具体向量的映射称为特征提取和特征表示,通过特征方程所完成。决定正确的特征是使一个机器学习项目取得成功的一部分。深度神经网络减轻了对特征工程的需要,当然,核心特征还是要被定义的。尤其是对语言数据,其以一系列离散的符号形式存在。这个序列需要使用微妙的方法转换成为一个数值向量。
我们现在是脱离训练机制以讨论应用于语言数据的特征工程,这也将是后续章节的主题。
6.1 NLP分类问题中的拓扑结构
通常来说,自然语言中的分类能够被分为几个宽泛的方向,其依赖于被分类的事项,有些自然语言处理问题不能归为分类框架中,例如生成句子或文本的任务,即文本摘要和机器翻译。
词:在这些问题中,我们面对的都是词(word),例如 dog,magnificent,magnifficent,parlez,以及一些与它们有关的内容,比如这个词代表一个活物吗?这个词属于哪种语言?它是常见的吗?哪些词与它是相似的?是不是一个误拼?等等。这类问题非常稀少,因为词极少是无关出现的。对于很多词来说,它们的解释依赖于其出现的上下文。
文本:在这些问题中,我们面对的都是一段文本,这段文本可能是一个短语,一句话,一个段落或一篇文章。需要针对它们说点什么,例如这段文本是不是垃圾文本?描述的是政治还是体育?是否是反讽?是正面的、反面的还是中立的?是谁写的它?是真实地吗?这篇文本反映了什么情感?这篇文本16-18岁的男性会喜欢吗?等等。这类问题非常普遍,我们把它们称为文本分类问题。
成对文本:
在这些问题中,会给定一对词或文本,然后需要了解成对的信息。比如,A和B是同义词吗?A是B的一个有效的翻译吗?文本A和B是被同一个作者所写的吗?句子A的含义能否通过句子B所推理?
上下文中的词
这里,我们会遇到一段文本,其中包含一个特殊的词(短语、字符等)。在这段文本中,我们需要对文本上下文中的词进行分类。举例来说,词语book在句子 i want book a flight 中是名词、动词还是副词?词语apple在给定的上下文中到底是苹果还是公司?on在句子i read a book on London 中是正确的用法吗?一个给定的句号是一个句子的边界还是一个省略符?一个给定的词是一个人名、地名、组织的一部分吗?等等。这些问题经常出现于为其他重要目标服务的上下文中,例如标记一个句子中词语的词性,将一篇文本分割为句子,找到文本中所有的命名实体,找到所有提及同一实体的文本,等等。
词之间的关系
这里假设在一篇长文本中给定两个词或短语,然后需要对它们之间的关系进行陈述。例如,词语A是动词B的主语吗?是否A和B之间具有购买关系?等等。
许多这种分类样例能够被扩展为结构化问题,我们感兴趣的是执行相关的分类决策,以使得一个决策能够影响另一个决策。
什么是词?
我们对于术语“词”的使用非常随意。问题“什么是词?”是一个有关语言学的争论,其答案从未明确。
一个定义是(本书使用这个定义比较随意)词是被空白符分割的字符的序列,这个定义是非常浅显的。首先,英文中的标点符号不是被空白符分割,根据我们的定义,“dog”,“dog?”,"dog."是不同的词。正确的定义应该是被空白符和标点符号分割的文本。这个分割过程叫做分词,即以空格和标点符号为基准来分割文本为符号(这里就是我们所谓的词)。在英文中,分词的过程非常简单,尽管其没有考虑例如缩写I.B.M和Mr.这些不需要分割的例子。在其他语言中,会变得复杂一些;在希伯来语和阿拉伯语中,与下一个词相连的一些词并不以空格分割,在中文中就没有空格。
当工作于英文或一些相似的语言环境中(就像本书假设的),基于空格和标点符号的分词能够提供一个有效的词近似结果。然而,我们对词的定义是技术化的,是从文本的写作方式定义的。另外一个常用的(或比较好的)定义是将词看作“语义的最小单元”。根据这个定义,我们能够发现这种基于空白符的定义是有问题的。在通过空白符和标点符号分割后,还是遗留了一些序列,类似“don’t”,这些序列事实上是两个词“do not”被合并为一个符号。这种情况在对英文切分时是经常遇到的。符号"cat"和"Cat"拥有相同的含义,但是它们是一个词吗?更有趣的是,以“New York”为例,这时两个词还是一个词?那么“ice cream”呢?“ice-cream”和“icecream”是一样的吗?“kick the bucket”这种俚语呢?
通常来说,我们需要区分词(word)和符号串(token)。我们将分词器的输出称为“token”,将带有语义的单元称为word。一个符号串(token)可能会有多个词(word)组成,多个符号串也可能是一个词。一些不同的符号串可能是一个潜在的词。
需要指出的是,在本书中,词(word)这个术语的使用是非常随意的,并且认为它和字符串(token)是可以相互替换的。然而,我们要深刻地了解这种相互替换是非常复杂的。
6.2 NLP问题中的特征
接下来,我们描述可被应用于上述问题的一些通用特征。正如词和字符是分离的条目。我们的特征通常表现为标量和可数的形式。一个标量特征经常取0和1的值,其取决于某种条件是否出现(举例来说,当dog这个词至少出现一次于文本中,特征为1,否则为0).一个可数特征的取值取决于给定一个事件出现的频率(举例来说,以dog在文本中出现的次数作为特征值)。
6.2.1 直接可观测特征
单独词特征
当关注的是独立于上下文中的词时,我们的主要信息来源是组成词的字符和它们的次序,以及从中导出的属性,例如单词的长度,单词的字形(是否第一个字母是大写的?是否所有的字符都是大写的?是否单词包含一个连字符?是否包含数字?等等),以及词的前缀和后缀(是否起始于un?是否结尾于ing)。
我们或许也应该着眼于词和其他信息资源的联系:词在文本集合中出现了多少次?词是否出现于美国的常用名列表中?等等。
词元和词干
我们经常去查看词的词元(词典条目),将词语的不同形式(例如booking,booked,books)映射到它们的通用词元book。这种映射经常由词元集或者形态分析器完成,这种方法对多种语言都是适用的。词的词元是歧义的,当词出现在上下文中,其词元化能够变得更加准确。词元化是一个语言学定义过程,其对于不出现于词元集中的词或者拼写错误的词并不能很好地进行处理。一个比词元化更粗糙的过程就是词干提取(stemming),它能够在任何字符串序列上起作用。词干处理以特定语言的启发式规则将词序序列映射为更短的序列,以至于将不同的影响映射为相同的序列。值得注意的是,词干提取的结果不需要是一个有效的词,例如picture,pictures,pictured都会被词干化为pictur。应用不同的策略,多种多样的词干提取结果是存在的。
词典资源
一个额外的关于词的语义资源是词典资源。由很多人类不可读但是可被机器编程访问的词典。一个词典资源包含典型的词信息,并将它们和其他词语连接起来或者提供额外的信息。
举例来说,对于很多语言,有一些词典将曲折化的词形映射到它们可能的语法形态上(即,告诉我们一个词即可能是一个复数的阴性名词,也可能是一个过去动词)。这种词典同样包含词元信息。
一个非常著名的英文词典资源是WordNet。WordNet是一个非常大规模的人工构建的数据集,其尝试捕捉有关于词的概念语义知识,每个词均属于一个或多个同义词集(synset)。每一个同义词集描述一个概念。举例来说,词语star作为一个名词属于同义词集astronomical celestial body,someone who is dazzlingly skilled,anycelestial body visible from earth 和an actor who plays a principle role 。第二个有关star 的同义词集包含词语ace adept champion sensation maven virtuoso 。同义词集互相之间通过语义关系相连,即上位关系和下位关系(更具体地或欠具体地词语)。举例来说,对于star地第一个同义词集,应该包含sun和nova(下位词)及celestial body(上位词)。其他地在WordNet中地语义关系包含反义词和整体以及部分。WordNet 包含与名词,动词,形容词和副词有关地信息。
FrameNet和VerbNet也是人工构建地词典,这些词典重点围绕动词,列举了持有同一论元的动词(例如,giving的核心论元有donor(捐赠者),recipient(接收者),theme(被给予的东西)),以及非核心论元如time(时间),purpose(目的),place(地点)和manner(行为)。
Paraphrase Database是一个大型的自动构建的有关复述的数据集。其列举了词和短语,对每一个词或短语均提供了一系列词和短语,它们和原词和短语的含义基本相同。
上述这些词典包含了很多信息,能够称为特征的重要资源。然而,有效的使用符号信息是任务相关的,经常需要繁琐的工程和技巧去处理。它们目前不经常应用于神经网络模型中,但是今后可能会有所改变。
分布信息
另一个重要的有关词的资源就是分布——哪些词和当前词的行为是类似的?这些内容应该被特别阐述,它们将在6.2.5节予以讨论。在11.8节,我们讨论了怎样将词典作为知识结合到有神经网络算法得到的分布式词向量中。
文本特征
当我们考虑一个句子、一个段落或一篇文章时,观察到的特征是字符和词在文本中的数量和次序。
词袋
一个非常常用的从句子和文本中抽取特征的过程是词袋(bag-of-words)过程(BOW).在这种方法中,我们观察词在文档中出现的柱状图,即考虑每个词作为特征的数量。通过将词抽象为基本的元素(element),在2.3.1节使用bag-of-letter-bigrams用于语言鉴定,其即为一种应用BOW方法的例子。
我们也能够计算一些从词和字符中导出的数量,例如依据字符或词的数量得出的句子的长度。当考虑单独的词时,我们可以使用上述基于词的特征来计算那些特定前缀或后缀的词的数量,或计算短词语(长度短语给定的长度)相对于长词的比率。
权重
正如前文所述,我们也可以结合基于外部信息的统计结果,集中考虑那些在给定的文本中经常出现的词,并且它们在外部文本中出现的次数相对很少(这可将那些在文本中经常出现的常用词(例如a和for),与和文本主题相关的词区分开)。当使用BOW方法时,经常使用TF-IDF权重。考虑一篇文档d,其是语料库D的一部分。与将d中的每个词w表示为其归一化结果
第一部分是w/d(w),即词在文档中的频率,**第二部分是逆文档频率,包含某个词的文本在语料集中的个数的倒数。**这种方法加大了那些能够有效区分当前文本的词的重要性。(比如for,a在文档中虽然频率TF很高,但是IDF低,因为语料库中出现,文档中出现,这样相除值较小,说明区分度低)。
除了词之外,我们还可以查看连续词语的二元组和三元组。他们被称为n元组(ngrams)。n元组特征将在6.2.4节深入讨论。
上下文词特征
当考虑词在句子和文本中时,一个能够直接观测到的词的特征就是其在句子中的位置,围绕它的词和字符可作为特征。与目标词越近,该词所具有的信息量相对于远处的词越丰富。
窗口
基于上述词之间相互影响的原因,可以使用围绕词的窗口聚焦于词的直接上下文(即目标词每侧的k个词,k可设为2,5,10),之后使用特征来代表出现在窗口内的词(举例来说,一个特征即为“词X出现在目标词周围5个词的窗口内”)。例如,考虑句子"the brown fox jumped the lazy dog",其目标词是"jumped"。一个包含2个词的窗口将提供一个特征集合{word=brown,word=fox,word=over,word=the}。窗口方法是BOW方法的一个版本,但是其受限于小窗口。
固定大小的窗口放松了BOW假设,它不考虑词的次序,而是考虑词出现的窗口在文本中的相对位置。其产生了位置相关特征(relative-positional feature),例如“词X出现于目标词左侧的两个词语内”。举例来说,在上面的样例中,窗口位置方法将抽取特征集合{word-2=brown,word-1=fox,word+1=over,word+2=the}。
编码基于窗口的特征为向量,在14和16章中,我们将介绍biRNN架构,其通过泛化窗口特征提供一个灵活的、可调整的和可训练的窗口。
位置
除了词的上下文,我们可能还会对词在句子中的绝对位置感兴趣。我们能够获得类似于“目标词是句子中的第5个词”的特征,或者一个二进制的版本,能够指示粗粒度的类别信息:是否出现在前十个词中,或者是否在第10个词和第20个词之间,等等。
词关系特征
当考虑上下文中的两个词时,除了每个词的位置和围绕它们的词外,我们还能够观察词之间的距离和它们之间的代表词。
6.2.2 可推断的语言学特征
自然语言中的句子除了是词语的线性排序外还是有结构的。这种结构遵循复杂的不易于直接观察到的规律。这种规律被归为语法,在自然语言中针对这些规则和规律的学习被称为面向学习的语言学。然而,语言的精确结构仍然是一个谜题,并且很多更加精细的语言模板还没有被挖掘出,或者仍然存在着争论。部分控制语言的现象被很好地记录并被充分理解,这其中包括了例如词类(词性标签)、形态学、语法乃至部分语义信息。
文本的语言学特征并不能够从词在句子中或其顺序的外在变现直接观察到,它们能够以不同程度的准确率从文本句子中推断出来。存在专门的系统以不同的准确率来预测词性标签、语法树、语义角色、篇章关系和一些其他语言学属性。这些预测能够作为有效的特征用于更进一步的分类问题。
除了观察到的属性(字符、词、计数、长度、线性距离、频率)等。我们能够看到这种词、句子和文档的推断语言学属性。举例来说,我们可以查看词在文本中的词性标记(pos)时,或者句法角色,或者词的语义角色。当给定句子中的两个词,我们能够形成句子的句法依存树,子树或者用于连接两个词的在树中的路径以及路径中的属性。以分割两个词的词的数量作为距离度量的那些在句子中相距很远的词在句法结构中可能互相邻接。
从句子级更进一步的话,我们会想要知道篇章之间的关系,篇章关系用于揭示句间的关系,例如解释,相对,因果等。这些关系经常被句间的连接词所揭示。例如并且,然而,以及和,同时也会被不直接的线索揭示。
另外一个重要的现象是回指——考虑句子序列the boy opened the door with a key,it wasn’t locked and he entered the room.he saw a man.he was smailing。回指消解告诉我们it指的是door,he指的是boy,后边的He指的很可能是这个男人。
词性标注、句法角色、篇章关系、回指等概念都是基于语言学理论的。这些理论被语言学家研究了很长一段时间,其目标在于获取语言系统的规律和规则。
语言学概念是否需要?
一些深度学习的倡导者认为神经网络可以学习到这些中间表示的,但是,对于很多例子,我们不能获得足够的数据,通过提供更加明确的、清晰的概念将会非常有用。即使我们能够获得足够的数据,通过提供更加泛化的概念以及词语的表层信息,我们也想要网络去关注文本或线索的某个方面而忽略其他部分。
6.2.3 核心特征与组合特征
在很多情况下,我们所关心的是出现在一起的联合特征。举例来说,the word book appeared in a window和 the part-of-speech Verb appeared in a window,明显比the word book with the assigned part of speech Verb appeared in a window缺少信息量。
线性模型不能够为一个联邦事件赋予一个值,神经网络是非线性模型,并不会遇到这个问题。当使用神经网络时,模型设计者能够仅指定核心特征集合,然后依赖网络训练过程去选择重要的组合,这很大地简化了模型设计者的工作。
6.2.4 n元组特征
一个特殊的特征组合案例是N元组(ngram)——在给定的长度下由连续的词序列组成。二元组比单独的词富有更多的信息,其能够捕捉到结构,例如New York。事实上,bag-of-bigrams比bag-of-words更具有表达能力,在很多的案例上都是有效的。然而,很难获得哪一个n元组对某个任务是有效的这种先验知识。一个通用的解决方案是扩充n元组直到一个给定的长度,并且通过对不感兴趣的n元组赋予低权重让模型抛弃它们。
6.2.5 分布特征
至今为止,我们都认为词是离散的和不i相关的符号:当使用算法时,pizza,burger,chair互相之间是均等相似的,或均等不相似的。
语言的分布假设表达了词的含义能够从它的上下文推断出来。通过观察词在一段文本中出现的模式,能够发现burger出现的上下文和pizza出现的上下文是相似的,其和icecream出现的上下文相似度很小,和chair出现的上下文完全不相同。近年来利用这个特征,通过词出现的上下文去学习词的归一化。这种方法可以被归结为基于聚类的方法。词嵌入是另一种类似的方法,它将词表示为一个向量,相似的词具有相似的向量。