从NLP到聊天机器人

一、说明

        今天,当打电话给银行或其他公司时,听到电话另一端的机器人向你打招呼是很常见的:“你好,我是你的数字助理。请问你的问题。是的,机器人现在不仅可以说人类语言,还可以用人类语言与用户互动。这是由于自然语言处理(NLP)——任何数字助理的核心技术,允许它以编程方式理解和生成自然语言。

        本文介绍了一个示例,说明如何使用 spaCy(用于 NLP 的领先开源 Python 库)从用户输入中提取含义。

二、如何从用户输入中提取含义

        以编程方式从用户输入中提取含义可能非常具有挑战性,但并非不可能。很明显,你不能依赖句子中单个单词的含义——同一个单词可能会表达不同的含义,这取决于它在特定句子中的句法功能。这可以通过示例来最好地理解。请看以下两句话:

I’d like to order a cake.
I want to cancel my order. 

        在这两个话语中,你可以看到“顺序”一词。然而,在每种情况下,它都有不同的句法功能并具有不同的含义。在第一种情况下,“order”是一个动作(传递)动词,作用于名词“蛋糕”——句子的直接宾语。相比之下,第二个话语中的“order”是接收句子动作的名词——也就是说,它充当句子的直接宾语,其中“取消”是传递动词。

        句子中单词的语言特征(如上例中的及物动词或直接宾语)也称为语言特征。spaCy 会自动为应用了 spaCy 文本处理管道的句子中的每个标记分配语言特征。然后,分析语言特征可以帮助识别这个特定句子中单词的含义。我们将在本文后面的 在 NLP 中使用语言特征 部分中讨论如何使用语言特征来完成意义提取任务。

三、准备您的工作环境

        若要按照本文中提供的代码进行操作,需要在计算机上安装以下软件组件:

python 2.7+∕3.4+

spaCy v2.0+

预先训练的spaCy英语模型

        您可以在相应的站点上找到安装说明。确保环境准备就绪的最快方法是,可以在 Python 会话中输入以下代码行:

import spacy
nlp = spacy.load('en') 

        如果一切正常,您应该没有错误消息。

四、在 NLP 中使用语言特征

        功能(如词性标记和句法依赖关系标签)专门设计用于支持开发能够智能处理原始文本的应用程序。以下脚本说明了如何使用 spaCy 提取句子中每个单词的语言特征:

import spacy
nlp = spacy.load('en')
doc = nlp(u'I have to send them a notification.')
for token in doc:print(token.text, token.pos_, token.tag_, token.dep_)

        在上面的脚本中,您提取并输出所提交句子中每个标记的粗粒度词性标签 (pos_)、细粒度词性标签 (tag_) 和语法依赖关系标签 (dep_)。因此,脚本应提供以下输出(为便于阅读而列出):

I            PRON   PRP  nsubj
have         VERB   VBP  ROOT
to           PART   TO   aux
send         VERB   VB   xcomp
them         PRON   PRP  dative
a            DET    DT   det
notification NOUN   NN   dobj
.            PUNCT  .    Punct 

        如果你不熟悉 spaCy,上面分别在第三列和第四列中输出的细粒度词性标签和语法依赖关系标签可能看起来有点混乱。要了解这些列中的值的含义,您可以在 Data formats · spaCy API Documentation 或使用 spacy.explain() 函数查看 spacy 的文档,该函数返回给定语言特征的描述。在下面的循环中,您将输出示例句子中每个标记的细粒度词性标记的描述:

for token in doc:print(token.text, spacy.explain(token.tag_)) 

        这应该会给你以下输出:

I            pronoun, personal
have         verb, non-3rd person singular present
to           infinitival to
send         verb, base form
them         pronoun, personal
a            determiner
notification noun, singular or mass
.            punctuation mark, sentence closer 

        同样,您可以使用 spacy.explain() 函数获取粗粒度词性标记和语法依赖关系标签的说明。

五、从话语中提取意向

        现在让我们看一个示例,说明如何利用语言功能从用户输入中提取含义。假设需要从提交的语句中提取意向。例如,点餐聊天机器人的用户提交以下语句:

