标签归档:自动问答

夸夸聊天机器人升级:从随机到准个性化

来,你们要的夸夸聊天机器人升级了,针对问题内容进行“准个性化”回答,目前可以凑合用,但是聊胜于无,欢迎来撩,使用方法,关注公众号AINLP,后台对话即可:

自从《一行Python代码实现夸夸聊天机器人》发布后,有不少同学期待着夸夸聊天机器人的升级。但是巧妇难为无米之炊,所以我准备了夸夸语料库:《为了夸夸聊天机器人,爬了一份夸夸语料库》。有了夸夸问答语料之后,针对聊天机器人或者智能问答就有很多方法可以操作,最直接的一个想法就是计算问题与夸夸语料库中的标题(以及内容)的语义相似度,然后取最匹配问题的答案作为结果返回。

我大概就是是这样操作的,首先对语料库进行了简单的清洗和重组,清洗掉没有答案的,以及作者自己回答的答案,然后将每个问题的答案组合为list作为随机答案。不过更直接一些,只计算问题和标题的相似度,按一定的阈值进行过滤,所以这个版本,还存在很多问题,大家先凑合着用,后续还有升级计划。

这方面比较关键的一个问题就是相似问题匹配或者句子语义相似度计算。关于文本相似度,词语或者短语级别的语义相似度在词向量范畴下解决的很漂亮,感兴趣的同学可以体验:《相似词查询:玩转腾讯 AI Lab 中文词向量》,但是到了句子级别或者文档级别,目前貌似还没有很漂亮的解决方案,或者我调研的不够,有线索的同学欢迎留言探讨。

最后关于如何使用这个夸夸聊天机器人,首先关注我们的公众号AINLP,然后后台和聊天机器人对话即可,不过需要一些关键字触发夸夸模式,譬如“。。。求夸。。”, “。。。求赞。。”, “。。。,求鼓励”, “。。。, 求表扬”, 或者 “。。夸我。。。。”, “。。。鼓励我。。。”等等,否则进入闲聊模式。关于聊天机器人,目前希望大家不要抱太高的期望,把它当傻子即可:

聊天过程中如果问题没有匹配上或者过于简单,会回退到随机模式:

当然,这里选的case一定是准备过的,还有一些bad case没有给你们看,欢迎测试,欢迎建议,特别是如何匹配问题域的建议,非常欢迎。
继续阅读

Start your future on Coursera today.

为了夸夸聊天机器人,爬了一份夸夸语料库

上周为了娱乐,写了一篇《一行Python代码实现夸夸聊天机器人》,虽然只有几十条人工整理的通用夸夸语料,但是貌似也能应付一些简单需求。不过这篇文章在微博、AINLP微信公众号、知乎专栏推送后,还是有很多同学强烈建议丰富语料库。这个建议其实是很不错的,所以周末认真调研了一番,决定从豆瓣上的夸夸小组入手,这里面有很多现成的语料,至于混进微信、QQ夸夸群,收集语料,我觉得不太现实。

豆瓣上有很多夸夸小组,貌似最大的莫过于“相互表扬小组”,最近因为这股夸夸风,据说这个小组已经开始限制加入新人了,我针对这个小组写了一个小爬虫,爬了一份夸夸语料,总计2万6千多个帖子,采集了标题、内容和回复的相关信息,保存为json格式,1个帖子1条,大概是这样的:

{"title": "因为没有男朋友,求夸", "url": "https://www.douban.com/group/topic/135844056/", "author": "71277500", "last_reply_time": "03-17 16:40", "content": "笨人原本一个人好好的,都单了两三年了,一直觉得挺开心的。最近不知道抽了什么风,突然特别想找个男朋友。但是但是,偏偏找不到靠谱的男朋友!现在一个人睡不着,没想明白这事,求夸。\n", "replies_num": "14", "replies": [{"content": "你这么可爱肯定会有一个很好很好的人在等你!", "post_id": "135844056", "comment_id": "1834208628", "user_id": "189783421", "pub_time": "2019-03-16 01:08:38"}, {"content": "最好的肯定要晚点出现哦", "post_id": "135844056", "comment_id": "1834208775", "user_id": "189783421", "pub_time": "2019-03-16 01:08:52"}, {"content": "“笨人”,刚看到开头就笑了", "post_id": "135844056", "comment_id": "1834282396", "user_id": "192799520", "pub_time": "2019-03-16 07:50:50"}, {"content": "一个好可耐的宝宝", "post_id": "135844056", "comment_id": "1834282931", "user_id": "192799520", "pub_time": "2019-03-16 07:52:24"}, {"content": "也许明天就出现了", "post_id": "135844056", "comment_id": "1834290527", "user_id": "185989534", "pub_time": "2019-03-16 08:11:38"}, {"content": "你知道有一个适合你的那个在等你吧", "post_id": "135844056", "comment_id": "1834308924", "user_id": "192597621", "pub_time": "2019-03-16 08:46:23"}, {"content": "如果没有男朋友,肯定是你太优秀", "post_id": "135844056", "comment_id": "1834313229", "user_id": "171520899", "pub_time": "2019-03-16 08:53:19"}, {"content": "没有男朋友多好,省钱", "post_id": "135844056", "comment_id": "1834320533", "user_id": "130379006", "pub_time": "2019-03-16 09:03:42"}, {"content": "哈哈,谢谢好可爱的你呀!", "post_id": "135844056", "comment_id": "1835717925", "user_id": "71277500", "pub_time": "2019-03-17 16:16:58"}, {"content": "有道理", "post_id": "135844056", "comment_id": "1835718260", "user_id": "71277500", "pub_time": "2019-03-17 16:17:22"}, {"content": "也许吧,哈哈哈", "post_id": "135844056", "comment_id": "1835718395", "user_id": "71277500", "pub_time": "2019-03-17 16:17:32"}, {"content": "原本想写本人,一不小心错别字,看样子还是很符合的", "post_id": "135844056", "comment_id": "1835719069", "user_id": "71277500", "pub_time": "2019-03-17 16:18:17"}, {"content": "没有,只是单纯地觉得很可爱,很符合你写一段话的文风😄ཽ……退一步讲,古人讲究谦辞,称呼自己要自谦,本人要说鄙人,你用“笨人”活泼可爱,也能称得上是一种自谦,还是你自创的,有趣", "post_id": "135844056", "comment_id": "1835734308", "user_id": "192799520", "pub_time": "2019-03-17 16:35:21"}, {"content": "哈哈,有道理,我懂了", "post_id": "135844056", "comment_id": "1835738373", "user_id": "71277500", "pub_time": "2019-03-17 16:40:00"}]}

