聊天机器人双向搜索知识库的模糊匹配
2018-02-26赵素萍
赵素萍
摘要
目前,无论是微信、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.