个性化阅读
专注于IT技术分析

使用Google Cloud自然语言API的NLP

本文概述

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

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

过去, 针对此类任务训练和部署机器学习模型是一个复杂的过程, 需要专家团队和昂贵的基础架构。但是, 对此类应用程序的高需求驱使大型提供商可以开发与NLP相关的服务, 从而大大减少了工作量和基础架构成本。云服务的平均成本已经下降了多年, 并且这种趋势预计将持续下去。

我将在本文中介绍的产品是Google Cloud Services的一部分, 被称为” Google自然语言API”和” Google AutoML自然语言”。

Google自然语言API

Google自然语言API是易于使用的界面, 可与一组功能强大的NLP模型建立联系, 这些模型已经过Google的培训, 可以执行各种任务。由于这些模型已经在非常庞大的文档语料库上进行了训练, 因此, 只要在不使用非常特殊语言的数据集上使用它们, 它们的性能通常就很好。

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

自然语言API包含五种不同的服务:

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

语法分析

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

词性:此部分包含有关每个标记形态的信息。对于每个单词, 将返回包含其类型(名词, 动词等), 性别, 语法格, 时态, 语法语气, 语法语音等的细粒度分析。

例如, 对于输入句子”一台计算机曾经在国际象棋上击败了我, 但是在跆拳道上这对我来说是不匹配的。” (Emo Philips)词性分析为:

一个 标签:IT
‘电脑’ 标签:名词号码:奇异
‘一旦’ 日:ADV
‘击败’ 标签:动词情绪:指示性时态:过去
‘我’ 标签:PRON案例:推荐编号:单身人士:FIRST
at 标签:ADP
‘棋’ 标签:名词号码:奇异
‘, ‘ 标签:POINT
‘但’ 日:CONJ
‘它’ 标签:PRON案例:提名性别:NEUTER编号:单身人士:第三
标签:动词心情:指示数字:单身人士:第三时态:过去
‘没有’ 标签:IT
‘比赛’ 标签:名词号码:奇异
‘对于’ 标签:ADP
‘踢’ 标签:名词号码:奇异
‘boxing’ 标签:名词号码:奇异
‘.’ 标签:POINT

依赖关系树:返回的第二部分称为依赖关系树, 它描述每个句子的句法结构。下图是著名的肯尼迪语录, 它显示了这种依赖树。对于每个单词, 箭头指示该单词修改了哪些单词。

依赖关系树的示例

常用的Python库nltk和spaCy包含相似的功能。这三个选项的分析质量始终很高, 但是Google自然语言API易于使用。只需很少的代码行即可获得上述分析结果(请参见下面的示例)。但是, 虽然spaCy和nltk是开源的, 因此是免费的, 但是使用Google Natural Language API需经过一定数量的免费请求后才需要付费(请参阅”费用”部分)。

除英语外, 句法分析还支持十种其他语言:中文(简体), 中文(繁体), 法语, 德语, 意大利语, 日语, 韩语, 葡萄牙语, 俄语和西班牙语。

情绪分析

语法分析服务通常在开发初期就用于创建功能, 然后将这些功能提供给机器学习模型。相反, 可以立即使用情绪分析服务。

Google的情感分析将在提供的文字中提供主流的情感观点。 API返回两个值:”分数”描述文本从-1(负)到+1(正)的情感倾向, 0为中性。

“幅度”衡量情绪的强度。

让我们看一些例子:

输入句 情感结果 解释
到伦敦的火车四点发车 得分:0.0幅度:0.0 完全中立的声明, 完全不包含任何情感。
这篇博客文章很好。 得分:0.7幅度:0.7 积极情绪, 但表达不强烈。
这篇博客文章很好。这非常有帮助。作者很棒。 得分:0.7数量级:2.3 相同的情绪, 但表达强烈得多。
这篇博客文章非常好。这位作家通常是恐怖的作家, 但在这里他很幸运。 得分:0.0幅度:1.6 震撼力表明我们在本文中表达了一些情感, 但情绪表明它们是混杂的, 并且没有明显的积极或消极情绪。

Google的情绪分析模型是在非常大的数据集上训练的。不幸的是, 没有关于其详细结构的信息。我对它的真实表现感到好奇, 因此我在”大型电影评论”数据集的一部分上进行了测试, 该数据集由斯坦福大学的科学家于2011年创建。

我从测试集中随机选择了500条正面和负面电影评论, 并将预测的情感与实际评论标签进行了比较。混淆矩阵如下所示:

积极情绪 负面情绪
好评价 470 30
差评 29 471

如下表所示, 该模型在大约94%的时间对电影评论的好坏都是正确的。对于开箱即用的解决方案, 如果不对给定的问题进行任何微调, 这并不是一个不好的性能。

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

实体分析

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

Google自然语言API提供了有关每个检测到的实体的一些基本信息, 甚至提供了指向相应Wikipedia文章的链接(如果存在)。另外, 计算显着性分数。实体的此分数提供有关该实体在整个文档文本中的重要性或中心性的信息。分数接近0的重要性较低, 而分数接近1.0的重要性较高。

当我们使用以下示例语句向API发送请求时:”罗伯特·德尼罗(Robert DeNiro)在2011年12月圣诞节前夕在好莱坞与马丁·斯科塞斯(Martin Scorsese)进行了交谈。”我们收到以下结果:

检测到的实体 附加信息
罗伯特·德尼罗 类型:PERSON显着性:0.5869118 wikipedia_url:https://en.wikipedia.org/wiki/Robert_De_Niro
好莱坞 类型:地理位置显着度:0.17918482 wikipedia_url:https://zh.wikipedia.org/wiki/好莱坞
马丁·斯科塞斯(Martin Scorsese) 类型:地理位置显着性:0.17712952 wikipedia_url:https://en.wikipedia.org/wiki/Martin_Scorsese
平安夜 类型:PERSON显着性:0.056773853 wikipedia_url:https://en.wikipedia.org/wiki/圣诞节
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带有即插即用的文本分类模型。

训练模型可以将输入文档分类为一大类。类别是结构化的层次结构, 例如”兴趣爱好和休闲”类别有几个子类别, 其中一个类别是”兴趣爱好和休闲/户外”, 其子类别也包括”兴趣爱好和休闲/户外/钓鱼”。

这是尼康相机广告的示例文字:

” D3500的大型24.2 MP DX格式传感器即使在昏暗的光线下也能捕捉到丰富细节的照片和全高清电影。结合尼克尔镜头的渲染能力, 你可以开始创建具有平滑背景模糊的艺术肖像。轻松。”

Google API返回结果:

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

尽管我们可以直观地将第三个条目的排名高于第二个条目, 但所有这三个类别都是有意义的。但是, 必须考虑到此输入段只是整个相机广告文档的一小部分, 并且分类模型的性能随文本长度而提高。

在尝试了许多文档之后, 我发现分类模型的结果在大多数情况下是有意义的。尽管如此, 与Google自然语言API中的所有其他模型一样, 分类器还是一个黑盒解决方案, API用户无法修改甚至无法对其进行微调。特别是在文本分类的情况下, 绝大多数公司将拥有自己的文本分类, 这些分类不同于Google模型的分类, 因此, 自然语言API文本分类服务可能不适用于大多数用户。

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

如何使用自然语言API

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

例如, 用于调用情感分析API的Python代码很短:

from google.cloud import language_v1

from google.cloud.language_v1 import enums

import six

def sample_analyze_sentiment(content):

    client = language_v1.LanguageServiceClient()

    if isinstance(content, six.binary_type):

        content = content.decode('utf-8')

    type_ = enums.Document.Type.PLAIN_TEXT

    document = {'type': type_, 'content': content}

    response = client.analyze_sentiment(document)

    sentiment = response.document_sentiment

    print('Score: {}'.format(sentiment.score))

    print('Magnitude: {}'.format(sentiment.magnitude))

通过将client.analyze_sentiment更改为适当的函数, 可以以类似的方式调用其他API功能。

Google自然语言API的总体费用

Google会根据每个请求向用户收取Na​​tural Language API的所有服务费用。这样做的好处是, 任何部署服务器都没有固定成本。缺点是它对于非常大的数据集可能会变得昂贵。

下表显示了价格(每1, 000个请求), 具体取决于每月请求的数量:

该表显示了Google自然语言API的费用

如果文档的字符数超过1, 000, 则将其视为多个请求。例如, 如果你要分析10, 000个文档的情感, 每个文档有1, 500个字符, 则将向你收取20, 000个请求。由于前5, 000个免费, 因此总费用为15美元。分析一百万个相同大小的文档将花费1, 995美元。

方便但不灵活

对于快速, 开箱即用的解决方案, Google自然语言API是非常方便的选择。只需很少的技术知识, 也不需要了解基础的机器学习模型。

主要缺点是它的灵活性和缺乏访问模型的能力。无法将模型调整为特定的任务或数据集。

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

对于这种情况, Google AutoML自然语言更合适。

Google AutoML自然语言

如果Natural Language API对于你的业务目的而言不够灵活, 那么AutoML Natural Language可能是正确的服务。 AutoML是一项新的Google Cloud Service(仍处于beta版), 使用户可以创建自定义的机器学习模型。与自然语言API相比, AutoML模型将根据用户数据进行训练, 因此适合特定任务。

当自然语言API中可用的预定义类别太笼统或不适用于你的特定用例或知识领域时, 用于对内容进行分类的自定义机器学习模型很有用。

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

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

AutoML服务涵盖三个用例。目前, 所有这些用例仅支持英语。

1. AutoML文本分类

虽然Natural Language API的文本分类器已经过预先训练, 因此具有一组固定的文本类别, 但是AutoML文本分类会使用你在训练数据集中提供的类别来构建自定义的机器学习模型。

2. AutoML情感分析

如我们所见, 自然语言API的情感分析在诸如电影评论之类的一般用例中非常有用。由于情感模型是在非常通用的语料库上训练的, 因此对于使用大量特定领域语言的文档, 性能可能会下降。在这些情况下, AutoML情绪分析使你可以训练针对你的域定制的情绪模型。

3. AutoML实体提取

在许多业务环境中, 某些特定领域的实体(法律合同, 医疗文件)自然语言API无法识别。如果你有一个标记了实体的数据集, 则可以使用AutoML训练自定义的模型实体提取器。如果数据集足够大, 则训练有素的实体提取模型也将能够检测以前看不见的实体。

如何使用AutoML自然语言

使用这三个AutoML是一个四步过程, 并且对于所有三种方法都非常相似:

  1. 数据集准备数据集必须采用特定格式(CSV或JSON), 并且需要存储在存储桶中。对于分类和情感模型, 数据集仅包含两列, 即文本和标签。对于实体提取模型, 数据集需要文本以及文本中所有实体的位置。
  2. 模型训练模型训练是完全自动的。如果没有其他说明, 则AutoML将自动将训练集拆分为训练集, 测试集和验证集。用户也可以决定这种划分, 但这是影响模型训练的唯一方法。其余的培训以黑匣子的方式完全自动化。
  3. 评估培训结束后, AutoML将显示精确度和召回得分以及混淆矩阵。不幸的是, 绝对没有有关模型本身的信息, 这使得很难确定模型性能不佳的原因。
  4. 预测一旦你对模型的性能满意, 只需单击几下即可方便地部署模型。部署过程仅需几分钟。

AutoML模型性能

训练过程相当缓慢, 可能是因为基础模型很大。我训练了一个小型测试分类任务, 其中包含15, 000个样本和10个类别, 并且培训耗时数小时。一个具有更大数据集的真实示例花了我几天的时间。

尽管Google并未发布有关所使用模型的任何详细信息, 但我猜测是Google的BERT模型用于每个任务都需要进行少量修改。微调BERT等大模型是一个计算量巨大的过程, 尤其是在执行大量交叉验证时。

我在一个真实示例中针对我自己开发的基于BERT的模型测试了AutoML分类模型。令人惊讶的是, 当对相同数据进行训练时, AutoML模型的性能明显比我自己的模型差。 AutoML的准确度达到84%, 而我的模型达到89%。

这意味着虽然使用AutoML可能非常方便, 但对于性能至关重要的任务, 有意义的是自己投入时间并开发模型。

AutoML定价

对于每1, 000条文本记录5美元的预测, AutoML的定价比Natural Language API贵得多。此外, 对于模型培训, AutoML每小时收费3美元。尽管在一开始这可以忽略不计, 但对于需要频繁重新培训的用例而言, 这可能总计很多, 尤其是因为培训似乎很慢。

AutoML定价图表。

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

你要分析10, 000个文档的情感, 每个文档有1, 500个字符, 因此需要向你收取20, 000个请求。假设训练模型需要20个小时, 费用为48美元。预测不会花费你任何费用, 因为前30, 000个请求是免费的。对于像这样的小型数据集, AutoML非常经济。

但是, 如果你的数据集更大, 并且你需要预测相同大小的一百万的情绪, 它将花费9, 850美元, 这是非常昂贵的。对于像这样的大型数据集, 开发自己的模型而不使用AutoML自行部署它是有意义的。

Google自然语言API与AutoML自然语言

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

它易于使用, 并且不需要机器学习知识。不利的两个方面是更高的成本和提供高质量数据集的必要性, 这些数据集需要训练性能良好的模型。

AutoML beta目前仅支持三个NLP任务(分类, 情感分析, 实体提取), 并且仅支持英语文档。完全发布此服务后, 我希望随着时间的推移会添加其他语言和NLP任务。

自然语言处理器的比较

自然语言处理器的比较表。

相关:充分利用预训练的模型

赞(0)
未经允许不得转载:srcmini » 使用Google Cloud自然语言API的NLP

评论 抢沙发

评论前必须登录!