写到这里,估计还是会有同学准备留言索要数据了,因为即使上次区区几十条语料,随便google一下就可以得到的“夸夸语料”都有同学留言索取,所以这里准备多说几句,关于夸夸聊天机器人,关于夸夸语料库。

上个周,在看到清华刘知远老师的评论后,我是用娱乐的心态写了上周的那篇文章:《一行Python代码实现夸夸聊天机器人》,没想到,反响还不错,甚至有一些同学提了很好的建议。所以当周末认真思考这件事的可行性时,突然觉得,夸夸聊天机器人是一个绝好的机器学习实践项目:仅从一个idea出发,怎样做一个不错的夸夸聊天机器人?

作为自然语言处理四大难题之一的自动问答,个人觉得目前还远远不够“智能”,虽然市面上有很多聊天机器人,但是观察来看,以娱乐的心态来对话是可以的,或者完成一些简单的任务是没有问题的,例如询问天气,但是如果抱着很高的期望,很多轮对话下来,基本可以认为这个聊天机器人“不靠谱”, “答非所问”,甚至是个“智障”。虽然通用领域的智能问答或者聊天机器人还有很长的路要走,但是如果把这个问题限定在垂直领域或者很小的需求范围,那么问题可能就有解了,例如夸夸聊天机器人,需求就很简单:做啥都夸。简单的就是随便夸,复杂一点或者个性化的就是夸某个点、某件事、某个人,前者吗,就是上次《一行Python代码实现夸夸聊天机器人》做得事情,准备一些通用夸奖的语料,然后随机夸;后者,需要准备一些夸夸规则和夸夸语料库。

开个玩笑,二十一世纪什么最贵?当然是数据了,确切的说,是面向特定任务的特定数据。现在不缺机器学习框架,不缺算法,不缺机器,甚至不缺“人”,缺什么,就缺数据。这段时间,因为夸夸群的兴起,很多人看到了商机,说不定哪一天你的老板把你找来,直接给扔给你一个任务:做一个夸夸聊天机器人?怎么办,当然要调研啦。花了大半天时间,你了解了聊天机器人的前世今生,发现了人工智能标记语言AIML,知道了Chatbot的种种玩法,基于规则的、基于机器学习模型的、基于知识图谱的等等等等,甚至还有很多智能问答开源框架可以直接套用,最后,当你兴高采烈的准备动手实践的时候,你突然发现,还没有数据,你需要数据,需要夸夸语料库。
继续阅读

Start your future on Coursera today.

立委科普:问答系统的前生今世

李维老师的文章看起来就是过瘾,这篇文章也是刚刚在科学网上看到的,还有下一篇,感兴趣的读者可以继续关注。前段时间IBM超级计算机沃森(Watson)刚刚出了一把风头,也让关注自然语言处理的读者更关注起自动问答系统了,李维老师的这篇博文无疑让我们对于问答系统的前世今生又有了一次深刻的了解,所以厚着脸皮,以下继续全文转载自李维老师的博文:立委科普:问答系统的前生今世

上周信笔涂鸦写了个不伦不类的科普(【立委科普:从产业角度说说NLP这个行当】),写完自我感觉尚可,于是毛遂自荐要求加精:“自顶一哈:不用谦虚,这个应该加精。也不枉我费了大半天的时辰。” 本来是玩笑话,没成想科网的编辑MM在两小时内就真地加精上首页了。前几周还在抱怨,怕被编辑打入另册,正琢磨献花还是金币以求青睐,没想到这么快就峰回路转,春暖花开。响鼓不用重敲,原来还是要发奋码字才行,花言巧语的不行。得,一鼓作气,再码两篇。

