From 920980aab412c30048bcd2d81253bf662e87f04d Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Tue, 29 Dec 2020 16:55:49 +0800 Subject: [PATCH] 2020-12-29 16:55:49 --- 11.md | 2 +- 6.md | 54 +++++++++++++++++++++++++++--------------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/11.md b/11.md index fbbdee7..d2b7567 100644 --- a/11.md +++ b/11.md @@ -92,7 +92,7 @@ TIMIT 的第四个特点是语料库的层次结构。每个句子 4 个文件 大的标注任务需要多个标注者,由此产生一致性的问题。一组标注者如何能一致的处理呢?我们可以通过将一部分独立的原始材料由两个人分别标注,很容易地测量标注的一致性。这可以揭示指南中或标注任务的不同功能的不足。在对质量要求较高的情况下,整个语料库可以标注两次,由专家裁决不一致的地方。 -报告标注者之间对语料库达成的一致性被认为是最佳实践(如通过两次标注 10%的语料库)。这个分数作为一个有用的在此语料库上训练的所有自动化系统的期望性能的上限。 +报告标注者之间对语料库达成的一致性被认为是最佳实践(如通过两次标注 10% 的语料库)。这个分数作为一个有用的在此语料库上训练的所有自动化系统的期望性能的上限。 小心! diff --git a/6.md b/6.md index 03423de..ed7a04c 100644 --- a/6.md +++ b/6.md @@ -1,6 +1,6 @@ # 6\. 学习分类文本 -模式识别是自然语言处理的一个核心部分。以-ed 结尾的词往往是过去时态动词([5.](./ch05.html#chap-tag))。频繁使用 will 是新闻文本的暗示`(3)`。这些可观察到的模式——词的结构和词频——恰好与特定方面的含义关联,如时态和主题。但我们怎么知道从哪里开始寻找,形式的哪一方面关联含义的哪一方面? +模式识别是自然语言处理的一个核心部分。以`-ed`结尾的词往往是过去时态动词([5.](./ch05.html#chap-tag))。频繁使用`will`是新闻文本的暗示`(3)`。这些可观察到的模式——词的结构和词频——恰好与特定方面的含义关联,如时态和主题。但我们怎么知道从哪里开始寻找,形式的哪一方面关联含义的哪一方面? 本章的目的是要回答下列问题: @@ -16,7 +16,7 @@ * 判断一封电子邮件是否是垃圾邮件。 * 从一个固定的主题领域列表中,如“体育”、“技术”和“政治”,决定新闻报道的主题是什么。 -* 决定词 bank 给定的出现是用来指河的坡岸、一个金融机构、向一边倾斜的动作还是在金融机构里的存储行为。 +* 决定词`bank`给定的出现是用来指河的坡岸、一个金融机构、向一边倾斜的动作还是在金融机构里的存储行为。 基本的分类任务有许多有趣的变种。例如,在多类分类中,每个实例可以分配多个标签;在开放性分类中,标签集是事先没有定义的;在序列分类中,一个输入列表作为一个整体分类。 @@ -30,7 +30,7 @@ ## 1.1 性别鉴定 -在 4 中,我们看到,男性和女性的名字有一些鲜明的特点。以 a,e 和 i 结尾的很可能是女性,而以 k,o,r,s 和 t 结尾的很可能是男性。让我们建立一个分类器更精确地模拟这些差异。 +在 4 中,我们看到,男性和女性的名字有一些鲜明的特点。以`a, e, i`结尾的很可能是女性,而以`k, o, r, s`和`t`结尾的很可能是男性。让我们建立一个分类器更精确地模拟这些差异。 创建一个分类器的第一步是决定输入的什么样的特征是相关的,以及如何为那些特征编码。在这个例子中,我们一开始只是寻找一个给定的名称的最后一个字母。以下特征提取器函数建立一个字典,包含有关给定名称的相关信息: @@ -93,7 +93,7 @@ Most Informative Features last_letter = 'f' male : female = 17.3 : 1.0 ``` -此列表显示训练集中以 a 结尾的名字中女性是男性的 38 倍,而以 k 结尾名字中男性是女性的 31 倍。这些比率称为似然比,可以用于比较不同特征-结果关系。 +此列表显示训练集中以`a`结尾的名字中女性是男性的 38 倍,而以`k`结尾名字中男性是女性的 31 倍。这些比率称为似然比,可以用于比较不同特征-结果关系。 注意 @@ -189,7 +189,7 @@ correct=male guess=female name=Rich ... ``` -浏览这个错误列表,它明确指出一些多个字母的后缀可以指示名字性别。例如,yn 结尾的名字显示以女性为主,尽管事实上,n 结尾的名字往往是男性;以 ch 结尾的名字通常是男性,尽管以 h 结尾的名字倾向于是女性。因此,调整我们的特征提取器包括两个字母后缀的特征: +浏览这个错误列表,它明确指出一些多个字母的后缀可以指示名字性别。例如,`yn`结尾的名字显示以女性为主,尽管事实上,`n`结尾的名字往往是男性;以`ch`结尾的名字通常是男性,尽管以`h`结尾的名字倾向于是女性。因此,调整我们的特征提取器包括两个字母后缀的特征: ```py >>> def gender_features(word): @@ -325,11 +325,11 @@ if endswith(,) == False: if endswith(.) == False: return 'NN' ``` -在这里,我们可以看到分类器一开始检查一个词是否以逗号结尾——如果是,它会得到一个特别的标记`","`。接下来,分类器检查词是否以`"the"`尾,这种情况它几乎肯定是一个限定词。这个“后缀”被决策树早早使用是因为词"the"太常见。分类器继续检查词是否以"s"结尾。如果是,那么它极有可能得到动词标记`VBZ`(除非它是这个词"is",它有特殊标记`BEZ`),如果不是,那么它往往是名词(除非它是标点符号“.”)。实际的分类器包含这里显示的 if-then 语句下面进一步的嵌套,参数`depth=4`只显示决策树的顶端部分。 +在这里,我们可以看到分类器一开始检查一个词是否以逗号结尾——如果是,它会得到一个特别的标记`","`。接下来,分类器检查词是否以`"the"`尾,这种情况它几乎肯定是一个限定词。这个“后缀”被决策树早早使用是因为词`"the"`太常见。分类器继续检查词是否以`"s"`结尾。如果是,那么它极有可能得到动词标记`VBZ`(除非它是这个词`"is"`,它有特殊标记`BEZ`),如果不是,那么它往往是名词(除非它是标点符号“.”)。实际的分类器包含这里显示的`if-then`语句下面进一步的嵌套,参数`depth=4`只显示决策树的顶端部分。 ## 1.5 探索上下文语境 -通过增加特征提取函数,我们可以修改这个词性标注器来利用各种词内部的其他特征,例如词长、它所包含的音节数或者它的前缀。然而,只要特征提取器仅仅看着目标词,我们就没法添加依赖词出现的*上下文语境*特征。然而上下文语境特征往往提供关于正确标记的强大线索——例如,标注词"fly",如果知道它前面的词是“a”将使我们能够确定它是一个名词,而不是一个动词。 +通过增加特征提取函数,我们可以修改这个词性标注器来利用各种词内部的其他特征,例如词长、它所包含的音节数或者它的前缀。然而,只要特征提取器仅仅看着目标词,我们就没法添加依赖词出现的*上下文语境*特征。然而上下文语境特征往往提供关于正确标记的强大线索——例如,标注词`"fly"`,如果知道它前面的词是`a`将使我们能够确定它是一个名词,而不是一个动词。 为了采取基于词的上下文的特征,我们必须修改以前为我们的特征提取器定义的模式。不是只传递已标注的词,我们将传递整个(未标注的)句子,以及目标词的索引。1.6 演示了这种方法,使用依赖上下文的特征提取器定义一个词性标记分类器。 @@ -396,7 +396,7 @@ class ConsecutivePosTagger(nltk.TaggerI): ❷ 这种方法的一个缺点是我们的决定一旦做出无法更改。例如,如果我们决定将一个词标注为名词,但后来发现的证据表明应该是一个动词,就没有办法回去修复我们的错误。这个问题的一个解决方案是采取转型策略。转型联合分类的工作原理是为输入的标签创建一个初始值,然后反复提炼那个值,尝试修复相关输入之间的不一致。Brill 标注器,[(1)](./ch05.html#sec-transformation-based-tagging)中描述的,是这种策略的一个很好的例子。 -另一种方案是为词性标记所有可能的序列打分,选择总得分最高的序列。隐马尔可夫模型就采取这种方法。隐马尔可夫模型类似于连续分类器,它不光看输入也看已预测标记的历史。然而,不是简单地找出一个给定的词的单个最好的标签,而是为标记产生一个概率分布。然后将这些概率结合起来计算标记序列的概率得分,最高概率的标记序列会被选中。不幸的是,可能的标签序列的数量相当大。给定 30 个标签的标记集,有大约 600 万亿(30<sup>10</sup>)种方式来标记一个 10 个词的句子。为了避免单独考虑所有这些可能的序列,隐马尔可夫模型要求特征提取器只看最近的标记(或最近的 n 个标记,其中 n 是相当小的)。由于这种限制,它可以使用动态规划(4.7),有效地找出最有可能的标记序列。特别是,对每个连续的词索引 i,每个可能的当前及以前的标记都被计算得分。这种同样基础的方法被两个更先进的模型所采用,它们被称为最大熵马尔可夫模型和线性链条件随机场模型;但为标记序列打分用的是不同的算法。 +另一种方案是为词性标记所有可能的序列打分,选择总得分最高的序列。隐马尔可夫模型就采取这种方法。隐马尔可夫模型类似于连续分类器,它不光看输入也看已预测标记的历史。然而,不是简单地找出一个给定的词的单个最好的标签,而是为标记产生一个概率分布。然后将这些概率结合起来计算标记序列的概率得分,最高概率的标记序列会被选中。不幸的是,可能的标签序列的数量相当大。给定 30 个标签的标记集,有大约 600 万亿(`30^10`)种方式来标记一个 10 个词的句子。为了避免单独考虑所有这些可能的序列,隐马尔可夫模型要求特征提取器只看最近的标记(或最近的`n`个标记,其中`n`是相当小的)。由于这种限制,它可以使用动态规划(4.7),有效地找出最有可能的标记序列。特别是,对每个连续的词索引`i`,每个可能的当前及以前的标记都被计算得分。这种同样基础的方法被两个更先进的模型所采用,它们被称为最大熵马尔可夫模型和线性链条件随机场模型;但为标记序列打分用的是不同的算法。 ## 2 有监督分类的更多例子 @@ -464,7 +464,7 @@ def segment_sentences(words): 处理对话时,将对话看作说话者执行的*行为*是很有用的。对于表述行为的陈述句这种解释是最直白的,例如"I forgive you"或"I bet you can't climb that hill"。但是问候、问题、回答、断言和说明都可以被认为是基于语言的行为类型。识别对话中言语下的对话行为是理解谈话的重要的第一步。 -NPS 聊天语料库,在 1 中的展示过,包括超过 10,000 个来自即时消息会话的帖子。这些帖子都已经被贴上 15 种对话行为类型中的一种标签,例如“陈述”,“情感”,“yn 问题”和“Continuer”。因此,我们可以利用这些数据建立一个分类器,识别新的即时消息帖子的对话行为类型。第一步是提取基本的消息数据。我们将调用`xml_posts()`来得到一个数据结构,表示每个帖子的 XML 注释: +NPS 聊天语料库,在 1 中的展示过,包括超过 10,000 个来自即时消息会话的帖子。这些帖子都已经被贴上 15 种对话行为类型中的一种标签,例如“陈述”,“情感”,“是否问题”和“接续”。因此,我们可以利用这些数据建立一个分类器,识别新的即时消息帖子的对话行为类型。第一步是提取基本的消息数据。我们将调用`xml_posts()`来得到一个数据结构,表示每个帖子的 XML 注释: ```py >>> posts = nltk.corpus.nps_chat.xml_posts()[:10000] @@ -494,7 +494,7 @@ NPS 聊天语料库,在 1 中的展示过,包括超过 10,000 个来自即 ## 2.3 识别文字蕴含 -识别文字蕴含(RTE)是判断文本 *T* 的一个给定片段是否蕴含着另一个叫做“假设”的文本(已经在 5 讨论过)。迄今为止,已经有 4 个 RTE 挑战赛,在那里共享的开发和测试数据会提供给参赛队伍。这里是挑战赛 3 开发数据集中的文本/假设对的两个例子。标签 *True* 表示蕴含成立,*False* 表示蕴含不成立。 +识别文字蕴含(RTE)是判断文本`T`的一个给定片段是否蕴含着另一个叫做“假设”的文本(已经在 5 讨论过)。迄今为止,已经有 4 个 RTE 挑战赛,在那里共享的开发和测试数据会提供给参赛队伍。这里是挑战赛 3 开发数据集中的文本/假设对的两个例子。标签`True`表示蕴含成立,`False`表示蕴含不成立。 > Challenge 3, Pair 34 (True) > @@ -510,9 +510,9 @@ NPS 聊天语料库,在 1 中的展示过,包括超过 10,000 个来自即 应当强调,文字和假设之间的关系并不一定是逻辑蕴涵,而是一个人是否会得出结论:文本提供了合理的证据证明假设是真实的。 -我们可以把 RTE 当作一个分类任务,尝试为每一对预测 *True*/*False* 标签。虽然这项任务的成功做法似乎看上去涉及语法分析、语义和现实世界的知识的组合,RTE 的许多早期的尝试使用粗浅的分析基于文字和假设之间的在词级别的相似性取得了相当不错的结果。在理想情况下,我们希望如果有一个蕴涵那么假设所表示的所有信息也应该在文本中表示。相反,如果假设中有的资料文本中没有,那么就没有蕴涵。 +我们可以把 RTE 当作一个分类任务,尝试为每一对预测`True/False`标签。虽然这项任务的成功做法似乎看上去涉及语法分析、语义和现实世界的知识的组合,RTE 的许多早期的尝试使用粗浅的分析基于文字和假设之间的在词级别的相似性取得了相当不错的结果。在理想情况下,我们希望如果有一个蕴涵那么假设所表示的所有信息也应该在文本中表示。相反,如果假设中有的资料文本中没有,那么就没有蕴涵。 -在我们的 RTE 特征探测器(2.2)中,我们让词(即词类型)作为信息的代理,我们的特征计数词重叠的程度和假设中有而文本中没有的词的程度(由`hyp_extra()`方法获取)。不是所有的词都是同样重要的——命名实体,如人、组织和地方的名称,可能会更为重要,这促使我们分别为`word`s 和`ne`s(命名实体)提取不同的信息。此外,一些高频虚词作为“停用词”被过滤掉。 +在我们的 RTE 特征探测器(2.2)中,我们让词(即词类型)作为信息的代理,我们的特征计数词重叠的程度和假设中有而文本中没有的词的程度(由`hyp_extra()`方法获取)。不是所有的词都是同样重要的——命名实体,如人、组织和地方的名称,可能会更为重要,这促使我们分别为`words`和`nes`(命名实体)提取不同的信息。此外,一些高频虚词作为“停用词”被过滤掉。 ```py def rte_features(rtepair): @@ -594,7 +594,7 @@ Python 提供了一个良好的环境进行基本的文本处理和特征提取 ## 3.2 准确度 -用于评估一个分类最简单的度量是准确度,测量测试集上分类器正确标注的输入的比例。例如,一个名字性别分类器,在包含 80 个名字的测试集上预测正确的名字有 60 个,它有 60/80 = 75% 的准确度。`nltk.classify.accuracy()`函数会在给定的测试集上计算分类器模型的准确度: +用于评估一个分类最简单的度量是准确度,测量测试集上分类器正确标注的输入的比例。例如,一个名字性别分类器,在包含 80 个名字的测试集上预测正确的名字有 60 个,它有`60/80 = 75%`的准确度。`nltk.classify.accuracy()`函数会在给定的测试集上计算分类器模型的准确度: ```py >>> classifier = nltk.NaiveBayesClassifier.train(train_set) @@ -602,7 +602,7 @@ Python 提供了一个良好的环境进行基本的文本处理和特征提取 0.75 ``` -解释一个分类器的准确性得分,考虑测试集中单个类标签的频率是很重要的。例如,考虑一个决定词 bank 每次出现的正确的词意的分类器。如果我们在金融新闻文本上评估分类器,那么我们可能会发现,`金融机构`的意思 20 个里面出现了 19 次。在这种情况下,95% 的准确度也难以给人留下深刻印象,因为我们可以实现一个模型,它总是返回`金融机构`的意义。然而,如果我们在一个更加平衡的语料库上评估分类器,那里的最频繁的词意只占 40%,那么 95% 的准确度得分将是一个更加积极的结果。(在 2 测量标注一致性程度时也会有类似的问题。) +解释一个分类器的准确性得分,考虑测试集中单个类标签的频率是很重要的。例如,考虑一个决定词`bank`每次出现的正确的词意的分类器。如果我们在金融新闻文本上评估分类器,那么我们可能会发现,`金融机构`的意思 20 个里面出现了 19 次。在这种情况下,95% 的准确度也难以给人留下深刻印象,因为我们可以实现一个模型,它总是返回`金融机构`的意义。然而,如果我们在一个更加平衡的语料库上评估分类器,那里的最频繁的词意只占 40%,那么 95% 的准确度得分将是一个更加积极的结果。(在 2 测量标注一致性程度时也会有类似的问题。) ## 3.3 精确度和召回率 @@ -616,16 +616,16 @@ Python 提供了一个良好的环境进行基本的文本处理和特征提取 * 真阳性是相关项目中我们正确识别为相关的。 -* I 型错误)是不相关项目中我们错误识别为相关的。 -* II 型错误)是相关项目中我们错误识别为不相关的。 +* I 型错误:是不相关项目中我们错误识别为相关的。 +* II 型错误:是相关项目中我们错误识别为不相关的。 给定这四个数字,我们可以定义以下指标: -* F-度量值(或 F-Score),组合精确度和召回率为一个单独的得分,被定义为精确度和召回率的调和平均数(2 × *Precision* × *Recall*) / (*Precision* + *Recall*)。 +* F-度量值(或 F-Score),组合精确度和召回率为一个单独的得分,被定义为精确度和召回率的调和平均数`(2 × Precision × Recall) / (Precision + Recall)`。 ## 3.4 混淆矩阵 -当处理有 3 个或更多的标签的分类任务时,基于模型错误类型细分模型的错误是有信息量的。一个混淆矩阵是一个表,其中每个 cells [i,j]表示正确的标签 i 被预测为标签 j 的次数。因此,对角线项目(即 cells [|ii|](./ch06.html#id17))表示正确预测的标签,非对角线项目表示错误。在下面的例子中,我们为 4 中开发的一元标注器生成一个混淆矩阵: +当处理有 3 个或更多的标签的分类任务时,基于模型错误类型细分模型的错误是有信息量的。一个混淆矩阵是一个表,其中每个`cells[i,j]`表示正确的标签`i`被预测为标签`j`的次数。因此,对角线项目(即`cells[i, i]`)表示正确预测的标签,非对角线项目表示错误。在下面的例子中,我们为 4 中开发的一元标注器生成一个混淆矩阵: ```py >>> def tag_list(tagged_sents): @@ -654,7 +654,7 @@ NNS | 1.5% . . . . <3.2%> . . 0.0% | ``` -这个混淆矩阵显示常见的错误,包括`NN`替换为了`JJ`(1.6%的词),`NN`替换为了`NNS`(1.5%的词)。注意点(`.`)表示值为 0 的单元格,对角线项目——对应正确的分类——用尖括号标记。.. XXX explain use of "reference" in the legend above. +这个混淆矩阵显示常见的错误,包括`NN`替换为了`JJ`(1.6% 的词),`NN`替换为了`NNS`(1.5% 的词)。注意点(`.`)表示值为 0 的单元格,对角线项目——对应正确的分类——用尖括号标记。 ## 3.5 交叉验证 @@ -680,7 +680,7 @@ NNS | 1.5% . . . . <3.2%> . . 0.0% | ## 4.1 熵和信息增益 -正如之前提到的,有几种方法来为决策树桩确定最有信息量的特征。一种流行的替代方法,被称为信息增益,当我们用给定的特征分割输入值时,衡量它们变得更有序的程度。要衡量原始输入值集合如何无序,我们计算它们的标签的墒,如果输入值的标签非常不同,墒就高;如果输入值的标签都相同,墒就低。特别地,熵被定义为每个标签的概率乘以那个标签的 log 概率的总和: +正如之前提到的,有几种方法来为决策树桩确定最有信息量的特征。一种流行的替代方法,被称为信息增益,当我们用给定的特征分割输入值时,衡量它们变得更有序的程度。要衡量原始输入值集合如何无序,我们计算它们的标签的墒,如果输入值的标签非常不同,墒就高;如果输入值的标签都相同,墒就低。特别地,熵被定义为每个标签的概率乘以那个标签的对数概率的总和: ```py import math @@ -714,7 +714,7 @@ def entropy(labels): 图 5.1:使用朴素贝叶斯分类器为文档选择主题的程序的抽象图解。在训练语料中,大多数文档是有关汽车的,所以分类器从接近“汽车”的标签的点上开始。但它会考虑每个特征的影响。在这个例子中,输入文档中包含的词"dark",它是谋杀之谜的一个不太强的指标,也包含词"football",它是体育文档的一个有力指标。每个特征都作出了贡献之后,分类器检查哪个标签最接近,并将该标签分配给输入。 -个别特征对整体决策作出自己的贡献,通过“投票反对”那些不经常出现的特征的标签。特别是,每个标签的似然得分由于与输入值具有此特征的标签的概率相乘而减小。例如,如果词 run 在 12%的体育文档中出现,在 10%的谋杀之谜的文档中出现,在 2% 的汽车文档中出现,那么体育标签的似然得分将被乘以 0.12,谋杀之谜标签将被乘以 0.1,汽车标签将被乘以 0.02。整体效果是略高于体育标签的得分的谋杀之谜标签的得分会减少,而汽车标签相对于其他两个标签会显著减少。这个过程如 5.2 和 5.3 所示。 +个别特征对整体决策作出自己的贡献,通过“投票反对”那些不经常出现的特征的标签。特别是,每个标签的似然得分由于与输入值具有此特征的标签的概率相乘而减小。例如,如果词`run`在 12% 的体育文档中出现,在 10% 的谋杀之谜的文档中出现,在 2% 的汽车文档中出现,那么体育标签的似然得分将被乘以 0.12,谋杀之谜标签将被乘以 0.1,汽车标签将被乘以 0.02。整体效果是略高于体育标签的得分的谋杀之谜标签的得分会减少,而汽车标签相对于其他两个标签会显著减少。这个过程如 5.2 和 5.3 所示。 ![Images/naive_bayes_bargraph.png](Images/b502c97e1f935240559d38b397805b32.jpg) @@ -728,9 +728,9 @@ def entropy(labels): 图 5.3:一个贝叶斯网络图演示朴素贝叶斯分类器假定的生成过程。要生成一个标记的输入,模型先为输入选择标签,然后基于该标签生成每个输入的特征。对给定标签,每个特征被认为是完全独立于所有其他特征的。 -基于这个假设,我们可以计算表达式 P(label|features),给定一个特别的特征集一个输入具有特定标签的概率。要为一个新的输入选择标签,我们可以简单地选择使 P(l|features)最大的标签 l。 +基于这个假设,我们可以计算表达式`P(label|features)`,给定一个特别的特征集一个输入具有特定标签的概率。要为一个新的输入选择标签,我们可以简单地选择使`P(l|features)`最大的标签 l。 -一开始,我们注意到 P(label|features)等于具有特定标签*和*特定特征集的输入的概率除以具有特定特征集的输入的概率: +一开始,我们注意到`P(label|features)`等于具有特定标签*和*特定特征集的输入的概率除以具有特定特征集的输入的概率: ```py >>> from nltk.corpus import senseval @@ -745,9 +745,9 @@ def entropy(labels): * ☼ 选择一个本章所描述的分类任务,如名字性别检测、文档分类、词性标注或对话行为分类。使用相同的训练和测试数据,相同的特征提取器,建立该任务的三个分类器::决策树、朴素贝叶斯分类器和最大熵分类器。比较你所选任务上这三个分类器的准确性。你如何看待如果你使用了不同的特征提取器,你的结果可能会不同? - * ☼ 同义词 strong 和 powerful 的模式不同(尝试将它们与 chip 和 sales 结合)。哪些特征与这种区别有关?建立一个分类器,预测每个词何时该被使用。 + * ☼ 同义词`strong`和`powerful`的模式不同(尝试将它们与`chip`和`sales`结合)。哪些特征与这种区别有关?建立一个分类器,预测每个词何时该被使用。 - * ◑ 对话行为分类器为每个帖子分配标签,不考虑帖子的上下文背景。然而,对话行为是高度依赖上下文的,一些对话行序列可能比别的更相近。例如,ynQuestion 对话行为更容易被一个`yanswer`回答而不是以一个`问候`来回答。利用这一事实,建立一个连续的分类器,为对话行为加标签。一定要考虑哪些特征可能是有用的。参见 1.7 词性标记的连续分类器的代码,获得一些想法。 + * ◑ 对话行为分类器为每个帖子分配标签,不考虑帖子的上下文背景。然而,对话行为是高度依赖上下文的,一些对话行序列可能比别的更相近。例如,“是否问题”对话行为更容易被一个`yanswer`回答而不是以一个`问候`来回答。利用这一事实,建立一个连续的分类器,为对话行为加标签。一定要考虑哪些特征可能是有用的。参见 1.7 词性标记的连续分类器的代码,获得一些想法。 * ◑ 词特征在处理文本分类中是非常有用的,因为在一个文档中出现的词对于其语义内容是什么具有强烈的指示作用。然而,很多词很少出现,一些在文档中的最有信息量的词可能永远不会出现在我们的训练数据中。一种解决方法是使用一个词典,它描述了词之间的不同。使用 WordNet 词典,加强本章介绍的电影评论文档分类器,使用概括一个文档中出现的词的特征,使之更容易匹配在训练数据中发现的词。 @@ -773,9 +773,9 @@ def entropy(labels): ... if inst.attachment == 'N'] ``` - 使用此子语料库,建立一个分类器,尝试预测哪些介词是用来连接一对给定的名词。例如,给定的名词对"team"和"researchers",分类器应该预测出介词"of"。更多的使用 PP 附件语料库的信息,参阅`http://nltk.org/howto`上的语料库 HOWTO。 + 使用此子语料库,建立一个分类器,尝试预测哪些介词是用来连接一对给定的名词。例如,给定的名词对`team`和`researchers`,分类器应该预测出介词`of`。更多的使用 PP 附件语料库的信息,参阅`http://nltk.org/howto`上的语料库 HOWTO。 - * ★ 假设你想自动生成一个场景的散文描述,每个实体已经有了一个唯一描述此实体的词,例如 the jar,只是想决定在有关的各项目中是否使用 in 或 on,例如 the book is in the cupboard 对比 the book is on the shelf。通过查找语料数据探讨这个问题;编写需要的程序。 + * ★ 假设你想自动生成一个场景的散文描述,每个实体已经有了一个唯一描述此实体的词,例如`the jar`,只是想决定在有关的各项目中是否使用`in`或`on`,例如`the book is in the cupboard`对比`the book is on the shelf`。通过查找语料数据探讨这个问题;编写需要的程序。 ``` (13) -- GitLab