I want to order a photo cake. 

        显然,“订单”和“蛋糕”这两个词最能描述这句话所表达的意图。在这种特殊情况下,这些词分别表示及物动词和直接宾语。实际上,在大多数情况下,在确定请求话语中表达的意图时,传递谓词/直接宾语对是最具描述性的。从图表上看,这可能如下所示:

        在许多请求话语中,及物谓词及其直接宾语最能描述短语的意图。

上图中描述的操作可以在使用 spaCy 的 Python 脚本中轻松执行,如下所示:

import spacy
nlp = spacy.load('en')
doc = nlp(u'I want to order a photo cake.')
for token in doc:if token.dep_ == 'dobj':print(token.head.text + token.text.capitalize()) 

        在此脚本中,将文本处理管道应用于示例句子,然后循环访问标记,查找依赖项标签为 dobj 的令牌。找到它后,您可以通过获取直接对象的句法头来确定相应的传递动词。最后,连接及物动词及其直接宾语,以单个单词的形式表达意图(这通常是处理脚本的要求)。

        因此,脚本应生成:

orderCake 

        在实际应用程序中,用户可能会对每个意向使用一组广泛的短语。这意味着实际应用程序必须识别用户输入中的同义短语。有关这些细节,您可以查看我的新书《使用Python的自然语言处理》,其中包括许多关于使用spaCy执行不同NLP任务的示例。

        此外,在我最近为 Oracle 杂志撰写的 Oracle 数字助理技能的生成意图和实体文章中可以找到意图提取技术在实践中可能使用的真实示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/40085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows权限维持—黄金白银票据隐藏用户远控RustDeskGotoHttp

windows权限维持—黄金白银票据&隐藏用户&远控&RustDesk&GotoHttp 1. 前置1.1. 初始问题1.1.1. 解决办法 2. 隐藏用户2.1. 工具原理2.2. 案例操作2.2.1. 单机添加用户2.2.1.1. 工具添加用户2.2.1.2. 工具查看隐藏用户2.2.1.3. 本地查看隐藏用户 2.2.2. 域内添加…

NeuralNLP-NeuralClassifier的使用记录(二),训练预测自己的【中文文本多分类】

NeuralNLP-NeuralClassifier的使用记录,训练预测自己的【中文文本多分类】 数据准备: ​ 与英文的训练预测一致,都使用相同的数据格式,将数据通过代码处理为JSON格式,以下是我使用的一种,不同的原数据情况…

java+springboot+mysql理发会员管理系统

项目介绍: 使用javaspringbootmysql开发的理发会员管理系统,系统包含超级管理员,系统管理员、客户、发型师角色,功能如下: 超级管理员:管理员管理;会员管理;发型师管理&#xff1b…

如何保证数据库的数据和Redis的数据一致性

实际项目中有可能会使用Redis缓存数据,那么在更新数据的时候如何保证数据库中的数据和Redis缓存的数据一致,缓存同步策略的选择是一个很重要的问题。网上有各种说法,大概总结有以下几种,看看每种方案是否可行以及存在的问题和适用…

安装软件包

安装软件包 创建一个名为 /home/curtis/ansible/packages.yml 的 playbook : 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上 将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上 将 dev 主机组中主机上的所有软件包更新为最新版本 vim packa…

关于Firmae缺失binwalk模块

问题 david707:~/FirmAE$ sudo ./run.sh -c weyow ./WAM_9900-20.06.03V.trx [*] ./WAM_9900-20.06.03V.trx emulation start!!! Traceback (most recent call last):File "./sources/extractor/extractor.py", line 19, in <module>import binwalk ModuleNot…

Docker容器:docker基础概述、安装、网络及资源控制

文章目录 一.docker容器概述1.什么是容器2. docker与虚拟机的区别2.1 docker虚拟化产品有哪些及其对比2.2 Docker与虚拟机的区别 3.Docker容器的使用场景4.Docker容器的优点5.Docker 的底层运行原理6.namespace的六项隔离7.Docker核心概念 二.Docker安装 及管理1.安装 Docker1.…

【k8s】基于Prometheus监控Kubernetes集群安装部署

目录 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 二、部署kubernetes集群 三、部署Prometheus监控平台 四、部署Grafana服务 五、grafana web操作 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 IP地址 主机名 组件 192.168.100.131 k8s-ma…

