作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
马克西米利安·霍普夫的头像

马克西米利安霍普夫

Max是一名数据科学和机器学习专家. 他帮助建立了德国资金最雄厚的金融科技公司之一.

专业知识

以前在

波士顿咨询集团(BCG)
分享

自然语言处理(NLP), 哪个是机器学习和语言学的结合, 已经成为?领域中研究最多的课题之一 人工智能. 在过去几年里, 已经达到了许多新的里程碑, 最新的是OpenAI的GPT-2模型, 谁能生产 从短输入的任何主题的现实和连贯的文章.

这种兴趣是由近年来推向市场的许多商业应用驱动的. 我们和我们的家庭助理交谈,他们使用NLP来转录音频数据,并理解我们的问题和命令. 越来越多的公司将客户沟通的大部分工作转移到自动化聊天机器人上. 在线市场用它来识别虚假评论, 媒体公司依靠NLP来撰写新闻文章, 招聘公司将简历与职位相匹配, 社交媒体巨头会自动过滤仇恨内容, 律师事务所使用NLP来分析合同.

为这类任务训练和部署机器学习模型一直是一项艰巨的任务 复杂的过程在过去这需要一个专家团队和昂贵的基础设施. 但对这类应用的高需求促使大型计算机提供商开发与nlp相关的服务, 这将大大减少工作量和基础设施成本. 平均 云服务成本 已经下降了好几年,这种趋势预计还会继续下去吗.

我将在本文中介绍的产品是Google云服务的一部分,它们被称为“Google自然语言API”和“Google AutoML自然语言”.”

谷歌自然语言API

Google自然语言API是一个易于使用的接口,它连接了一组功能强大的NLP模型,这些模型已被Google预先训练以执行各种任务. 因为这些模型是在非常大的文档语料库上训练的, 只要在不使用特殊语言的数据集上使用,它们的性能通常是相当不错的.

通过API使用这些预训练模型的最大优点是, 不需要训练数据集. 该API允许用户立即开始进行预测, 在可用的标记数据很少的情况下,哪些是非常有价值的.

自然语言API包括五个不同的服务:

  • 语法分析
  • 情绪分析
  • 实体分析
  • 实体情感分析
  • 文本分类

语法分析

对于给定的文本, Google的语法分析将返回所有单词的细分,并为每个标记提供丰富的语言信息集. 该信息可分为两部分:

词性: 这一部分包含每个令牌的形态信息. 对于每个单词,将返回包含其类型(名词、动词等)的细粒度分析.)、性别、语法格、时态、语法语气、语法语态等等.

例如,对于输入句子 “电脑曾经在国际象棋上赢过我,但在跆拳道上却不是我的对手.” (Emo Philips)的词性分析是:

A标签:依据
“计算机”标签:名词 数量:单数
“一次”标签:阿
“击败”标签:动词 情绪:指示性 时态:过去
'me'标签:吃 例:宾格 数量:单数 人:第一
at标签:ADP
“国际象棋”标签:名词 数量:单数
','标签:PUNCT
“但是”标签:连词
'it'标签:吃 例:主格 性别:中性 数量:单数 第三人:
“是”标签:动词 情绪:指示性 数量:单数 第三人: 时态:过去
'no'标签:依据
“匹配”标签:名词 数量:单数
“对”标签:ADP
“踢”标签:名词 数量:单数
“拳击”标签:名词 数量:单数
'.'标签:PUNCT

依赖树: 返回的第二部分称为依赖树, 哪个描述了每个句子的句法结构. 下面这张肯尼迪名言的图表展示了这样一个依赖树. 对于每个单词,箭头表示它修改了哪些单词.

依赖树的例子

常用的Python库 nltk宽大的 包含相似的功能. 在所有三个选项中,分析的质量始终很高, 但谷歌自然语言API更容易使用. 上面的分析可以用很少的代码行来完成(参见下面的示例)。. 然而, 而space和nltk是开源的,因此是免费的, 在一定数量的免费请求之后,使用Google自然语言API需要付费(参见费用部分)。.

除英语外,句法分析还支持另外十种语言: 中文(简体), 中文(繁体), 法国, 德国, 意大利, 日本, 朝鲜文。, 葡萄牙语, 俄罗斯, 和西班牙语.

情绪分析

语法分析服务主要用于管道的早期创建功能,这些功能后来被馈送到机器学习模型中. 相反,情感分析服务可以直接使用.

谷歌的情感分析将在提供的文本中提供流行的情感观点. API返回两个值:“分数”描述文本的情感倾向,从-1(负)到+1(正), 0是中性的.

“量级”衡量的是情绪的强度.

让我们来看一些例子:

输入句子情绪的结果解释
去伦敦的火车四点钟开得分:0.0 级:0.0 一个完全中立的陈述,不包含任何情绪.
这篇博文很好.得分:0.7 级:0.7一种积极的情绪,但表达得不是很强烈.
这篇博文很好. 这很有帮助. 作者很了不起.得分:0.7 级:2.3 同样的情绪,但表达得更强烈.
这篇博文很好. 这位作者通常是一个糟糕的作家,但在这里他很幸运.得分:0.0 级:1.6 这幅巨幅向我们表明,这篇文章中表达了情感, 但人们的看法是喜忧参半,不清楚是正面还是负面.

谷歌的情感分析模型是在一个非常大的数据集上训练的. 不幸的是,没有关于它的详细结构的信息. 我很好奇它的实际性能,所以我测试了它的一部分 大型电影评论数据集它是由斯坦福大学的科学家于2011年创建的.

我从测试集中随机选择了500条正面和500条负面的电影评论,并将预测的情绪与实际的评论标签进行比较. 混淆矩阵是这样的:

积极的情绪负面情绪
很好的复习47030
差评29471

如表所示,该模型对电影好评和差评的正确率约为94%. 对于没有对给定问题进行任何调优的开箱即用解决方案来说,这是一个不错的性能.

注意: 除俄语外,情感分析可用于与语法分析相同的语言.

实体分析

实体分析是从给定文本中检测已知实体(如公众人物或地标)的过程. 实体检测对于各种分类和主题建模任务非常有帮助.

Google自然语言API提供了关于每个检测到的实体的一些基本信息,如果存在的话,甚至还提供了相应的维基百科文章的链接. 此外,还会计算显著性分数. 实体的这个分数提供了关于该实体对整个文档文本的重要性或中心性的信息. 接近0的分数不那么显著,而接近1的分数则不那么显著.0是非常显著的.

当我们用下面的例句向API发送请求时: 2011年12月的圣诞夜,罗伯特·德尼罗在好莱坞对马丁·斯科塞斯说.” 我们得到以下结果:

检测到实体额外的信息
罗伯特·德尼罗 类型:PERSON 显著性:0.5869118 Wikipedia_url: http://en.维基百科.org/wiki/Robert_De_Niro
好莱坞类型:LOCATION 显著性:0.17918482 Wikipedia_url: http://en.维基百科.org/wiki/好莱坞
马丁·斯科塞斯类型:LOCATION 显著性:0.17712952 Wikipedia_url: http://en.维基百科.org/wiki/Martin_Scorsese
圣诞夜类型:PERSON 显著性:0.056773853 Wikipedia_url: http://en.维基百科.org/wiki/Christmas
2011年12月类型:日期 年:2011 月:12 显著性:0.0 Wikipedia_url:
2011类型:NUMBER 显著性:0.0 Wikipedia_url:

可以看到,除了2011出现两次之外,所有实体都被正确地识别和分类了. 除了示例输出中的字段之外, 实体分析API也将检测组织, 艺术作品, 消费品, 电话号码, 地址, 和价格.

实体情感分析

如果有实体检测和情感分析的模型, 再深入一步,把它们结合起来,以探测人们对文本中不同实体的普遍情绪,这是很自然的.

而情感分析API会发现文档中所有的情感表现,并将它们聚合起来, 实体情感分析试图找到文档的不同部分与已识别实体之间的依赖关系,然后将这些文本片段中的情感归因于各自的实体.

例如,自以为是的文本: “作者是个糟糕的作家. 另一方面,读者是非常聪明的.” 导致以下结果:

实体情绪
作者突出:0.8773350715637207 情绪: 级:1.899999976158142 得分:0.8999999761581421
读者突出:0.08653714507818222 情绪: 级:0.8999999761581421 得分:0.8999999761581421

到目前为止,实体情感分析只适用于英语、日语和西班牙语.

文本分类

最后,Google自然语言API附带了一个即插即用的文本分类模型.

该模型经过训练,可以将输入文档分类为一个大的类别集. 这些类别是结构化的、分层的.g. 类别 “爱好 & 休闲” 有几个子类别,其中一个是 “爱好 & 休闲/户外” 它本身有子类别,比如 “爱好 & 休闲/户外/钓鱼.”

这是一个尼康相机广告的例子:

“D3500是大号的.200万像素dx格式传感器捕捉丰富的细节照片和全高清电影-即使在低光下拍摄. 结合你的尼克尔镜头的渲染能力, 你可以开始用平滑的背景模糊创建艺术肖像. 轻松.”

Google API返回结果:

类别信心
艺术 & 娱乐/视觉艺术 & 设计/摄影 & 数字艺术 0.95
爱好 & 休闲 0.94
电脑 & 电子/消费电子/相机 & 摄影设备0.85

