成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

智能聊天機器人小黃雞及其制作方法

2013-06-07 18:01:29來源:新浪博客作者:沐兒

講前先預熱一下,如果有還不熟悉小黃雞的親~歡迎大家戳這里http://mysimi.sinaapp.com/ 自制小黃雞一枚,歡迎測試。。暫且叫他小黃雞2號~1號在后面哈

講前先預熱一下,如果有還不熟悉小黃雞的親~歡迎大家戳這里http://mysimi.sinaapp.com/ 自制小黃雞一枚,歡迎測試。。暫且叫他小黃雞2號~1號在后面哈

大家好,我是沐兒,今天很榮幸擔任主講,與大家一起討論智能聊天機器人小黃雞~講得不好請見諒,提問請輕虐~嘻嘻

今天的講座主要分為三個部分,分別是:1. 什么是小黃雞 2.小黃雞的基本原理 3.如何自制小黃雞。

Part 1 什么是小黃雞

很多人認識小黃雞是從人人網開始的,只要@小黃雞,它就會跑出來跟你聊天。這就是一個典型的人工智能的聊天機器人。

實際上,人人網小黃雞是華科一位08級的同學,通過人人網接口,調用韓國聊天機器人SimSimi的API,自動回復提問者。

也就是下圖: 

\
 

SimSimi最早風靡于移動平臺。至于它的具體原理以及實現方法我們將在后兩部分介紹。也就是說,人人網小黃雞的原型,就是智能聊天機器人SimSimi。那么什么是聊天機器人呢?

簡單地說,就是基于人工智能原理(Artificial Intelligence,以下簡稱AI),通過對聊天文本進行分析后給出應答的一類程序。世界上最早的聊天機器人誕生于20世紀80年代,這款機器人名為“阿爾貝特”,用BASIC語言編寫而成。而由于中文對“詞”劃分的模糊及歧義繁多等等原因,中文聊天機器人發展得相對較慢,目前有贏思的小i,愛博的小A,騰訊也有。

Part   2 小黃雞的基本原理

AI聊天機器人小黃雞的工作可以被分成兩個部分:訓練+匹配。(其實很多AI的東西都可以被這么劃分,比如人臉識別,語音識別等等)

2.1 訓練

Simsimi中的“教學”,就是訓練的過程,目的在于構建或是豐富詞庫。

流程描述如下:
S1:用戶通過教學界面向系統提出一個話題與相應應答;
S2:系統對該話題進行分詞,判斷該話題在系統知識庫中應存放的位置;
S3:在系統知識庫中添加該話題及相應應答。

可以看到,這里涉及到兩個問題:給出一個話題,系統是如何分詞的?詞庫要如何設計才能又快又準地應答? 

2.1.1分詞方法

有人認為我教小黃雞“埃菲爾鐵塔上45度角仰望星空”回答是“呵呵”,那下次它再看到“埃菲爾鐵塔上45度角仰望星空”整句話的時候才會有相應回答。但實際上,下次只要它看到“埃菲爾鐵塔”就會“呵呵”了好嘛。

這是因為聊天機器人的存儲并不以句子為單位(那樣太費時費空間),而是以詞。于是,分詞,幾乎成為聊天機器人的核心。

英文分詞好說,人家用空格什么的就搞定了,但中文不一樣,對于一句話,人們可以用自己的認識區分詞語,而機器人要怎么做,就是中文分詞算法的研究范疇了。

中文分詞技術儼然是一個重要的研究方向,隸屬于自然語言處理。現有的分詞算法可以分為三大類:基于字符串匹配的分詞方法、基于統計的分詞方法和基于理解的分詞方法。

用戶在聊天時的一個顯著特點是所提出的話題一般都是比較短小的,而不是長篇大論,不具有段落篇章結構,絕大多數就是少數幾句話。基于統計的分詞方法適用于有段落、篇章結構以及上下文關系的文段。基于理解的分詞方法目前并不成熟,且時間復雜度高,速度慢。于是,只有基于字符串匹配的分詞是比較適合的。

基于字符串匹配的分詞方法,又叫做機械分詞方法。按照掃描方向的不同,機械分詞法可以分為正向匹配和逆向匹配。(e.g. 字符串“北京華煙云”,正向匹配為《北京,華煙云》,逆向匹配為《北,京華煙云》)逆向匹配的切分正確率要高于正向匹配法,為了便于發現歧義切分,有時候將兩者結合起來形成雙向匹配法。按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配,也就是長詞優先和短詞優先。按照匹配不成功時重新切取的策略,機械分詞法可以分為增字法和減字法。
基于詞典的“雙向最大匹配”法是目前中文信息處理中最簡單有效的方法,有這樣的統計:漢語文本中90%左右的句子,其與雙向最大匹配的結果相吻合,而且是正確的分詞結果。

當正、反向最大匹配算法得出來的切分結果不一樣時,就必須對其進行歧義處理,在此不再贅述。

2.1.2詞庫設計

由于中文詞的特點:1.中文詞是一個開放集,詞數在增長;2.以不同字開頭的詞的數目變化很大,多的達到數百個,少的也有可能只有一個或者沒有;3.詞的長度變化也很大,有單字詞,也有由六、七個字成詞的。

這就要求在設計詞典時,除了考慮訪問效率外,還得充分考慮存儲利用率。

請看這種數據結構,就能很好地平衡時間與空間。


\
 

首字Hash表通過一次哈希運算就可以直接定位漢字在表中的位置。一個單元包括三項內容:C:存儲首字;F標志位:存儲以C為首字的最長詞條的長度;P:指向詞表索引表。

解釋一下哈希:散列表 Hash table,也叫哈希表,顧名思義就是把數據都打散了,再按一定規律存起來,加快訪問速度。是根據關鍵碼值Key而直接進行訪問的數據結構。

舉個栗子:我想將[0,100)做成一個哈希表,選取“模10”作為散列函數,以數組作為存儲單元,則得到A[10][10]的數組,A[0]里依次存著0,10,20…90;A[1]里存著1,11,21…91。依次類推。

現在舉一個訓練小黃雞的例子:我教小黃雞說“大白天的做什么美夢啊?”回答是“哦哈哈哈不用你管”。

S1:應用雙向最大匹配算法分詞:雙向分詞結果,正向《大白天,的,做什么,美夢,啊》;反向《大白天,的,做什么,美夢,啊》。正向反向都是一樣的,所以不需要處理歧義問題。長詞優先選擇,“大白天”和“做什么”。

S2:以“大白天”舉例,假設hash函數為f(),并設f(大白天)指向首字hash表項[大,11,P]。于是由該表項指向“3字索引”,再指向對應“詞表”。

S3:將結構體<大白天,…>插入隊尾。體中有一個Ans域,域中某一指針指向“哦哈哈哈不用你管”。

S4:完成訓練。

贊助商鏈接:

主站蜘蛛池模板: 瓦房店市| 舞钢市| 崇州市| 开封市| 大埔县| 洪泽县| 偃师市| 宁明县| 四平市| 衡阳市| 望城县| 普安县| 普宁市| 西昌市| 甘德县| 合山市| 武义县| 满洲里市| 富蕴县| 姚安县| 岳阳县| 金山区| 澄迈县| 安康市| 横峰县| 庄浪县| 滦平县| 株洲县| 大荔县| 龙泉市| 阜新市| 阳山县| 茶陵县| 陕西省| 水城县| 锡林郭勒盟| 丽水市| 呼和浩特市| 吉木萨尔县| 昔阳县| 赤水市|