时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积…

基于LVQ神经网络的人脸朝向识别

1案例背景 1.1人脸识别概述 人脸识别作为一个复杂的模式识别问题,近年来受到了广泛的关注,识别领域的各种方法在这个问题上各显所长,而且发展出了许多新方法,大大丰富和拓宽了模式识别的方向。人脸识别、检测,跟踪、特征定位等技术近年来一直是研究的热点。人脸识别是人脸应用…

【制作npm包1】申请npm账号、认识个人包和组织包

概述 在开发当中经常有一种现象&#xff0c;重复代码写了N多遍&#xff0c;再次写同样的逻辑就再次翻查以前的代码逻辑。效率低下且容易出错&#xff0c;封装一个npm包的价值也不仅仅是给别人用&#xff0c;封装一套属于自己或者本部门的npm包也是相当有必要。 也许经常看到一…

RabbitMQ的5种消息队列

RabbitMQ的5种消息队列 1、七种模式介绍与应用场景 1.1 简单模式(Hello World) 一个生产者对应一个消费者&#xff0c;RabbitMQ 相当于一个消息代理&#xff0c;负责将 A 的消息转发给 B。 应用场景&#xff1a;将发送的电子邮件放到消息队列&#xff0c;然后邮件服务在队列…

【git】初次使用git上传代码到github远程仓库

目录 0.前言1.新建代码库2.添加SSH公钥2.1 前置准备2.2 Git 基本信息设置2.3 添加SSH Key 3.本地仓库上传到github3.1 建立本地仓库并初始化3.2 初始化仓库3.3 建立本地与github上新建项目链接3.4 同步github新建项目到本地3.5 添加本地文件到缓存区3.6 为上传文件添加注释3.7 …

注册中心Eureka和Nacos,以及负载均衡Ribbon

1.初识微服务 1.1.什么是微服务 微服务&#xff0c;就是把服务拆分成为若干个服务&#xff0c;降低服务之间的耦合度&#xff0c;提供服务的独立性和灵活性。做到高内聚&#xff0c;低耦合。 1.2.单体架构和微服务架构的区别&#xff1a; 单体架构&#xff1a;简单方便&#…

DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(一)

DevExpress WinForms超过80个高影响力的WinForms编辑器和多用途控件&#xff0c;从屏蔽数据输入和内置数据验证到HTML格式化&#xff0c;DevExpress数据编辑库提供了无与伦比的数据编辑选项&#xff0c;包括用于独立数据编辑或用于容器控件(如Grid, TreeList和Ribbon)的单元格。…

云原生 envoy xDS 动态配置 java控制平面开发 支持restful grpc实现 EDS 动态endpoint配置

envoy xDS 动态配置 java控制平面开发 支持restful grpc 动态endpoint配置 大纲 基础概念Envoy 动态配置API配置方式动静结合的配置方式纯动态配置方式实战 基础概念 Envoy 的强大功能之一是支持动态配置&#xff0c;当使用动态配置时&#xff0c;我们不需要重新启动 Envoy…

spring boot 整合mongodb

1、安装依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>2、配置数据库连接 spring:data:mongodb:host: localhostport: 27017username: xxxxxxp…

2682. 找出转圈游戏输家

题目描述&#xff1a; n 个朋友在玩游戏。这些朋友坐成一个圈&#xff0c;按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i 1) 个朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而从第 n 个朋友的位置开始顺时针移动 1 步…

【广州华锐视点】帆船航行VR模拟实操系统

帆船航行VR模拟实操系统由广州华锐视点开发&#xff0c;是一种创新的教学工具&#xff0c;它利用虚拟现实技术&#xff0c;为学生提供了一个沉浸式的学习环境。通过这种系统&#xff0c;学生可以在虚拟的环境中进行帆船航行的实训&#xff0c;从而更好地理解和掌握帆船航行的技…

Maven(四)常用命令大全

目录 一、mvn 命令参数二、mvn 插件命令1.介绍2.查看插件的使用文档3.常用的插件命令 官网地址&#xff1a; https://maven.apache.org/官方插件清单&#xff1a; https://maven.apache.org/plugins/index.html Maven 是一个强大的构建工具&#xff0c;它提供了许多命令来进行项…