从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.rhkb.cn/news/97558.html

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

相关文章

Shell编程之正则表达式

文本处理器:三剑客:grep查找sed awk shell正则表达式由一类特殊字符以及文本字符所编写的一种模式,处理文本当中的内容,其中的一些字符不表示字符的字面含义表示一种控制或者通配的功能 通配符:匹配文件名和目录名&a…

List和ObservableCollection和ListBinding在MVVM模式下的对比

List和ObservableCollection和ListBinding在MVVM模式下的对比 List 当对List进行增删操作后,并不会对View进行通知。 //Employee public class Employee : INotifyPropertyChanged {public event PropertyChangedEventHandler? PropertyChanged;public string N…

VSCode无法从Extensions下载工具时,把工具下载到本地并添加到VSCode编辑器

从VSCode 的 Extensions 下载 下载报错:Error while installing ...... extension. Please check the log for more details. 由于内网限制(或者其他网络限制)无法正常下载扩展工具到VSCode编辑器,可以把工具下载到本地再添加到V…

Python的六种参数?

很多人说,Python的参数类型有四种、五种,我个人认为归纳起来是六种参数,分别为:位置参数(Positional Arguments)、默认参数(Default Arguments)、关键字参数(Keyword Arg…

Autosar存储入门系列02_NVM之CRC校验及显隐式同步机制

本文框架 0.前言1. NVM中CRC校验2. NVM的显隐式同步机制2.1 隐式同步2.2 显式同步 0.前言 本系列是Autosar存储入门系列,希望能从学习者的角度把存储相关的知识点梳理一遍,这个过程中如果大家觉得有讲得不对或者不够清晰的地方,还请一定指出…

如何做好服务性能测试

一、什么是性能测试 新功能上线或切换底层数据库或扩容调优,根据实际业务场景的需要,做必要的性能压测,收集性能数据,作为上线的基准报告。 性能测试一般分一下几个阶段: 1. 性能测试 并发量小(jmeter 并…

windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动

前两天由于项目需要,一个windows上的批处理任务(kitchen.bat),需要接到mq的消息通知后执行,为了快速实现这里我们通过springboot写了一个jar程序,用于接收mq的消息,并调用bat文件。 本程序需要实…

Field injection is not recommended

文章目录 1. 引言2. 不推荐使用Autowired的原因3. Spring提供了三种主要的依赖注入方式3.1. 构造函数注入(Constructor Injection)3.2. Setter方法注入(Setter Injection)3.3. 字段注入(Field Injection) 4…

【Unity每日一记】SceneManager场景资源动态加载

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

【Redis基础篇】浅谈分布式系统(一)

一、浅谈分布式系统 1. 单机架构:只有一台服务器,这个服务器负责所有的工作。 如果遇到了服务器不够的场景怎么处理? 开源:增加更多的硬件资源节流:软件上的优化,优化代码等…一台服务器资源使用有限,就…

【剖析STL】vector

vector的介绍及使用 1.1 vector的介绍 cplusplus.com/reference/vector/vector/ vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是…

删除有序链表中重复的元素-II(链表)

乌!蒙!山!连!着!山!外!山! 题目: 思路: 双指针,slow和fast,并且增加标记flag初始为1。 如果slow指向节点值等于fast指向节点值&…

Kubernetes+EFK构建日志分析平台

目录 Fluentd 工作原理 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master节点 2.6、安装node节点 2.7、安装flannel 3、部署企业…

LeetCode 142.环形链表II

文章目录 💡题目分析💡解题思路💡深度思考🔔接口源码 题目链接👉 LeetCode 142.环形链表II👈 💡题目分析 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环…

优化GitHub网站访问慢的问题

方法一、修改host文件解决 大型网站服务器都不会是只有一台服务器,而是多台服务器组成的集群一起对外提供服务。 使用站长工具测速,找一个速度比较快的服务器。 图中可以看到140.82.121.4这个ip比较快, 下面修改hosts: Mac 在 /etc/hosts 中&#x…

蓝牙资讯|中国智能家居前景广阔,蓝牙Mesh照明持续火爆

据俄罗斯卫星通讯社报道,中国已成为全球最大的智能家居消费国,占全球50%—60%的市场份额。未来,随着人工智能技术的发展以及智能家居生态的不断进步,智能家居在中国的渗透率将加速提升。德国斯塔蒂斯塔调查公司数据显示&#xff0…

Redis在Java中的基本使用

本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实例 2、对于JedisPooled的使用2.1、使用JedisPooled2.2、关于连接池 3、SpringBoot下使用Redis3.1、引入Maven依赖3.2、配置Redis连接3.…

excel逻辑函数篇2

1、IF(logical_test,[value_if_true],[value_if_false]):判断是否满足某个条件,如果满足返回一个值,如果不满足则返回另一个值 if(条件,条件成立返回的值,条件不成立返回的值) 2、IFS(logical_test1,value_if_true1,…):检查是否…

网络安全--wazuh环境配置及漏洞复现

目录 一、wazuh配置 二、wazuh案例复现 一、wazuh配置 1.1进入官网下载OVA启动软件 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 1.2点击启动部署,傻瓜式操作 1.3通过账号:wazuh-user,密码:wazuh进入wazuh…

删除链表中的节点(力扣)

目录 题目: 看着花里胡哨,小卡拉米四行代码秒杀! 示例: 思路: 代码: 题目: 看着花里胡哨,小卡拉米四行代码秒杀! 示例: 思路: 把后一个节点的…