浅谈聊天机器人 ChatBot 涉及到的技术点 以及词性标注和关键字提取

本文主要是介绍浅谈聊天机器人 ChatBot 涉及到的技术点 以及词性标注和关键字提取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、浅谈聊天机器人 ChatBot 涉及到的技术点


聊天机器人到底该怎么做呢?我日思夜想,于是乎我做了一个梦,梦里面我完成了我的聊天机器人,它叫chatbot,经过我的一番盘问,它向我叙述了它的诞生记 
请尊重原创,转载请注明来源网站 www.shareditor.com 以及原始链接地址

聊天机器人是可行的

我:chatbot,你好!

chatbot:你也好!

我:聊天机器人可行吗?

chatbot:你不要怀疑这是天方夜谭,我不就在这里吗?世界上还有很多跟我一样聪明的机器人呢,你听过IBM公司在2010年就研发出来了的Watson问答系统吗?它可比我要聪明100倍呢

我:噢,想起来了,据说Watson在智力竞赛中竟然战胜了人类选手。但是我了解到它有一些缺陷:因为它还只是对信息检索技术的综合运用,并没有进行各种语义关系的深刻计算,所以它能回答的问题也仅限于实事类的问题,所以它能赢得也就是知识类的智力竞赛,如果你给它出个脑筋急转弯,它就不行了

chatbot:是的呢,所以你任重道远啊

 

聊天机器人工作原理是什么

我:chatbot,我问的每一句话,你都是怎么处理并回答我的呢?

chatbot:我身体里有三个重要模块:提问处理模块、检索模块、答案抽取模块。三个模块一起工作,就能回答你的问题啦

我:是嘛,那么这个提问处理模块是怎么工作的呢?

chatbot:提问处理模块要做三项重要工作:查询关键词生成、答案类型确定、句法和语义分析。

我:那么这个查询关。。。

chatbot:别急别急,听我一个一个讲给你听。查询关键词生成,就是从你的提问中提取出关键的几个关键词,因为我本身是一个空壳子,需要去网上查找资料才能回答你,而但网上资料那么多,我该查哪些呢?所以你的提问就有用啦,我找几个中心词,再关联出几个扩展词,上网一搜,一大批资料就来啦,当然这些都是原始资料,我后面要继续处理。再说答案类型确定,这项工作是为了确定你的提问属于哪一类的,如果你问的是时间、地点,和你问的是技术方案,那我后面要做的处理是不一样的。最后再说这个句法和语义分析,这是对你问题的深层含义做一个剖析,比如你的问题是:聊天机器人怎么做?那么我要知道你要问的是聊天机器人的研发方法

我:原来是这样,提问处理模块这三项工作我了解了,那么检索模块是怎么工作的呢?

chatbot:检索模块跟搜索引擎比较像,就是根据查询关键词所信息检索,返回句子或段落,这部分就是下一步要处理的原料

我:那么答案抽取模块呢?

chatbot:答案抽取模块可以说是计算量最大的部分了,它要通过分析和推理从检索出的句子或段落里抽取出和提问一致的实体,再根据概率最大对候选答案排序,注意这里是“候选答案”噢,也就是很难给出一个完全正确的结果,很有可能给出多个结果,最后还在再选出一个来

我:那么我只要实现这三个模块,就能做成一个你喽?

chatbot:是的

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

聊天机器人的关键技术

我:chatbot,小弟我知识匮乏,能不能告诉我都需要学哪些关键技术才能完成我的梦想

chatbot:小弟。。。我还没满月。说到关键技术,那我可要列一列了,你的任务艰巨了:

1)海量文本知识表示:网络文本资源获取、机器学习方法、大规模语义计算和推理、知识表示体系、知识库构建;

2)问句解析:中文分词、词性标注、实体标注、概念类别标注、句法分析、语义分析、逻辑结构标注、指代消解、关联关系标注、问句分类(简单问句还是复杂问句、实体型还是段落型还是篇章级问题)、答案类别确定;

3)答案生成与过滤:候选答案抽取、关系推演(并列关系还是递进关系还是因果关系)、吻合程度判断、噪声过滤

 

聊天机器人的技术方法

我:chatbot,我对聊天机器人的相关技术总算有所了解了,但是我具体要用什么方法呢?

chatbot:看你这么好学,那我就多给你讲一讲。聊天机器人的技术可以分成四种类型:1)基于检索的技术;2)基于模式匹配的技术;3)基于自然语言理解的技术;4)基于统计翻译模型的技术。这几种技术并不是都要实现,而是选其一,听我给你说说他们的优缺点,你就知道该选哪一种了。基于检索的技术就是信息检索技术,它简单易实现,但无法从句法关系和语义关系给出答案,也就是搞不定推理问题,所以直接pass掉。基于模式匹配的技术就是把问题往已经梳理好的几种模式上去靠,这种做推理简单,但是模式我们涵盖不全,所以也pass掉。基于自然语言理解就是把浅层分析加上句法分析、语义分析都融入进来做的补充和改进。基于统计翻译就是把问句里的疑问词留出来,然后和候选答案资料做配对,能对齐了就是答案,对不齐就对不起了,所以pass掉。选哪个知道了吗?

