欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

程序员文章站 2022-05-19 17:07:50
...

零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

写在前面

昨天Cortex v0.12开源了,以前笔者做过一段独立的iOS开发者,相对于平时的研究,也对ML如何构建web api服务有所兴趣。这种既能构建软件服务也适合入门的NLP学习内容,特别想分享推荐。

原作者Caleb Kaiser: A list of beginner-friendly NLP projects—using pre-trained models

本文读者可以通过机器学习构建软件,无需读者有数学基础也不用了解反向传播等知识。

读者可以通过此文零基础学习并部署以下模型:

  • RoBERTa(文本自动补全)
  • DialoGPT或ELMo-BiDAF(客服机器人)
  • GPT-2(预测文本生成器)
  • fastText(语言标识符识别)
  • SequenceTagger(媒体监控器)

欢迎置顶关注本公众号:AISphere

正文

如果您有兴趣从入门开始研究机器学习,那么社区里有很多很棒的资源。诸如fast.ai之类的组织都做到了这一点,以方便任何具有模糊技术背景的人都可以学习机器学习的基础并训练自己的模型。

但如果您对使用机器学习来构建生产软件感兴趣,那么可用的资源就很少了,因为把机器学习应用到生产中的基础设施挑战根本就没有那么丰富的写作内容资料。

本文设计了一个基于NLP(自然语言处理)构建软件项目的目录,并且任何人(甚至没有ML经验)都可以构建该目录。

这些不是玩具(toys)项目,每一个项目都受到当今真实公司真实软件的启发。

开始之前的注意事项

以下每个项目将使用类似的体系结构:

  • 您将实现一个相关的预训练模型。
  • 您将部署模型为API。
  • 您将把API连接到主应用程序。

这种设计模式称为实时推断(realtime inference)。这种方法有很多好处。

首先,它减轻了主应用程序的计算负担,将其转移到专门为服务ML模型而构建的服务器上。其次,它允许您通过API去合并ML的预测,这是大多数软件开发人员都会熟悉的模式。最后,还有诸如Cortex之类的开源工具,这些工具将使我们能够自动完成将这些模型部署为API所需的所有基础架构工作,这意味着您无需花费大量时间来弄清楚如何配置AWS以服务于机器学习模型。

要在Cortex上部署任何模型,如您在本文链接的示例中所看到的,您需要做三件事:

  • 编写Python脚本来提供模型预测。
  • 编写一个配置文件来定义您的部署。
  • 从命令行运行cortex deploy

您可以在此gif中看到以上所有内容:零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

一切搞定,开始吧。

项目1:文本自动补全

传统方法的自动补全是使用key-value查找实现的,其中将用户输入的不完整单词与字典进行比较,然后建议可能的单词。

然而使用机器学习,自动补全可以更进一步。与引用静态的单词或短语词典不同,模型可以根据真实世界的用户输入进行训练,以预测最有可能出现的下一个短语。

Gmail的“智能回复”就是一个常见的例子,它建议您对收到的电子邮件进行回复:

零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

让我们看看如何构建自己基于机器学习驱动的自动补全版本。

我应该使用什么模型?

在这种情况下,我们将要使用RoBERTa。

RoBERTa是在Facebook开发的NLP模型。它是基于Google著名的BERT(因此在RoBERTa中使用了奇怪的大写字母)而构建的,并且通过使用稍有差异的训练方法来改善了BERT的表现。有关更多信息,您可以查看这篇文章。

通过PyTorch Hub加载的有预训练过的RoBERTa,其带有一个内置fill_mask()方法允许您传递字符串指向RoBERTa应该预测的下一个单词或短语的位置(“mask”由“fill_mask”指定),然后再接收您的预测。

现在,您只需要将RoBERTa部署为一个API,并在前端编写一个函数,用用户的输入查询您的模型。

如果遇到任何麻烦,可以使用此Cortex示例部署RoBERTa: Cortex部署RoBERTa

项目2:客服机器人

客服机器人不是一个新的概念,多年来,网站上的机器人已经使用了罐头响应(canned responses,即基于规则的快捷回复),但随着机器学习,整个领域都向前迈进了一步。

在过去,一个客服机器人可能已经预先编写了一些问题的答案。如果这个问题的措词没有被机器人识别,或者它触及了一个主题之外或比预写的内容更微妙,机器人就不会工作。

但是现在,由ML驱动的机器人可以解析和理解用户输入,而不仅仅是将其与问题列表进行比较,并且可以自行生成答案。

像Reply.ai这样的公司(为公司构建自定义客服机器人)就是这种发展的典型例子。根据Reply.ai的数据,普通公司可以通过ML驱动的机器人来处理其40%的请求,例如以下示例机器人:
零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

现在,让我们构建自己的客服机器人。

我应该使用什么模型?

DialoGPT非常适合此任务。

DialoGPT是微软构建的一个模型,由Hugging Face的pytorch transformer和OpenAI的GPT-2开发而成。该模型接受了Reddit对话语料的训练,并将返回所查询文本的答案。

然而,因为微软保留了这个模型的解码器(对 Reddit训练的模型的潜在输出有所担心),所以你必须实现你自己的GPT-2解码器来将模型的响应翻译成人类语言。幸运的是,这对您来说并不太困难,您可以通过克隆此repo运行DialoGPT的整个部署

部署DialoGPT API后,您可以将其连接到前端并开始处理客户请求。

温馨提示:如果您在DialoGPT方面遇到问题,我还写了另一篇教程: 使用另一种模型ELMo-BiDAF构建聊天机器人

项目3: 预测文本生成器

