对于大多数自然语言处理任务,必须对要处理的文本进行分解、检查,并将结果存储或与规则和数据集交叉引用。这些任务允许程序员推导出文本中术语和单词的含义意图或仅出现频率

让我们发现用于处理文本的常用技术。结合机器学习,这些技术可帮助您有效地分析大量文本。然而,在将 ML 应用于这些任务之前,让我们先了解一下 NLP 专家遇到的问题。

NLP 常见的任务

有多种方法可以分析您正在处理的文本。您可以执行一些任务,通过这些任务,您可以评估对文本的理解并得出结论。您通常按顺序执行这些任务。

代币化

可能大多数 NLP 算法要做的第一件事就是将文本拆分为标记或单词。虽然这听起来很简单,但必须考虑标点符号以及不同语言的单词和句子分隔符可能会使其变得棘手。您可能必须使用各种方法来确定分界线。

NLP任务设计 nlp任务有哪些_NLP任务设计

对Pride and Prejudice中的句子进行标记。Jen Looper的信息图

嵌入

词嵌入是一种以数字方式转换文本数据的方法。嵌入以某种方式完成,以便具有相似含义的单词或一起使用的单词聚集在一起。

NLP任务设计 nlp任务有哪些_自然语言处理_02

“我对你的神经表示最崇高的敬意,他们是我的老朋友。” -傲慢与偏见中句子的词嵌入。Jen Looper的信息图

单击一个单词会显示相似单词的集群:“toy”与“disney”、“lego”、“playstation”和“console”集群。

解析和词性标注

每个被标记化的词都可以被标记为词性——名词、动词或形容词。该句子the quick red fox jumped over the lazy brown dog可能被 POS 标记为 fox = 名词,jumped = 动词。

NLP任务设计 nlp任务有哪些_自然语言处理_03

解析《傲慢与偏见》中的一句话。Jen Looper的信息图

解析是识别句子中哪些单词彼此相关——例如the quick red fox jumped,是一个与序列分开的形容词-名词-动词lazy brown dog序列。

单词和短语频率

在分析大量文本时,一个有用的过程是为每个感兴趣的单词或短语以及它出现的频率构建一个字典。该短语the quick red fox jumped over the lazy brown dog的词频为 2。

让我们看一个计算单词频率的示例文本。Rudyard Kipling 的诗 The Winners 包含以下诗句:


What the moral? Who rides may read.
When the night is thick and the tracks are blind
A friend at a pinch is a friend, indeed,
But a fool to wait for the laggard behind.
Down to Gehenna or up to the Throne,
He travels the fastest who travels alone.


由于短语频率可以根据需要不区分大小写或区分大小写,因此短语a friend的频率为 2,the频率为 6,travels为 2。

N-gram

一个文本可以被分成一组长度的单词、一个单词(unigram)、两个单词(bigrams)、三个单词(trigrams)或任意数量的单词(n-grams)。

例如the quick red fox jumped over the lazy brown dog,n-gram 得分为 2 会产生以下 n-gram:

  1. 快的
  2. 快红
  3. 红狐
  4. 狐狸跳了
  5. 跳过
  6. 超过
  7. 懒人
  8. 懒惰的棕色
  9. 棕色的狗

将其可视化为句子上的滑动框可能更容易。这里是 3 个单词的 n-gram,每个句子中的 n-gram 都是粗体:

  1. 敏捷的红狐跳过了懒惰的棕色狗
  2. 敏捷的红狐跳过了懒惰的棕色狗
  3. 敏捷的红狐跳过了懒惰的棕色狗
  4. 敏捷的红狐跳过了懒惰的棕色狗
  5. 敏捷的红狐跳过了懒惰的棕色狗
  6. 敏捷的红狐跳过了懒惰的棕色狗
  7. 敏捷的红狐跳过了懒惰的棕色
  8. 敏捷的红狐跳过了懒惰的棕色狗

NLP任务设计 nlp任务有哪些_机器学习_04

N-gram 值为 3:Jen Looper的信息图

名词短语提取

在大多数句子中,有一个名词是句子的主语或宾语。在英语中,它通常可以识别为前面有“a”或“an”或“the”。当试图理解句子的含义时,通过“提取名词短语”来识别句子的主语或宾语是 NLP 中的一项常见任务。

✅在句子“我无法确定奠定基础的时间,地点,外观或文字。太久了。我在中间,才知道我已经开始了。”,你能识别名词短语?

句子the quick red fox jumped over the lazy brown dog中有 2 个名词短语:quick red foxlazy brown dog

情绪分析

