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