我:知道了!基于自然语言理解的技术!so easy!妈妈再也不用担心我的学习!o(╯□╰)o

chatbot:好,那我的任务结束啦,我该走了,再见!

我:不要走——不要走——ka ji ma——

 

在呼唤chatbot的声音中,我从梦中醒来,这时我才意识到这是一个梦,揉揉双眼,突然发现床边有一张纸,上面写着:

你会成功的!读了这篇文章的人也会成功的!加油!chatbot


二、词性标注和关键字提取部分


想要做到和人聊天,首先得先读懂对方在说什么,所以问句解析是整个聊天过程的第一步,问句解析是一个涉及知识非常全面的过程,几乎涵盖了自然语言处理的全部,本节让我们尝试一下如何分析一个问句 

问句解析的过程

一般问句解析需要进行分词、词性标注、命名实体识别、关键词提取、句法分析以及查询问句分类等。这些事情我们从头开始做无非是重复造轮子,傻子才会这么做,人之所以为人是因为会使用工具。网络上有关中文的NLP工具有很多,介绍几个不错的:

第一个要数哈工大的LTP(语言技术平台)了,它可以做中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、 高效、精准的自然语言处理技术

第二个就是博森科技了,它除了做中文分词、词性标注、命名实体识别、依存文法之外还可以做情感分析、关键词提取、新闻分类、语义联想、时间转换、新闻摘要等,但因为是商业化的公司,除了分词和词性标注免费之外全都收费

第三个就是jieba分词,这个开源小工具分词和词性标注做的挺不错的,但是其他方面还欠缺一下,如果只是中文分词的需求完全可以满足

第四个就是中科院张华平博士的NLPIR汉语分词系统,也能支持关键词提取

我们优先选择NLPIR

 

NLPIR使用

文档在http://pynlpir.readthedocs.io/en/latest/

首先安装pynlpir库

pip install pynlpir

写个小程序测试一下分词效果:

# coding:utf-8import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )import pynlpirpynlpir.open()
s = '聊天机器人到底该怎么做呢?'
segments = pynlpir.segment(s)
for segment in segments:print segment[0], '\t', segment[1]pynlpir.close()

执行效果如下:

聊天     verb
机器人     noun
到底     adverb
该     verb
怎么     pronoun
做     verb
呢     modal particle
?     punctuation mark

下面我们再继续试下关键词提取效果:

key_words = pynlpir.get_key_words(s, weighted=True)
for key_word in key_words:print key_word[0], '\t', key_word[1]

输出如下:

聊天     2.0
机器人     2.0

 

从这个小程序来看,分词和关键词提取效果很好

 

下面我们再来试验一个,这一次我们把分析功能全打开,部分代码如下:

s = '海洋是如何形成的'
segments = pynlpir.segment(s, pos_names='all')

执行后效果如下:

海洋     noun
是     verb:verb 是
如何     pronoun:interrogative pronoun:predicate interrogative pronoun
形成     verb
的     particle:particle 的/底
海洋     2.0
形成     2.0

 

如果我们把segments在加上一个参数pos_english=False,也就是不使用英语,那么输出就是

海洋     名词
是     动词:动词"是"
如何     代词:疑问代词:谓词性疑问代词
形成     动词
的     助词:的/底
海洋     2.0
形成     2.0

解释一下

这里的segment是切词的意思,返回的是tuple(token, pos),其中token就是切出来的词,pos就是语言属性

调用segment方法指定的pos_names参数可以是'all', 'child', 'parent',默认是parent, 表示获取该词性的最顶级词性,child表示获取该词性的最具体的信息,all表示获取该词性相关的所有词性信息,相当于从其顶级词性到该词性的一条路径

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

词性分类表

