APP下载

聊天机器人双向搜索知识库的模糊匹配

2018-02-26赵素萍

电子技术与软件工程 2018年16期
关键词:知识库

赵素萍

摘要

目前,无论是微信、LINE、Whatsapp还是FacebookMessenger,都吸引商家拼命开发互动良好的聊天机器人。针对相同语义的不同提问方式,如何得到相同或相似的回答是本人研究的重点。本人以基于ASP.NET开发平台开发出的聊天机器人为例,分析如何使用双向搜索知识库模糊匹配的方法,提高聊天机器人回答问题的正确率。

【关键词】聊天机器人 知识库 模糊匹配

1 聊天机器人的发展现状

60%的年轻人曾经用过聊天机器人,用户更喜欢简单的界面。有什么不明白直接提问,让聊天机器人来完成服务。企业老板们的选择也更倾向于欢聊天机器人。因为聊天机器人除了不用发工资外,更重要的是24小时都可运作。

不同的人对同一件事会有完全不同的描述方式,那么这时候人们将如何与聊天机器人进行交互?即对于语义相同的输入,应该生成相似的回答。例如,你想在“你多大了?”、“几岁了”和“你的年龄是多少?”等相同语义的问题上得到同样的回答。然而事实是:生成式系统的普遍问题是它们往往能生成像“太好了!”或“我不知道”这样的能适用于许多输入情况的普遍回复。谷歌的智能回复(SmartReply)常常用“我爱你”回复一切。本文就如何提高聊天机器人的智能性,提高回答问题的正确率展开了研究。

2 模糊匹配

聊天机器人回答问题的流程和人回答问题的流程是一致的,先思考问题,分析问题中包含的关键词,再将关键词连接创造出相应的聊天语境,然后根据语境想出对应的答案。聊天机器人则是搜索知识库然后找到匹配的问题并给出相应的答案。

模糊匹配指将知识库中的记录行与用户问题比较,若记录行包含用户问题中的关键字,则认为查找成功。下面以c#为开发语言,以聊天机器人软件为例介绍模糊匹配。

首先打开知识库,知识库是一个记事本文件。假设有一条记录为:

“你是哪的山西太原”

具体思路为聊天机器人拿着用户的问题去知识库中模糊查找。模糊查找就是不需要两者完全相同,只需要包含关即可。若用户问“哪的”,知识库中的“你是哪的”包含“哪的”,所以会把答案给出。同时,一旦找到结果便不需要继续查找,立刻退出,否则会增加计算机的工作量,同时也能减少用户的等待时间。核心代码如下:

if(Reader.Contains(question))

{findout=true;break;}

找到记录行后,截取出空格后的文字即为答案,所以需要使用循环依次判断并找出空格后退出,然后从空格的下一个字符开始截取剩下的字符串即为答案,截取字符串的函数为Substring(开始截取的位置),主要代码如下,

for(i=0;i

{if(Reader[i]==")break;}

answer=Reader.Substring(i+1);

比如你的籍贯、提供下你的住址、家是哪的、家住哪里,这四个问题的答案是完全一样的,而且同一个答案的问题数远不止这些。也就是说用户的问法千奇百怪,若用户的问题改为“你的籍贯”,而这个问题的答案也是一样的,如何让不同的问题找到相同的答案呢?这就像我们人类的思维一样,需要罗列出同义词,并将其加载到知识库中。知识库中的格式就应该改为:

山西太原你的籍贯哪的家是哪里住址

核心代码为:

for(i=0;i

{if(Reader[i]==")break;}

answer= Reader.Substring(0,i+1);

当用户找到匹配的问题后,将答案放到记录的开始处,那么执行流程就变成了循环找到第一个空格的位置然后结束循环,返回位置即可。

3 双向模糊匹配

当用户问到“你的住址是?”。我们可以发现哪怕使用模糊查询,知识库中的问题并没有包含该问题的问题记录,所以单向的拿着问题去找记录并模糊匹配,并不能找到记录。这就需要用到双向模糊匹配。双向模糊匹配指记录行中包含关键字,程序中不仅要拿着问题到记录中模糊匹配,而且要将循环到的记录行取出,并将记录中的每一个问题记录与用户问题模糊匹配,若还是匹配不上则找下一条记录。例如还是上面的记录和问题,拿着用户问题“你的住址是?”去记录问题中模糊匹配,发现四个记录问题都不包含用户问题。而第四个记录问题“住址”却在用户问题中,如果拿着记录问题去和用户问题模糊匹配,即可匹配成功。相关代码如下:

string[] keyword=reder.Trim().Split('');

for(int i=1;i

{if(question.Contains(keyword[i]))

{findout=true;break;}

}

第一行:Trim函数是去掉记录行中首尾的空格,split函数是去掉记录行中的空格,并将分割后的字符串放到数组中,然后从数组的第二个元素开始依次搜寻,因为第一个元素为答案。

剩下行:循环查找数组中的其他元素,如果当前元素包含在用户问题中,查找发现记录问题‘住址”包含在用户问题“你的住址是?”中,则模糊匹配成功并退出循环。返回找到的答案“山西太原”。

4 结论

通过实验发现,使用双向模糊查询可以极大的提高聊天机器人回答问题的正确率。然而目前市面上的聊天机器人普遍到了一个瓶颈期,首先机器人回答问题时先要考虑聊天的上下文环境,如当回答了“山西太原”后,客户问“太原哪的”,应该具体到太原的哪个区或哪个县。其次针对用户复杂的提问,聊天机器人不能正确领会提问的意图,如何能提取用户问题的关键词,并整合出确定的语义,是我下一步研究的方向。聊天机器人的使用已经被越来越多的客户和厂商接受,然而聊天机器人的功能还有待完善。我很荣幸能成为聊天机器人不断发展完善的见证者。如何让聊天机器人更智能是我们不懈追求的方向,如何使聊天机器人通过图灵测试是我们最终奋斗的目标。我愿意为人工智能奉献自己的一份绵薄之力。

参考文献

[1]杜舟.下一座金矿移动互联网[J].IT时代周刊.2009(04)

[2]姚飞,张成昱,陈武.清华智能聊天机器人“小圖”的移动应用[J].现代图书情报技术,2014(Z1).

[3]黄际洲.聊天机器人知识库自动抽取算法的研究与实现[D].重庆大学,2006.

猜你喜欢

知识库
汉语近义词辨析知识库构建研究
基于TRIZ与知识库的创新模型构建及在注塑机设计中的应用
美国高校机构知识库开放获取政策调查
杭锦旗地区辫状河定量地质知识库建立及应用
高速公路信息系统维护知识库的建立和应用
基于全方位服务机制建设机构知识库研究
基于Drupal发布学者知识库关联数据的研究
卫星状态智能诊断知识库设计方法
基于决策技术和粗糙集理论的诊断知识库构建研究
全球开放存取知识库发展现状分析与启示