NSYSU-CSE97 板


LINE

※ [本文转录自 KS93-304 看板] 作者: ritandy ( ) 看板: KS93-304 标题: [转录]【转载】MSN聊天机器人开发揭秘 时间: Mon Dec 6 19:53:25 2004 ※ [本文转录自 MSNmessenger 看板] 作者: wcr (wcr) 看板: MSNmessenger 标题: 【转载】MSN聊天机器人开发揭秘 时间: Mon Dec 6 19:13:01 2004 【转载】MSN聊天机器人开发揭秘 用.NET开发MSN聊天机器人 北京 Stainless 我不是开发人员,不是高手,就是自己比较爱玩。在技术上,没有什麽喜欢摸索的精 神,而是喜欢投机取巧。在这篇文章里,你也不能“少劳而获”地通过我的机器人修 改出一个自己的机器人,因为自己觉得程序写的比较臭,所以不会open source。但 是,如果你对.net或者C#有点了解的话,相信从这篇文章里,你可以找到一切所需的 资源,来开发一个自己的,绝对可用的msn机器人。要和我的机器人聊天,可以加 [email protected],名字叫“塔奇克马”,是从动画片攻壳机动队得名。同时,你 也可以去http://www.guanqun.com,那里有一个和这个MSN机器人一样的网页聊天机 器人,可以先聊聊看,尽量用中文聊。 这不是一篇新手入门的文章,如果你不知道什麽是.NET,不了解资料库方面的哪怕是 一丁点东西,建议你先看看相关资料。同时,也希望真正的高手不要笑话打击我,毕 竟一个普通的,非开发人员的电脑爱好者通过摸索,并告诉大家怎样做一个好玩的东 西,不是一件错事。 一、为什麽要做MSN聊天机器人 最重要的是因为很好玩。你的MSN机器人说的话,一定体现你的性格(如果你希望这 样的话)。当然,这是我的理由,作这个机器人的初衷仅仅是突然有一天自己想做。 也许你也希望你的机器人可以帮助你做一些事情,类似一个专家系统或是客服系统等 等。 现在MSN机器人有很多,如果你加过MSN机器人,我想你列表上最多的是一个叫做“小 布”或者是他兄弟姐妹一大堆的家伙们( http://www.9zi.com ),可能基於负载的考 虑,每次上线你都可能被他们一家子的一堆加入好友的请求包围。还有一些所谓的“ 免费短信”机器人,我一直就是做SP的,我直接说,为了不耽误你们赚钱,我不对这 种机器人加以什麽评论。可以提一下MsgerAI([email protected] )这个机器人 ,开发它的这位老兄非常希望做一个可以像人一样具有智慧的东西,虽然可能在他有 生之年都无法完成,不过我还是祝他成功。毕竟有梦想就是好的,而且这个机器人现 在也可以为他完成些工作(http://www.funnyok.net/nlp )。还有一些其他的MSN机器 人,比如专门提供资讯查询服务的,帮你搜索google的等等。MSN进行时里面有列表 (http://www.msning.com ),自己去看看就好了。 二、为什麽用.NET 其实理由很简单。C#和Java很像,但是Java我实在找不出一个非常好用的,符合自己 使用习惯的IDE来。而C#就不同,Vs.NET(http://msdn.microsoft.com/vstudio/ ) 当然最好用,C# Builder( http://www.borland.com/csharpbuilder/ )也不错,连 SharpDevelop( http://www.icsharpcode.net/OpenSource/SD/ )用起来都相当舒服 。所以选择.NET比较好。 另外,.NET在开发上非常方便,只要你有一点点开发基础,用.NET写程序就不是很难 。我是站在一个使用者而非开发者的角度,不用去钻研太多技术层面,或是优化的东 西,我没那能力也不想进微软研究院。 建议你使用最新版Visual Studio.NET,可以省去很多麻烦的事儿。 同时,.NET开发可以找到的资源也有很多,我们接下来会提。 三、你要一个什麽样的聊天机器人 我这里讨论的就是“聊天机器人”这个概念,意思是,他能做的就是陪你聊天。你要 有一个程序去“教”他说话,同时要让他明白话语中包含的大概意义,还能够做基本 上不怎麽离谱的回答。 你还可以让他做很多其他的事情,比如查询ip、手机号码、注册号、班机号,或者直 接让他去查google,帮你搜索。这些也都不是什麽麻烦的事情,只要你想。 四、先让机器人开口说话 不管你的机器人聪不聪明,让他能在MSN上象摸象样地回答是最重要的。所以,你需 要有一个MSN帐号,连接到MSN服务器,取得各种服务器的消息,同时送出消息回服务 器。 当然,你可以分析MSN的协议( http://www.hypothetic.org/docs/msn/index.php ),自己写通信部分。不过我提过,我是个喜欢投机取巧的人,所以,找个能用的接 口用就好了。所以,我找了些MSN的开发接口。 MSNHelper:http://sourceforge.net/projects/msnphelper/ dotMSN:http://members.home.nl/b.geertsema/dotMSN/ 这两个都是为.NET开发的,我用dotMSN,它使用MSNP8协议。注意dotMSN不要用 sourceforge上的版本,要用上面给出的地址。 接下来,下载这个例子:http://members.home.nl/b.geertsema/dotMSN/example/Example .zip 用vs.net打开,编译,执行。 看懂了吧。登录之后随便双击列表上的某个人,会送出给这个人一句"Hello world!" 。你已经可以不通过MSN原来的程序,而直接和人说话了。 这部分的代码是这样的: private void ContactJoined(Conversation sender, ContactEventArgs e) { // someone joined our conversation! remember that this also occurs when you are // only talking to 1 other person. Log this event. Log.Text += e.Contact.Name + " joined the conversation.\r\n"; // now say s omething back. You can send messages using the Conversation object. sender.SendMessage("Hello world!"); } 意思是当对方加入聊天后,你就给他发一个"Hello world!"的消息过去。这时候如果 你列表上的人双击你的名字,也同样会收到一个Hello World!。 五、让机器人懂中文 1、资料库 因为我们要做中文聊天机器人,语料库的大小直接关系到你的机器人是不是聪明。由 於自己的习惯,我用了mysql作为存放语料库和中文分词库的资料库。而且mysql速度 极快。当然,你要用Access或者Sql Server,完全可以,而且更容易些。.NET调用Mysql的 库可以在这里找到MySQL Driver CS: http://sourceforge.net/projects/mysqldrivercs/ 2、整句匹配 整句匹配这个概念很简单。聊天嘛,不认识的人一般都会要上来就说“你好”,或者 “hi~~”之类的。这种话通常很简单,而且没有什麽太多的变化,直接让机器人回答 就行了。比如对方说“你好”,机器人看到这个“你好”,就直接回答“你好”,就 可以了。或者对方说“88”,你可以让机器人说“再见”,或者88什麽的……这就叫 整句匹配。就是机器人拿到整个的句子,在库里面一查,啊,库里有这句话怎麽回答 ,挑出一句回答过去,对方不会觉得这个机器人笨。 甚至如果对方说“你好笨”,你让机器人回答“我才不笨呢”,对方一定会觉得,这 个机器人还行,还知道别人说他笨。 3、中文分词 一个聊天机器人当然要懂些中文。中文处理的基础就是中文分词。分词是什麽?“分 词就是将连续的字序列按照一定的规范重新组合成词序列的过程”。这个定义是我抄 的。请查阅这篇文章:http://www.hylanda.com/center/knowledge.htm,他们做中 文分词应该有一定成绩。国内的分词系统,ICTCLAS做得也比较好。有VC的源代码, 可以下来看看。http://www.nlp.org.cn/project/project.php?proj_id=6。 有人会说,这个东西我不懂,我也没研究过。其实我也不懂。只不过,如果不做中文 分词,聊天机器人就只能停留在证据匹配的地步。我们可以使用最大匹配法,对聊天 机器人接收到的话做简单的分词。关於算法,请参阅詹卫东先生的这个讲义,估计你 一看就明白了。 课程名称:中文资讯处理基础。可以下载这个PPT讲义看看。 分词算法不需要太复杂,简单点就好。 另外分词算法需要一个中文分词库。我提供了一个mysql的,这里可以下载。导入到 你的mysql里面就可以。其他资料库其实把sql语句简单改改也可以用。中文分词库下 载:http://www.guanqun.com/down/wordlist.rar。 4、词语的匹配 仅仅会分词还不够,如果真的要让机器人了解人说的话,肯定需要一些人工智慧的算 法。我们就是做个机器人玩玩,没必要研究的那麽深。人工智慧走到现在,太聪明的 聊天机器人也少之又少。而且,让专业的研究人员去研究就好了,我们仅仅就是玩玩 。所以呢……我们就用一个最简单的办法。我们的方法是,让机器人找这一句话的关 键词,这句话大概的词性搭配,再去语料库里面找到符合这样规则的回答的话。 举个简单的例子。比如对方说:“你真好玩” ,我们先用分词算法,把这句话分成 “你 真 好玩”,然后找出关键词“好玩”。同时把这句话的词性搭配也记录下来。 这样,当找到关键词“好玩”在语料库中的时候,我们再来找是否有类似这这句话词 性搭配的回答,如果有,随机回答出一句:“哈哈……我就喜欢你这麽说。”,这样 ,可以给聊天者比较好的感觉。 那麽问题来了,如何找出关键词呢? 我的方法是……(比较烂,但是通常有效), 找出这句话中长度最长的词作为关键词。没有为什麽,因为这样速度会快些。如果一 句话中所有的词都被扫瞄成为关键词,再去查库,会出现些匹配上的问题(不科学, 但是通常有效)。 五、让机器人再“聪明”些 1、整句匹配语料库的设计 第一步当然是做你的整句匹配语料库。语料库都要自己写的,不要偷懒。找出别人最 常说的话,比如你好谢谢对不起什麽的,多放些回答在里面,免得每次回答都是一样 的,然后要回答的时候,先写一句sql来查询,如 select * from reply where 'key' = '"+sentence+"' order by rand() limit 1 把找到的话直接回复过去就可以了。如果找不到整句匹配,再做分词处理。 2、分词匹配语料库的设计 因为我们分词算法也没有经过什麽优化,同时,我们找出关键字的办法也不是那麽的 好,所以,你给出的回答一定要不那麽清晰。说白了就是,回答的话要有些“含糊不 清”才可以。目标就是,让人觉得机器人对他说的话已经理解了,回答出来的还算比 较“对路”。不要求100%对路,只要有40%以上对路,聊天的人基本就可能会接受。 同时,回答的语料库,最好可以引导对方再次回答的时候,可以说出你语料库里面有 的,最好是可以整句匹配的句子。 举个好玩的例子。问题:“你是男的还是女的?”或者“你是男的还是女的”(是否 有标点符号没关系,我们要记录句子的词性搭配,同时,要对标点符号做些处理) 。 像这样一句话,我们可以通过分词,找出关键词:“还是”,而且通过判断词性,可 以知道,这是一句问句。而且问的是在两种情况之间选择。(当然,我们通过简单的 算法,没法知道这句话其实是问性别)。 对於这样的问题,你的机器人怎麽回答?其实很简单,首先,回答要“对路”,尽量 不让人觉得答非所问,至少让人觉得,你的机器人是知道对方在问什麽的。所以,我 的机器人这样回答:都是……哈哈 因为回答的是聊天用语,而且带点开玩笑的意味,所以会使聊天者觉得,这个机器人 还不是那麽笨。 这只是一个简单的例子。很多具体的句子还得你自己去分析。当然,语料库越多,机 器人懂的就越多,也就越聪明了。 3、匹配不到关键字怎麽办 语料库不是很多的情况下,很可能我们的分词算法匹配不到合适的回答来应付。所以 我们还要另外做一个语料库,用来在实在匹配不到关键词的时候,进行回答。这样的 回答比较需要类似“算卦”的人的回答技巧,因为对方可能说任何话,而我们的机器 人不明白。所以,要想办法“蒙混过关”,同时,尽量引导对方向你机器人可能回答 的方面说。你可以试着跟“小布”聊聊天,会发现它回答不出来的时候,就会随便挑 一句“佛经”来说。 其实最重要的一个技巧就是,学习一下算卦的人说的话,都是云里雾里的,让人摸不 到头脑,还觉得可能是对的。我们就要让机器人学习这种技巧,来达到看上去“聪明 ”的目的。 最后的话 其实写这样的一个机器人程序很快的,如果熟悉些的话,估计一天应该就可以写出来 。我大概用了一天半,还加上准备些语料库的时间。如果你真想做个稍稍“聪明些” 的机器人来玩,这篇文章应该可以为你剩下至少3-5个小时的找资料的时间。如果你 懒得自己研究,也有别的公司做的只能整句匹配的程序可以下载,自己下一个玩玩也 就算了。 欢迎到我的blog与我交流:http://bot.donews.net/bot。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.162.98.187 -- │ ┌──┘ ┴┐ ┼ ┌───┐ ┌┐ ┐ │┌┐│ ┌ ┬ └┐ └┘ ┐├──┘││ ┌─┐│ ││││ My logic is undeniable. ┌┐│└┐│ └┘ └┘├┘ │┌┐└┐ ┴──┘│ ┌┘│ ┼└┼ ┌ ┌ │ ├┘│ ┌─┐ └─┘ │┌┐ ┌┘ │ ┼ ┴─┐ └──┘ └────┘ ┬ └┘。Ritαndy --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.68.127.6
1F:推 TheMinyen:窝 ~~这个好棒喔! 140.117.199.8 12/06
--



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.117.199.8
2F:→ TheMinyen:小布? 140.117.199.8 12/06







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP