ESRE系列(三):如何部署自然语言处理 (NLP):情感分析示例

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 本文将带您完成一个示例,让您使用情感分析 NLP 模型来评估评论(文本)字段包含的是积极还是消极情感。通过使用可公开获得的模型,我们将会向您展示如何将此模型部署到 Elasticsearch 中,以及如何在采集管道中使用此模型来将客户评价分类为积极或消极。

作者 David Kyle


1691654103792-6b335d47-f63e-4d4c-88a6-61c07ca09b41.png

作为自然语言处理 (NLP) 系列博文中的一部分,本文将带您完成一个示例,让您使用情感分析 NLP 模型来评估评论(文本)字段包含的是积极还是消极情感。通过使用可公开获得的模型,我们将会向您展示如何将此模型部署到 Elasticsearch 中,以及如何在采集管道中使用此模型来将客户评价分类为积极或消极。


情感分析是二元分类的一种,需要预测字段是两个值中的哪一个。预测时通常会有一个介于 0 和 1 之间的可能性分数,分数越接近 1,表示所预测结果的置信度越高。这种 NLP 分析很实用,可以应用到很多数据集(例如产品评价或客户反馈)中。


我们这里想分类的客户评价来自2015 Yelp Dataset Challenge(2015 年 Yelp 数据集挑战)中的一个公开数据集。这个数据集采集自 Yelp Review 网站(国外知名点评网站),是测试情感分析的绝佳资源。在这个示例中,我们将会使用常见情感分析 NLP 模型来评估 Yelp 评价数据集中的一个样本,并利用此模型将评论标注为积极或消极。我们希望看到积极和消极评价的百分比。



向 Elasticsearch 部署情感分析模型

第一步是安装来自 Hugging Face 的模型,需要用到我们在 NER 示例中所构建的 Eland Docker 代理:

docker run -it --rm elastic/eland \
    eland_import_hub_model \
      --url $ELASTICSEARCH_URL \
      --hub-model-id distilbert-base-uncased-finetuned-sst-2-english \
      --task-type text_classification \
      --start


这一次,将--task-type设为text_classification,并将--start选项传递给 Eland 脚本,这样模型就会自动部署,而无需在 Model Management UI 中启动它。


部署完毕后,在 Kibana 控制台中尝试完成这些示例:

POST _ml/trained_models/distilbert-base-uncased-finetuned-sst-2-english/deployment/_infer
{
  "docs": [
    {
      "text_field": "The movie was awesome!"
    }
  ]
}


您应该会看到下面的结果:

{
  "predicted_value" : "POSITIVE",
  "prediction_probability" : 0.9998643924765398
}


您也可以尝试这个示例:

POST _ml/trained_models/distilbert-base-uncased-finetuned-sst-2-english/deployment/_infer
{
  "docs": [
    {
      "text_field": "The cat was sick on the bed"
    }
  ]
}


您应该会看到下面的结果:

{
  "predicted_value" : "NEGATIVE",
  "prediction_probability" : 0.9992468477843378
}



分析 Yelp 评价

如在简介部分所提到的,我们将会使用 Yelp 评价的一个子集(可在 Hugging Face 上获得),该子集中的内容已被手动标注了情感。这能够让我们将结果与已标注的索引进行对比。我们将会使用Kibana 的文件上传功能来上传此数据集的一个样本,以便使用推理处理器来进行处理。


在 Kibana 控制台中,我们可以创建一个采集管道(操作方法请见上一篇博文《如何部署自然语言处理 (NLP):命名实体识别 (NER) 示例》);因为这次是用于情感分析,故而称之为 sentiment。评价位于名为 review 的字段中。与之前一样,我们将会定义一个 field_map,以将 review 映射到模型所期望的字段中。来自于 NER 管道的同一 on_failure 处理程序已设置完毕:

PUT _ingest/pipeline/sentiment
{
  "processors": [
    {
      "inference": {
        "model_id": "distilbert-base-uncased-finetuned-sst-2-english",
        "field_map": {
          "review": "text_field"
        }
      }
    }
  ],
  "on_failure": [
    {
      "set": {
        "description": "Index document to 'failed-<index>'",
        "field": "_index",
        "value": "failed-{{{_index}}}"
      }
    },
    {
      "set": {
        "description": "Set error message",
        "field": "ingest.failure",
        "value": "{{_ingest.on_failure_message}}"
      }
    }
  ]
}


这些评价文档存储在 Elasticsearch 索引yelp-reviews中。使用重新索引 API 来推动评价数据流经情感分析管道。鉴于重建索引需要一些时间来处理所有文档并对它们进行推断,因此,可以通过调用带有wait_for_completion=false标志的 API 在后台重建索引。使用任务管理 API来检查进度。

POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "yelp-reviews"
  },
  "dest": {
    "index": "yelp-reviews-with-sentiment",
    "pipeline": "sentiment"
  }
}


上述命令会返回一个任务 ID。我们可以通过以下方式监控任务的进度:

The above returns a task id. We can monitor progress of the task with:


或者,也可以通过观察模型统计 UI 中Inference count(推理计数)的增加来跟踪进度。

1691654111461-5face7ec-b126-4b02-9d95-191d2310cea8.png


已重建索引的文档现在包含了推理结果。例如,其中一个分析文档如下面所示:

{
    "review": "The food is good. Unfortunately the service is very hit or miss. The main issue seems to be with the kitchen, the waiters and waitresses are often very apologetic for the long waits and it's pretty obvious that some of them avoid the tables after taking the initial order to avoid hearing complaints.",
    "ml": {
        "inference": {
            "predicted_value": "NEGATIVE",
            "prediction_probability": 0.9985209630712552,
            "model_id": "distilbert-base-uncased-finetuned-sst-2-english"
        }
    },
    "timestamp": "2022-02-02T15:10:38.195345345Z"
}


预测值是“消极”,鉴于服务质量差,这个结果很合理。



对消极评价的数量进行可视化

多大比例的评价是消极的?与手动标注的情感相比,我们的模型表现如何?我们可以构建一个简单的可视化来跟踪来自模型推断和手动标注的积极和消极评价。通过基于 ml.inference.predicted_value field 创建可视化,报告两种方法的对比情况,可以看到有大约 44% 的评价被视为是积极的,其中被情感分析模型错误标注的比例为 4.59%。

1691654111852-01a35099-7dcc-4153-88dd-bcff67c6e292.png



立即试用

NLP 是 Elastic Stack 8.0 中的一项重要新功能,它为我们展开了一幅令人兴奋的路线图。目前阿里云检索分析服务Elasticsearch版已经支持8.5版本,您可以开通产品立即尝试以上示例内容,数据节点规格建议4C8G以上。详情了解:https://www.aliyun.com/product/bigdata/elasticsearch


  • 配套实验

基于 Elasticsearch 向量检索的以文搜图

通过简易快速的阿里云相关组件和开源模型部署,通过1小时的动手实操,搭建基于Elasticsearch向量检索的以文搜图的搜索服务原型。


  • 活动推荐

《Elasticsearch 训练营:搜文本搜位置搜图片,1小时玩转Elasticsearch》

由浅入深带您上手实操【基础检索】,搭建高频业务场景应用;进阶体验【向量检索】,构建基于算法模型的向量检索应用,晋升Elasticsearch搜索实战派,超多参营好礼等你拿~

新建项目 (58).png


Reference



Elasticsearch 技术社区钉钉交流群

相关文章
|
6天前
|
机器学习/深度学习 自然语言处理 搜索推荐
探索深度学习与自然语言处理(NLP)在智能客服系统中的创新应用
探索深度学习与自然语言处理(NLP)在智能客服系统中的创新应用
24 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】自然语言处理NLP概述及应用
自然语言处理(Natural Language Processing,简称NLP)是一门集计算机科学、人工智能以及语言学于一体的交叉学科,致力于让计算机能够理解、解析、生成和处理人类的自然语言。它是人工智能领域的一个关键分支,旨在缩小人与机器之间的交流障碍,使得机器能够更有效地识别并响应人类的自然语言指令或内容。
37 4
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】GPT-5技术突破预测:引领自然语言处理革新的里程碑
随着科技的飞速发展,人工智能(AI)领域正迎来一场前所未有的革命。近日,OpenAI首席技术官米拉·穆拉蒂在采访中透露,新一代大语言模型GPT-5将在一年半后发布,这一消息无疑在科技界掀起了巨大的波澜。GPT-5的即将登场,预示着AI技术将迈入一个新的时代,我们的工作和日常生活也将随之发生深刻的变化。 GPT-5的发布,将为我们带来前所未有的智能体验。穆拉蒂将其与高中生到博士生的成长相比,可见其在智能水平上的巨大飞跃。GPT-5将具备更高的智能水平,能够处理更为复杂、精细的任务,如高级数据分析、自动化编程、智能内容生成等。这将极大地提高各行各业的工作效率,推动社会生产力的快速发展。
44 4
|
2月前
|
Apache UED 数据安全/隐私保护
揭秘开发效率提升秘籍:如何通过Apache Wicket组件重用技巧大翻新用户体验
【8月更文挑战第31天】张先生在开发基于Apache Wicket的企业应用时,发现重复的UI组件增加了维护难度并影响加载速度。为优化体验,他提出并通过面板和组件重用策略解决了这一问题。例如,通过创建`ReusableLoginPanel`类封装登录逻辑,使得其他页面可以轻松复用此功能,从而减少代码冗余、提高开发效率及页面加载速度。这一策略还增强了应用的可维护性和扩展性,展示了良好组件设计的重要性。
34 0
|
2月前
|
人工智能 自然语言处理 机器人
掌握未来沟通的艺术:运用TensorFlow与自然语言处理(NLP)技术,从零开始构建你的专属智能对话机器人,让机器理解你的一言一行
【8月更文挑战第31天】本文详细介绍如何利用TensorFlow与自然语言处理技术开发对话机器人。从准备问答数据集开始,通过预处理、构建Seq2Seq模型、训练及预测等步骤,最终实现了一个简易的聊天机器人。示例代码涵盖数据加载、模型搭建及对话功能,适合希望在实际项目中应用AI技术的开发者参考。
26 0
|
5天前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习在自然语言处理中的应用与挑战
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,包括机器翻译、情感分析和文本生成等方面。同时,讨论了数据质量、模型复杂性和伦理问题等挑战,并提出了未来的研究方向和解决方案。通过综合分析,本文旨在为NLP领域的研究人员和从业者提供有价值的参考。
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用
【9月更文挑战第17天】本文主要介绍了AI技术在自然语言处理(NLP)领域的应用,包括文本分类、情感分析、机器翻译和语音识别等方面。通过实例展示了AI技术如何帮助解决NLP中的挑战性问题,并讨论了未来发展趋势。
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI技术在自然语言处理中的应用
【9月更文挑战第22天】本文将探讨AI技术在自然语言处理(NLP)领域的应用,包括文本挖掘、情感分析、机器翻译等方面。我们将通过实例和代码示例,展示如何使用Python和相关库实现这些功能。
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的应用与未来展望
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,重点分析了神经网络模型如循环神经网络(RNN)、长短期记忆网络(LSTM)和Transformer等在文本生成、语义理解及情感分析等任务中的卓越表现。通过具体案例展示了这些模型如何有效解决传统方法难以处理的问题,并讨论了当前面临的挑战及未来可能的发展方向,为进一步研究提供了新的视角和思路。
|
20天前
|
机器学习/深度学习 数据采集 人工智能
AI技术在自然语言处理中的应用与挑战
【9月更文挑战第12天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将介绍NLP的基本概念、主要任务和应用场景,并分析当前AI技术在NLP中的局限性和未来发展趋势。通过实际案例和代码示例,我们将展示AI技术如何帮助解决NLP问题,并探讨如何克服现有挑战以实现更高效的自然语言处理系统。
下一篇
无影云桌面