购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 Transformer应用概览

本节所讲述的每个NLP任务都以如下一段文本开头(以客户对其订单的反馈为例):

对于你的应用程序,以上文本可能会是法律手册、产品描述或完全不同的内容。在这个客户反馈的例子中,你可能想知道反馈是正面的还是负面的。这类任务称为情感分析,是我们将在第2章探讨的文本分类这一更广泛主题的一部分。这里我们只看看使用Hugging Face Transformers库从我们的文本中提取情感需要做什么。

1.5.1 文本分类

正如我们将在后面章节所看到的,Hugging FaceTransformers库具有各种API,从而使你可以在各种抽象级别与库进行交互。在本章中,我们将从 pipeline 开始,pipeline把将原始文本转换为微调模型的一组预测所需的所有步骤都抽象出来。

我们可以通过调用Hugging Face Transformers库的pipeline()函数并提供我们感兴趣的任务名称来实例化pipeline:

当第一次运行以上代码时,你会看到一些进度条,因为pipeline会自动从Hugging Face Hub( https://oreil.ly/zLK11 )下载模型权重。当第二次实例化pipeline时,库会注意到你已经下载了预训练模型(缓存),然后将改用缓存的版本。默认情况下,text-classification pipeline将使用专为情感分析而设计的模型,但它也支持多类和多标注分类。

现在我们有了pipeline,可以生成一些预测了!pipeline将文本字符串(或字符串列表)作为输入,然后返回预测列表。每个预测结果都是一个Python字典,因此我们可以使用Pandas将其很好地显示为DataFrame:

本例的预测结果是模型非常确信输入文本具有负面情感,鉴于我们所处理的是一单愤怒的客户投诉,这个预测结果是吻合的!请注意,对于情感分析任务,pipeline仅返回其中一个POSITIVE或NEGATIVE标注,因为另一个可以通过计算1-score来推断。

接下来我们讲述另一个常见任务,在文本中标识命名实体。

1.5.2 命名实体识别

现在我们能够预测客户反馈的情感,但你经常还想知道反馈是否与特定项目或服务有关。在NLP中,产品、地点和人等现实世界的对象称为命名实体,从文本中提取它们称为命名实体识别(NER)。我们可以通过加载以下pipeline并将我们的客户评论提供给它来应用NER:

你可以看到pipeline检测出所有实体,并且还为每个实体分配了一个类别,例如ORG(组织)、LOC(位置)或PER(人)。在这里,我们使用aggregation strategy参数根据模型的预测对单词进行分组。例如,实体“Optimus Prime”由两个单词组成,但被分配到一个类别:MISC(杂项)。score列告诉我们模型对其识别的实体的信心(概率)。我们可以看到,它对“Decepticons”和第一个“Megatron”最没有信心(概率最低),两者都未能作为一个实体分在同一组。

看到上表word列中那些奇怪的哈希符号(#)了吗?这些符号是模型的词元分析器生成的,词元分析器将单词划分成称为词元的原子单元。我们将在第2章讲述词元分析器的详细信息。

现在我们已经把文本中的所有命名实体提取出来了,但有时我们想问更有针对性的问题。于是我们就需要问答pipeline。

1.5.3 问答

我们通过下面的 context 参数把问答的上下文(即本节开头提到的文本)提供给模型,通过question参数把问题提供给模型。模型将返回回答。现在我们看看当询问客户反馈的相关问题时,会得到什么回答:

我们可以看到,除了回答之外,pipeline还返回回答在上下文中的位置,即start和end(就像NER标注一样)。我们将在第7章研究好几种类型的问答,但本节这种特殊的类型称为提取式问答,因为答案是直接从文本提取出来的。

通过这种方法,你可以通过提问题从客户的反馈中快速得到相关信息。但是,如果你收到堆积如山的冗长投诉而你没有时间阅读所有内容,那该怎么办?我们看看文本摘要是否有帮助!

1.5.4 文本摘要

文本摘要的目标是输入一段长文本,然后生成包含所有相关事实的简短版本。这是一项比前面所讲任务复杂得多的任务,因为它需要模型生成连贯的文本。我们通过以下熟悉的模式实例化文本摘要pipeline:

得出的摘要还不错!尽管其只是简单地复制粘贴部分原始文本,但该模型能够捕捉到问题的根源,并正确识别“Bumblebee”(出现在输入文本的末尾)是投诉者。在以上代码中,你还可以看到我们将一些关键字参数(如max_length和clean_up_tokenization_spaces)传给pipeline。我们可以通过这些参数调整输出。

但是,当你收到用你不懂的语言提供的反馈时,该怎么办?你可以使用Google翻译,或者你可以使用你自己的Transformer模型来翻译它!

1.5.5 翻译

与摘要类似,翻译也是一项文本生成任务。接下来我们使用翻译pipeline将英语文本翻译成德语:

我们看到,模型同样生成了一个非常好的翻译,正确使用了德语的代词,如“Ihrem”和“Sie”。在以上示例代码中,我们还展示了如何通过model参数指定模型来替换默认模型,从而可以为你的应用程序选择最佳模型,你可以在Hugging Face Hub上找到数千种语言对模型。接下来我们看看最后一个应用,然后再开始介绍Hugging Face生态系统。

1.5.6 文本生成

假设你希望通过自动完成功能来撰写答复,从而更快地回复客户。你可以按如下方式使用text-generation pipeline:

上面生成的内容并不好,我们也许不想用它来答复客户Bumblebee,但你应该明白了大致的用法。

现在我们已经讲述了Transformer模型一些很酷的应用,你可能想知道训练在哪里进行。我们在本章使用的所有模型都是公开可用的,并且已经针对以上任务微调过了。一般来说,无论如何,你都会想根据自己的数据微调模型,在后面的章节中,你将学习如何做到这一点。

但是,训练模型只是任何NLP项目的一小部分——能够有效地处理数据、与同事共享结果,以及使你的工作可重复也是项目的关键组成部分。幸运的是,围绕着Hugging Face Transformers库有一个由一整套工具组成的大型生态系统,从而可以支持大部分现代机器学习工作流程。我们一起看看这个生态系统吧。 wCheAMne6TQa+oiz6vEUrqcgLxI6KZO21gd1mvuypRCuqeoMOIPzsgWBP4Jr5Cel

点击中间区域
呼出菜单
上一章
目录
下一章
×