言归正传,第一篇先介绍一下问答系统(Question Answering system)的来龙去脉。第二篇专事讲解问答系统中的三大难题 What,How 与 Why。

一 前生

传统的问答系统是人工智能(AI: Artificial Intelligence)领域的一个应用,通常局限于一个非常狭窄专门的领域,基本上是由人工编制的知识库加上一个自然语言接口而成。由于领域狭窄,词汇总量很有限,其语言和语用的歧义问题可以得到有效的控制。问题是可以预测的,甚至是封闭的集合,合成相应的答案自然有律可循。著名的项目有上个世纪60 年代研制的LUNAR系统,专事回答有关阿波罗登月返回的月球岩石样本的地质分析问题。SHRDLE 是另一个基于人工智能的专家系统,模拟的是机器人在玩具积木世界中的操作,机器人可以回答这个玩具世界的几何状态的问题,并听从语言指令进行合法操作。这些早期的AI探索看上去很精巧,揭示了一个有如科学幻想的童话世界,启发人的想象力和好奇心,但是本质上这些都是局限于实验室的玩具系统(toy systems),完全没有实用的可能和产业价值。随着作为领域的人工智能之路越走越窄(部分专家系统虽然达到了实用,基于常识和知识推理的系统则举步维艰),寄生其上的问答系统也基本无疾而终。倒是有一些机器与人的对话交互系统 (chatterbots)一路发展下来至今,成为孩子们的网上玩具(我的女儿就很喜欢上网找机器人对话,有时故意问一些刁钻古怪的问题,程序应答对路的时候,就夸奖它一句,但更多的时候是看着机器人出丑而哈哈大笑。不过,我个人相信这个路子还大有潜力可挖,把语言学与心理学知识交融,应该可以编制出质量不错的机器人心理治疗师。其实在当今的高节奏高竞争的时代,很多人面对压力需要舒缓,很多时候只是需要一个忠实的倾听者,这样的系统可以帮助满足这个社会需求。要紧的是要消除使用者 “对牛弹琴”的先入为主的偏见,或者设法巧妙隐瞒机器人的身份,使得对话可以敞开心扉。扯远了,打住。)
继续阅读

Start your future on Coursera today.

自然语言处理对于IBM超级计算机沃森(Watson)意味着什么?

  这几天估计很多人都在关注IBM超级计算机沃森(Watson)在美国最受欢迎的智力竞猜电视节目《危险边缘》中的表现,而在经历了三天的比赛后,沃森终于击败了该节目历史上两位最成功的选手肯-詹宁斯和布拉德-鲁特,成为《危险边缘》节目新的王者:IBM超级计算机在智力问答比赛中击败人类。与这场“人机大战”相关的信息中,几乎都会提及“自然语言处理”,毕竟沃森首先需要突破的就是能“理解人类的语言”,这当然是“自然语言处理”的份内之事。而在我看来,IBM沃森看起来更像一个超级的“自动问答”系统,当然,沃森背后凝聚的岂止是“自动问答”,它是一个包含了海量数据处理,机器学习,信息提取,文本分析,知识推理,自动问答等众多技术的的超级“人工智能”结合体。
  下午在看到这个消息时,我有一个很强烈的念头,要写一篇“IBM超级计算机沃森(Watson)背后的自然语言处理技术”,当然,即使写出来,也只能是一个旁观者的角度,需要一定的素材去挖掘。不过刚好有一篇相关的新闻给了我一些启示“IBM宣布八所大学参与沃森计算机系统的开发”:

“我们很高兴与这些在其各自领域表现优异的大学和专家们进行合作,他们可帮助推动作为 IBM沃森系统的支柱的问答技术的进步”,IBM沃森项目组负责人 David Ferrucci 博士表示,“《危险边缘》Jeopardy! 挑战的成功将突破与计算技术的处理和理解人类语言的能力有关的障碍,并将对科学、技术和商业带来深远的影响。”

  这篇文章下面对于每所大学的贡献都给与了简要的描述,通读下来,会发现“自然语言处理”技术在其中扮演着重要的角色。特别是麻省理工学院:

来自麻省理工学院,由计算机科学及人工智能实验室首席研究科学家 Boris Katz 带领的一个研究团队开创了一个名为 START 的在线自然语言问题回答系统,该系统能够使用来自半结构化和结构化信息存储库的信息来非常准确地回答问题。对沃森系统的根本贡献是将问题细分成简单的子问题,以便迅速收集相关回答,然后将这些回答汇合起来形成最终答案的能力。沃森系统的架构还利用了由麻省理工学院开创的对象-属性-值数据模型,该模型支持对半结构化数据源中的信息进行有效的检索,以回答自然语言问题。

  这里面提到的自然语言问答系统START很有意思,有兴趣的读者可以试着问两个问题看看:”What is start" and "How old are you"! 继续阅读

Start your future on Coursera today.