1、问题解决型实现技术解决方案架构及开发流程小Y(智能机器人)问题解决型机器人问题解决型机器人,存在的目的是为了帮用户解决具体问题,例如:售前咨询、售后报修、订机票、酒店、餐厅座位等等需要提供给用户自己都不知道的信息-知识库1.理解用户问题,知道用户在问什么2.将用户的问题转化为对知识库的查询问题理解查询知识库构建知识库查询多轮对话的上下文管理提问:今天北京多少度啊?回答:35度提问:有雾霾吗?(北京有雾霾吗?)回答:空气质量优。提问:那上海呢?(上海有雾霾吗?)回答:空气质量也是优。结合上下文聊天机器人解决方案自然语言处理、文本挖掘、知识图谱知识库中存储的是一对对的“问题-答案”对(QA Pai
2、r)。这些Pair可以是人工构建的,源于客户系统或者旧有知识库的,也可以是从互联网上爬取下来的。当用户输入问题后,将其和知识库现有的标准问题进行一一比对,寻找与用户问题最相近的标准问题,然后将该问题组对的答案返回给用户。用户问题-标准问题-答案解决方案一用户问题-标准问题的匹配方法可以是关键词匹配(包括正则表达式匹配);也可以是先将用户问题和标准问题都转化为向量,再计算两者之间的距离(余弦距离、欧氏距离、交叉熵、Jaccard距离等),找到距离最近且距离值低于预设阈值的那个标准问题,作为查找结果。但关键字匹配覆盖面太小。距离计算的话,在实践中比对出来的最近距离的两句话,可能在语义上毫无关联,甚
3、至满拧(比如一个比另一个多了一个否定词)“关键词”解决方案二知识库中存储的不是问题-答案对,而仅存储答案(文档)。当接收到用户问题后,直接拿问题去和知识库中的一篇篇文档比对,找到在内容上关联最紧密的那篇,作为答案返回给用户。用户问题-答案解决方案三从用户的问题当中识别出用户的意图,并抽取这个意图针对的实体。相应的,知识库内存储的知识,除了包含知识内容本身之外,还应该在结构上能够表示知识之间的关联关系。在提取了意图和实体后,构造出对知识库的查询(Query),实施查询,得出结果后生成回答,回复给用户。用户问题-语义理解-知识库查询-查询结果生成答案聊天机器人实现技术语义理解NLU意图识别实体抽取
4、用来识别用户所提问题的意图,也就是用户希望做一件什么事用于提取用户对话中所提供的和意图相关的参数(实体),例如时间、地点等Case1:有粉色的手机壳吗?意图:商品推荐;实体:商品类型-手机,商品颜色-粉色。Case2:00183号商品快递到伊犁邮费多少?意图:查询邮费;实体:目的地-伊犁,商品Id-00183。Case3:02465号商品有保修吗?意图:保修查询;实体:商品Id-02465。举个例子,小明是一家小淘宝店主,他要为自己的淘宝店开发一款客服机器人,主要回答和商品属性(品牌、价格、邮费、售后等)相关的问题。Case2:00183号商品快递到伊犁邮费多少?意图:商品查询;实体:目的地-
5、伊犁,商品Id-00183,商品属性-邮费。Case3:02465号商品有保修吗?意图:商品查询;实体:商品Id-02465,商品属性-保修。具体怎么定义,要与知识库的结构及中间控件(语义理解+对话管理)结合起来决定,怎么简单怎么来 意图识别-分类模型分类模型和 seq2seq 判别模型的训练都属于有监督学习,因此,所有的训练数据都是标注数据。因此,在进入训练阶段前必须要经过一个步骤:人工标注。如果大家真的在工作中应用机器学习,标注就是无法逾越的脏活累活。实体抽取-Seq2Seq判别模型人工标记语料(Utterance)意图(Intent)00183商品Id号商品快递到伊犁目的地邮费商品属性多
6、少?商品查询02465商品Id号商品有保修商品属性吗?商品查询订一张数量2018.12.1号时间北京出发地到南京目的地的机票订机票知识库、知识查询和结果返回知识库类型构造查询回答生成关系型数据库根据意图和实体,确定tabmeName,where条件,和目标column等要素,构建SQL Query将SQL Query的结果填注到答案模板中,生成回答问题的自然语言API根据意图和实体,确定要调用的API类型和参数,构造Http Request将API返回的结果填注到答案模板中,生成回答问题的自然语言文本文件(json/xml等)根据意图和实体,确定对应的文件路径和对其中存储数据结构的查询将获取的
7、内容填注到模板中,生成回答问题的自然语言例如,我们选择 MySQL 作为小明的淘宝店小助手的知识库。则商品相关数据都存储在 table 中。知识库里有一个 Table,名字叫product_query,其中每一个 row 对应一种产品,每个 column 对应一个属性。Case2:00183号商品快递到伊犁邮费多少?意图:商品查询;实体:目的地-伊犁,商品Id-00183,商品属性-邮费。Case3:02465号商品有保修吗?意图:商品查询;实体:商品Id-02465,商品属性-保修。table_name:product_querycolumn:目的地-destination商品Id-prod
8、uct_id邮费-postage保修-guaranteeCase2:SELECT postage FROM product_query WHERE product_id=00183 AND destination=伊犁Case3:SELECT guarantee FROM product_query WHERE product_id=02465Query 在 MySQL 中运行的结果(比如是26元),被放到一个预置的针对商品查询的答案模板里,生成答案。预置模板:$商品Id号商品的$商品属性是$Query_Result。生成答案:00183号商品的邮费是26元。上下文管理例如:在商品查询的目标属
9、性为邮费时,目的地缺失,这时候就需要主动要求用户输入对应的值。思路:1.在配置意图和实体模板时,需设置邮费相依赖的实体(商品ID、目的地)2.创建意图表,实体表,建立意图表与实体表间的关系,实体与实体间的关系3.识别出意图后,提取实体,如果发现缺失,则一个接一个提示用户输入对应的指(配置回答模板)机器人反问每次用户新输入的信息都要先进行语言理解,再结合目前已经存储的上下文信息,或更新 Context,或读取之前的 Context 作为补充信息。可以将意图,和几种实体类型对应的实体值存储在 Context 中。当新的用户语句输入后,若能从中提取出新的意图或实体值,则用新值更新 Context,否
10、则,读入现有的对应实体值,作为本次语言理解的补充。架构及开发流程问答咨询.知识主力销售引导业务办理Web微信APP聊天工具.中控调度策略第三方系统行业知识互联网数据用户画像搜索引擎(语义检索/文档检索.)静态知识FAQFAQ管理动态知识KGKG构建管理意图训练实体抽取流程设计高频问题突增问题满意度NLP知识包智能知识库会话管理数据监控产品架构用户问题AIML格式常见问题模板匹配构建查询意图识别实体抽取语义理解查询知识库填注模板答案处理关键词提取自然语言处理ES文档查询构造Jena查询构建知识图谱语料获取网络爬取开源语料库用户日志语料人工编写语料预处理人工标记模板配置业务咨询阅读用户日志模型训练
11、分词Word2Vec卷积神经网络Keras文本分类命名实体识别词性标注TensorFlow语义理解NLU保存模型知识图谱Knowledge Graph本体构建网络爬取客户文档本体库实体词典语义解析本体查询查询陈述构造查询语句执行查询语句谓语消歧陈述本体库命名实体识别歧义陈述构建依存句法分析实体消歧陈述语义图构建语义图陈述构建谓语消歧陈述语义理解(意图识别、实体抽取):Python+TensorFlow+RNN等知识图谱:Java+NLP知识库存储:数据库+文本文件(json/xml等)API接口调用:Java+HttpRequest(RESTful)前端:知识库的整理(以什么格式)、意图创建、实体创建、常见问题、模板配置、人工标记完毕,谢谢大家!