这三种分类都有意义, 尽管我们会直观地将第三个条目排在第二个条目之前. 然而, 必须考虑到这个输入段只是完整相机AD文档的一小部分,分类模型的性能随着文本长度的增加而提高.

在用大量文档进行了尝试之后, 我发现分类模型的结果在大多数情况下都是有意义的. 仍然, 和谷歌自然语言API中的其他模型一样, 分类器作为黑盒解决方案出现,API用户无法修改甚至微调. 特别是在文本分类的情况下, 绝大多数公司都有自己的文本分类,这些分类与谷歌模式的分类不同,因此, 自然语言API文本分类服务可能不适用于大多数用户.

分类模型的另一个限制是它只适用于英语文本.

如何使用自然语言API

Google自然语言API的主要优点是易于使用. 不需要机器学习技能,几乎不需要编码技能. 在Google Cloud网站上,您可以找到许多语言调用API的代码片段.

例如,调用情感分析API的Python代码如下:

从谷歌.云导入language_v1

从谷歌.云.Language_v1导入枚举

进口六

def sample_analyze_sentiment(内容):

    Client = language_v1.LanguageServiceClient ()

    如果是instance(content),则为6.binary_type):

        内容=内容.解码(“utf - 8”)

    类型_ = enum.文档.类型.PLAIN_TEXT

    文档= {'type': type_, 'content': content}

    响应=客户端.analyze_sentiment(文档)

    情绪=反应.document_sentiment

    打印(“得分:{}”.格式(情绪.分数))

    打印('级:{}'.格式(情绪.级))

其他API功能也以类似的方式调用,只需更改即可 客户端.analyze_sentiment 到相应的函数.

谷歌自然语言API的总成本

谷歌对自然语言API的所有服务按每次请求收费. 这样做的好处是没有任何部署服务器的固定成本. 缺点是,对于非常大的数据集,它可能会变得昂贵.

下表显示的价格(每1000次请求)取决于每月请求的数量:

表显示了谷歌自然语言API的成本

如果一个文档有超过1000个字符,它将被视为多个请求. 例如, 如果你想分析10的情绪,000份文件, 有1个,每篇500字, 你要收20美元,000个请求. 因为前5000个是免费的,所以总费用将达到15美元. 分析100万份同样大小的文件将花费1995美元.

方便,但不灵活

Google自然语言API是一个非常方便的快速、开箱即用的解决方案. 只需要很少的技术知识,也不需要了解底层的机器学习模型.

主要的缺点是缺乏灵活性和缺乏对模型的访问. 模型不能调优到特定的任务或数据集.

在现实环境中, 大多数任务可能需要比标准化的自然语言API功能所能提供的更定制的解决方案.

对于这种情况,谷歌自动自然语言更合适.

谷歌自动自然语言

如果自然语言API对于您的业务目的来说不够灵活,那么 自动自然语言 也许是正确的服务. AutoML 是否有一种新的谷歌云服务(仍在测试阶段),使用户能够创建定制的机器学习模型. 与自然语言API相反, AutoML模型将根据用户的数据进行训练,因此适合特定的任务.

当从自然语言API中可用的预定义类别过于通用或不适用于您的特定用例或知识领域时,用于对内容进行分类的自定义机器学习模型非常有用.

AutoML服务需要用户付出更多的努力, 主要是因为你必须提供一个数据集来训练模型. 然而, 模型的训练和评估完全自动化,不需要机器学习知识. 通过使用Google Cloud控制台,无需编写任何代码即可完成整个过程. 当然, 如果您想自动化这些步骤, 它支持所有常见的编程语言.

用Google AutoML自然语言可以做些什么?

AutoML服务涵盖三个用例. 目前所有这些用例都只支持英语语言.

1. 自动文本分类

而自然语言API的文本分类器是预先训练的,因此有一组固定的文本类别, AutoML文本分类构建定制的机器学习模型, 使用你在训练数据集中提供的类别.

2. 自动情绪分析

正如我们所见, 自然语言API的情感分析在电影评论等一般用例中非常有效. 因为情感模型是在一个非常通用的语料库上训练的, 对于使用大量领域特定语言的文档,性能可能会下降. 在这些情况下, AutoML情感分析允许你训练一个根据你的领域定制的情感模型.

3. 自动实体抽取

在许多商业环境中, 有领域特定的实体(法律合同), 医疗文件),自然语言API将无法识别. 如果您有一个标记实体的数据集, 你可以用AutoML训练一个定制的模型实体提取器. 如果数据集足够大, 经过训练的实体提取模型也将能够检测到以前未见过的实体.

如何使用AutoML自然语言