可以分析句子或文本的情绪,或者它的积极消极程度。情绪以极性客观性/主观性来衡量。极性的测量范围是 -1.0 到 1.0(负到正)和 0.0 到 1.0(从最客观到最主观)。

✅稍后您将了解到使用机器学习来确定情绪的方法有多种,但一种方法是列出由人类专家分类为正面或负面的单词和短语,然后将该模型应用于文本以计算极性分数。你能看出这在某些情况下是如何工作的,而在其他情况下则不太好?

拐点

变形使您能够取一个词并获得该词的单数或复数。

词形还原

引理是一组词的词根或词根,例如flyedfliesflying有一个动词fly的引理。

NLP 研究人员还可以使用一些有用的数据库,特别是:

词网

WordNet是一个包含许多不同语言中每个单词的单词、同义词、反义词和许多其他详细信息的数据库。在尝试构建翻译、拼写检查器或任何类型的语言工具时,它非常有用。

自然语言处理库

幸运的是,您不必自己构建所有这些技术,因为有优秀的 Python 库可供非自然语言处理或机器学习方面的开发人员使用它。下一课包含更多此类示例,但在这里您将学习一些有用的示例来帮助您完成下一个任务。

练习 - 使用TextBlob

让我们使用一个名为 TextBlob 的库,因为它包含用于处理这些类型任务的有用 API。TextBlob “站在NLTKpattern的巨大肩膀上,并且可以很好地与两者配合使用。” 它的 API 中嵌入了大量的机器学习。

注意:为有经验的 Python 开发人员推荐的 TextBlob 提供了有用的快速入门指南

在尝试识别名词短语时,TextBlob 提供了多种提取器选项来查找名词短语。

  1. 看看ConllExtractor
from textblob import TextBlob
from textblob.np_extractors import ConllExtractor
# import and create a Conll extractor to use later 
extractor = ConllExtractor()

# later when you need a noun phrase extractor:
user_input = input("> ")
user_input_blob = TextBlob(user_input, np_extractor=extractor)  # note non-default extractor specified
np = user_input_blob.noun_phrases

这里发生了什么?ConllExtractor是“一个名词短语提取器,它使用通过 ConLL-2000 训练语料库训练的块解析。” ConLL-2000 是指 2000 年计算自然语言学习会议。每年,该会议都会举办一次研讨会来解决棘手的 NLP 问题,而在 2000 年,它是名词组块。在华尔街日报上训练了一个模型,“第 15-18 节作为训练数据(211727 个令牌),第 20 节作为测试数据(47377 个令牌)”。您可以查看此处使用的程序和结果

挑战 - 使用 NLP 改进您的机器人

在上一课中,您构建了一个非常简单的问答机器人。现在,您将通过分析您的情绪输入并打印出与情绪相匹配的响应来让 Marvin 更有同情心。您还需要识别noun_phrase并询问它。

构建更好的对话机器人时的步骤:

  1. 打印指导用户如何与机器人交互的说明
  2. 开始循环
  1. 接受用户输入
  2. 如果用户要求退出,则退出
  3. 处理用户输入并确定适当的情绪响应
  4. 如果在情绪中检测到名词短语,请将其复数并要求对该主题的更多输入
  5. 打印响应
  1. 循环回到步骤 2

这是使用 TextBlob 确定情绪的代码片段。请注意,情绪响应只有四个梯度(如果您愿意,可以有更多):


if user_input_blob.polarity <= -0.5:
  response = "Oh dear, that sounds bad. "
elif user_input_blob.polarity <= 0:
  response = "Hmm, that's not great. "
elif user_input_blob.polarity <= 0.5:
  response = "Well, that sounds positive. "
elif user_input_blob.polarity <= 1:
  response = "Wow, that sounds great. "


以下是一些指导您的示例输出(用户输入以 > 开头):


Hello, I am Marvin, the friendly robot.
You can end this conversation at any time by typing 'bye'
After typing each answer, press 'enter'
How are you today?
> I am ok
Well, that sounds positive. Can you tell me more?
> I went for a walk and saw a lovely cat
Well, that sounds positive. Can you tell me more about lovely cats?
> cats are the best. But I also have a cool dog
Wow, that sounds great. Can you tell me more about cool dogs?
> I have an old hounddog but he is sick
Hmm, that's not great. Can you tell me more about old hounddogs?
> bye
It was nice talking to you, goodbye!


该任务的一种可能解决方案是here

✅知识检查

  1. 你认为同情的反应会“欺骗”某人认为机器人真的理解他们吗?
  2. 识别名词短语是否会使机器人更“可信”?
  3. 为什么从句子中提取“名词短语”会很有用?