如果您对机器学习社区有一个模糊的了解,您可能听说过AI Dungeon2。这款非常受欢迎的游戏最初被关闭,因为它的云托管成本超过10000美元/天,是一款经典的文本冒险游戏,只是故事完全由GPT-2生成。这让你可以做任何事情,比如Eat the moon:

> Eat the moon

You fly over to the moon and eat it. You feel very full afterwards.

零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

AI Dungeon 2是使用OpenAI的GPT-2构建的,尽管交互式RPG可能不是您要寻找的业务案例,但AI Dungeon 2展示了令人折服的自动生成文本。

自动生成文本对业务影响的一个很好的例子是Deep TabNine。Deep TabNine是一种产品,它使用机器学习在IDE中针对多种编程语言实现自动补全功能:

零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

如果您是软件工程师,那么使用ML立即生成准确、完整的代码行的想法一定很激动。

让我们看看如何构建自己的版本。

我应该使用什么模型?

对于这个项目,您应该使用庞然大物本身,即OpenAI的GPT-2

GPT-2首次发布时,其原因有很多。

  • 首先,它非常强大。
  • 第二,OpenAI团队避免发布完整的预训练模型,因为它可能会被滥用。

可以预见的是,这引发了一场针对潜在的“对公众来说太危险”的AI的媒体风暴。

快进到现在,完整的模型已经发布,没有世界毁灭的报道。

与实现的模型进行交互非常简单。向其发送一段文本,并观察其生成。

可以使用此仓库将GPT-2与Cortex一起部署

项目4:语言标识符

功能:给定文本,确定其是用的哪种语言。

您是否曾浏览Google Chrome浏览器时看到此弹出窗口?
零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

你有没有想过Chrome如何识别页面的语言?答案很简单。它使用语言标识符。

语言识别是出了名的棘手。不同的语言有许多共同的词汇,不同的方言和俚语使语言更难被发现,而且没有法律禁止在一个网页上使用多种语言(例如,一篇以法语引用为特色的英文文章)

这个模糊的任务是确定一个给定的文本体是用哪种语言写的,这对于机器学习来说是完美的。让我们看看如何构建自己的语言标识符。

我应该使用什么模型?

Facebook的fastText

fastText是一个使用word embeddings来理解语言的模型。在我关于将fastText部署为API的教程中,我从high-level的角度解释了为何fastText如此特殊:

word embeddings将单词表示为浮点数的n维向量,其中每个数字表示单词含义的一个维度。使用word embeddings,你可以根据单词的语义来“映射”单词——例如,如果你从“king”的向量中减去“man”的向量,再加上“woman”,你将得到大约“queen”的向量。换句话说,king-man+woman=queen
word2vec是最早流行的生成word embeddings的工具之一,fastText是word2vec的扩展。word2vec处理单个单词,而fastText将单词分解为n个单词,这使得fastText能够更好地理解晦涩难懂的单词。当给出一个罕见的单词如“deminiquavers”时,fastText会分析其中较小的n个字母(“demi”、“semi”等),以帮助找到它的语义,类似于你如何分析熟悉的词根来理解一个陌生的单词。

您可以使用此存储库部署fastText,非常简单。并且如果需要其他帮助,可以按照本教程进行操作。

项目5: 媒体监控器

当代企业的现实情况是,如果你的用户对你的产品有意见,他们有大量的平台来分享。为了有效地保持品牌的领先地位,监控社交媒体以了解公司的情况是必要的。

这种产品的一个例子是Keyhole,这是一个社交分析平台,它使用机器学习来监视与您的公司相关的社交媒体:
零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

但是,构建这种工具的最大挑战之一就是弄清楚用户说了什么词才是公司品牌的真正构成。

假设你想为你的品牌建立一个监控Hacker News(一家关于计算机黑客和创业公司的社会化新闻网站)的服务。每天刮取HN评论非常简单,而且在这些评论中搜索与您的品牌相关的字词也很容易。但是,这是症结所在,您如何确定这些关键字是否与您的品牌相关联而被使用?

例如,如果我在监控大脑皮层,我怎么知道“皮层”这个词在给出的评论中是指的开源平台,而不是一个人大脑的前额叶皮层?

这就是机器学习的由来。

我应该使用什么模型?

Flair的SequenceTagger

Flair是一个基于PyTorch的开源NLP库。Flair在许多领域都表现出色,尤其是在命名实体识别(NER)方面,这正是我们要解决的问题。

例如,以下内容直接来自Flair的仓库:

零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

您可以使用Cortex的Predictor API在Cortex上实现Flair ,这是迄今为止我们用于部署所有PyTorch模型的方法。

您不需要博士学位即可使用机器学习

围绕机器学习通常有一种看法,即仅适用于具有牛逼数学或理论CS背景的人。

如果您想开发新的模型架构或突破机器学习的界限,那可能是对的,您需要在理论上理解机器学习。但是如果您只是想通过机器学习来构建软件,则这种障碍是虚构的。

即使您仅对软件开发有基本的了解,但上面列出的每个项目都可以构建,并且它们都模仿真实,成功的产品的功能-它们不是玩具项目。

如果您构建了以上任何一种,请在评论中让我知道,如果您对将模型作为API部署有任何疑问,请随时在Cortex Gitter中询问他们。

结语

本文Caleb Kaiser列举了五个入门的NLP项目,其实目前又新增了情感分析、文本生成、摘要总结、目标检测等项目,有兴趣的读者可以了解了解:
零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

加入圈子

零基础如何构建部署NLP软件?基于预训练模型的NLP入门软件项目

相关标签: AI圈