使用三个AutoML是一个四步的过程,并且这三种方法非常相似:

  1. 数据集的准备
    数据集必须是特定的格式(CSV或JSON),并且需要存储在存储桶中. 用于分类和情感模型, 数据集只包含两列, 文本和标签. 用于实体提取模型, 数据集需要文本和文本中所有实体的位置.

  2. 模型训练
    模型训练是完全自动的. 如果没有其他指示, 然后AutoML自动将训练集分割成训练集, 测试和验证集. 这种分割也可以由用户决定,但这是影响模型训练的唯一方法. 其余的训练以黑盒方式完全自动化.

  3. 评价
    培训结束后, AutoML将显示精度和召回分数以及混淆矩阵. 不幸的是, 绝对没有关于模型本身的信息, 使得很难确定模型表现不佳的原因.

  4. 预测
    一旦你对模型的性能感到满意, 只需单击几下即可方便地部署该模型. 整个部署过程仅需几分钟.

AutoML模型性能

训练过程相当缓慢,可能是因为底层模型非常大. 我用15训练了一个小的测试分类任务,000个样本,10个类别,训练花了几个小时. 一个具有更大数据集的真实示例花了我几天时间.

虽然谷歌没有公布任何关于所使用模型的细节,但我的猜测是 谷歌的BERT模型 对每个任务进行小的调整. 微调像BERT这样的大型模型是一个计算成本很高的过程, 特别是在进行大量交叉验证时.

我在一个实际示例中对我自己开发的模型进行了AutoML分类模型的测试, 是基于BERT的吗. 令人惊讶的是, AutoML模型的表现明显比我自己的模型差, 在相同的数据上训练. AutoML达到了84%的准确率,而我的on模型达到了89%.

这意味着使用AutoML可能非常方便, 对于性能关键型任务,投入时间并自己开发模型是有意义的.

AutoML定价

预测的自动定价为5美元/ 1,000条文本记录比自然语言API要昂贵得多. 此外,对于模型训练,AutoML每小时收费3美元. 虽然这在一开始是微不足道的, 对于需要频繁再培训的用例, 这些加起来可能是相当大的数额, 特别是因为训练似乎相当缓慢.

自动定价图表.

让我们使用与自然语言API相同的示例:

你想分析10的情绪,000份文件, 有1个,每篇500字, 所以你要收20美元,000个请求. 假设训练模型需要20个小时,花费48美元. 预测不会花费您任何费用,因为前30,000个请求是免费的. 对于像这样的小数据集,AutoML是非常经济的.

然而, 如果你的数据集更大,你需要预测100万个相同大小的人的情绪, 它将花费9美元,850, 这是相当昂贵的. 对于像这样的大型数据集, 开发您自己的模型而不使用AutoML是有意义的.

谷歌自然语言API vs. 自动自然语言

Google AutoML自然语言比自然语言API强大得多,因为它允许用户训练为其特定数据集和领域定制的模型.

它很容易使用,不需要机器学习知识. 两个缺点是成本较高,需要提供高质量的数据集,需要训练性能良好的模型.

AutoML测试版目前只支持三个NLP任务(分类, 情绪分析, 实体提取),并且只支持英文文档. 当这个服务完全发布时,我希望其他语言和NLP任务也会随着时间的推移而增加.

自然语言处理器的比较

自然语言处理器的对比图.

了解基本知识

  • 情感分析是如何工作的?

    情感分析是通过计算识别文本中的观点的过程. 机器学习模型在一组已知情感的文本上进行训练,并学习哪些表达与作者对主题的态度相关. 然后,该模型可以检测到未见文本中的情感.

  • 什么是NLP中的文本分类?

    文本分类是将文本文档自动分类为有限数量的组的过程. 文本分类器是经过训练的机器学习模型,用于检测文本之间的相似性. 它们的特征通常基于输入文本文档的词汇表和词序.

  • 什么是NLP API?

    NLP API是现有自然语言处理模型的接口. API用于向模型发送文本文档并接收作为返回的模型输出. 谷歌为几个模型提供了一个NLP API,用于不同的任务,如情感分析和文本分类.

  • 云自然语言API是做什么的?

    云自然语言API是谷歌的一项服务,它为几个在大型文本语料库上训练过的自然语言处理模型提供了一个接口. 该API可用于实体分析, 语法分析, 文本分类, 情感分析.

聘请Toptal这方面的专家.
现在雇佣
马克西米利安·霍普夫的头像
马克西米利安霍普夫

位于 英国伦敦

成员自 2019年6月4日

作者简介

Max是一名数据科学和机器学习专家. 他帮助建立了德国资金最雄厚的金融科技公司之一.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

以前在

波士顿咨询集团(BCG)

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.