查看nlpir的源代码中的pynlpir/docs/pos_map.rst,可以看出全部词性分类及其子类别如下:

    POS_MAP = {'n': ('名词', 'noun', {'nr': ('人名', 'personal name', {'nr1': ('汉语姓氏', 'Chinese surname'),'nr2': ('汉语名字', 'Chinese given name'),'nrj': ('日语人名', 'Japanese personal name'),'nrf': ('音译人名', 'transcribed personal name')}),'ns': ('地名', 'toponym', {'nsf': ('音译地名', 'transcribed toponym'),}),'nt': ('机构团体名', 'organization/group name'),'nz': ('其它专名', 'other proper noun'),'nl': ('名词性惯用语', 'noun phrase'),'ng': ('名词性语素', 'noun morpheme'),}),'t': ('时间词', 'time word', {'tg': ('时间词性语素', 'time morpheme'),}),'s': ('处所词', 'locative word'),'f': ('方位词', 'noun of locality'),'v': ('动词', 'verb', {'vd': ('副动词', 'auxiliary verb'),'vn': ('名动词', 'noun-verb'),'vshi': ('动词"是"', 'verb 是'),'vyou': ('动词"有"', 'verb 有'),'vf': ('趋向动词', 'directional verb'),'vx': ('行事动词', 'performative verb'),'vi': ('不及物动词', 'intransitive verb'),'vl': ('动词性惯用语', 'verb phrase'),'vg': ('动词性语素', 'verb morpheme'),}),'a': ('形容词', 'adjective', {'ad': ('副形词', 'auxiliary adjective'),'an': ('名形词', 'noun-adjective'),'ag': ('形容词性语素', 'adjective morpheme'),'al': ('形容词性惯用语', 'adjective phrase'),}),'b': ('区别词', 'distinguishing word', {'bl': ('区别词性惯用语', 'distinguishing phrase'),}),'z': ('状态词', 'status word'),'r': ('代词', 'pronoun', {'rr': ('人称代词', 'personal pronoun'),'rz': ('指示代词', 'demonstrative pronoun', {'rzt': ('时间指示代词', 'temporal demonstrative pronoun'),'rzs': ('处所指示代词', 'locative demonstrative pronoun'),'rzv': ('谓词性指示代词', 'predicate demonstrative pronoun'),}),'ry': ('疑问代词', 'interrogative pronoun', {'ryt': ('时间疑问代词', 'temporal interrogative pronoun'),'rys': ('处所疑问代词', 'locative interrogative pronoun'),'ryv': ('谓词性疑问代词', 'predicate interrogative pronoun'),}),'rg': ('代词性语素', 'pronoun morpheme'),}),'m': ('数词', 'numeral', {'mq': ('数量词', 'numeral-plus-classifier compound'),}),'q': ('量词', 'classifier', {'qv': ('动量词', 'verbal classifier'),'qt': ('时量词', 'temporal classifier'),}),'d': ('副词', 'adverb'),'p': ('介词', 'preposition', {'pba': ('介词“把”', 'preposition 把'),'pbei': ('介词“被”', 'preposition 被'),}),'c': ('连词', 'conjunction', {'cc': ('并列连词', 'coordinating conjunction'),}),'u': ('助词', 'particle', {'uzhe': ('着', 'particle 着'),'ule': ('了/喽', 'particle 了/喽'),'uguo': ('过', 'particle 过'),'ude1': ('的/底', 'particle 的/底'),'ude2': ('地', 'particle 地'),'ude3': ('得', 'particle 得'),'usuo': ('所', 'particle 所'),'udeng': ('等/等等/云云', 'particle 等/等等/云云'),'uyy': ('一样/一般/似的/般', 'particle 一样/一般/似的/般'),'udh': ('的话', 'particle 的话'),'uls': ('来讲/来说/而言/说来', 'particle 来讲/来说/而言/说来'),'uzhi': ('之', 'particle 之'),'ulian': ('连', 'particle 连'),}),'e': ('叹词', 'interjection'),'y': ('语气词', 'modal particle'),'o': ('拟声词', 'onomatopoeia'),'h': ('前缀', 'prefix'),'k': ('后缀' 'suffix'),'x': ('字符串', 'string', {'xe': ('Email字符串', 'email address'),'xs': ('微博会话分隔符', 'hashtag'),'xm': ('表情符合', 'emoticon'),'xu': ('网址URL', 'URL'),'xx': ('非语素字', 'non-morpheme character'),}),'w': ('标点符号', 'punctuation mark', {'wkz': ('左括号', 'left parenthesis/bracket'),'wky': ('右括号', 'right parenthesis/bracket'),'wyz': ('左引号', 'left quotation mark'),'wyy': ('右引号', 'right quotation mark'),'wj': ('句号', 'period'),'ww': ('问号', 'question mark'),'wt': ('叹号', 'exclamation mark'),'wd': ('逗号', 'comma'),'wf': ('分号', 'semicolon'),'wn': ('顿号', 'enumeration comma'),'wm': ('冒号', 'colon'),'ws': ('省略号', 'ellipsis'),'wp': ('破折号', 'dash'),'wb': ('百分号千分号', 'percent/per mille sign'),'wh': ('单位符号', 'unit of measure sign'),}),}

好,这回我们一下子完成了分词、词性标注、关键词提取。命名实体识别、句法分析以及查询问句分类我们之后再研究

这篇关于浅谈聊天机器人 ChatBot 涉及到的技术点 以及词性标注和关键字提取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599164

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

Oracle Start With关键字

Oracle Start With关键字 前言 旨在记录一些Oracle使用中遇到的各种各样的问题. 同时希望能帮到和我遇到同样问题的人. Start With (树查询) 问题描述: 在数据库中, 有一种比较常见得 设计模式, 层级结构 设计模式, 具体到 Oracle table中, 字段特点如下: ID, DSC, PID; 三个字段, 分别表示 当前标识的 ID(主键), DSC 当

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87