1. 什麼是智能聊天機器人
簡單地說,就是基於人工智能原理(Artificial Intelligence,以下簡稱AI),通過對聊天文本進行分析後給出應答的一類程序。
2.基本原理
AI聊天機器人的工作可以被分成兩個部分:訓練+匹配。
2.1訓練
訓練的過程,目的在於構建或是豐富詞庫。
流程描述如下:
S1:用戶通過教學界面向系統提出一個話題與相應應答;
S2:系統對該話題進行分詞,判斷該話題在系統知識庫中應存放的位置;
S3:在系統知識庫中添加該話題及相應應答。
可以看到,這裏涉及到兩個問題:給出一個話題,系統是如何分詞的?詞庫要如何設計才能又快又準地應答?
2.11分詞
這是因爲聊天機器人的存儲並不以句子爲單位(那樣太費時費空間),而是以詞。於是,分詞,幾乎成爲聊天機器人的核心。
中文分詞技術儼然是一個重要的研究方向,隸屬於自然語言處理。現有的分詞算法可以分爲三大類:基於字符串匹配的分詞方法、基於統計的分詞方法和基於理解的分詞方法。 用戶在聊天時的一個顯著特點是所提出的話題一般都是比較短小的,而不是長篇大論,不具有段落篇章結構,絕大多數就是少數幾句話。基於統計的分詞方法適用於有段落、篇章結構以及上下文關係的文段。基於理解的分詞方法目前並不成熟,且時間複雜度高,速度慢。於是,只有基於字符串匹配的分詞是比較適合的。
基於字符串匹配的分詞方法,又叫做機械分詞方法。按照掃描方向的不同,機械分詞法可以分爲正向匹配和逆向匹配。(e.g. 字符串“北京華煙雲”,正向匹配爲《北京,華煙雲》,逆向匹配爲《北,京華煙雲》)逆向匹配的切分正確率要高於正向匹配法,爲了便於發現歧義切分,有時候將兩者結合起來形成雙向匹配法。按照不同長度優先匹配的情況,可以分爲最大(最長)匹配和最小(最短)匹配,也就是長詞優先和短詞優先。按照匹配不成功時重新切取的策略,機械分詞法可以分爲增字法和減字法。
基於詞典的“雙向最大匹配”法是目前中文信息處理中最簡單有效的方法,有這樣的統計:漢語文本中90%左右的句子,其與雙向最大匹配的結果相吻合,而且是正確的分詞結果。
當正、反向最大匹配算法得出來的切分結果不一樣時,就必須對其進行歧義處理,在此不再贅述。
2.12詞庫設計
由於中文詞的特點:1.中文詞是一個開放集,詞數在增長;2.以不同字開頭的 詞的數目變化很大,多的達到數百個,少的也有可能只有一個或者沒有;3.詞的長度變化也很大,有單字詞,也有由六、七個字成詞的。這就要求在設計詞典時,除了考慮訪問效率外,還得充分考慮存儲利用率。
請看這種數據結構,就能很好地平衡時間與空間。
首字Hash表通過一次哈希運算就可以直接定位漢字在表中的位置。一個單元包括三項內容:C:存儲首字;F標誌位:存儲以C爲首字的最長詞條的長度;P:指向詞表索引表。
訓練例子
現在舉一個訓練的例子:我教“大白天的做什麼美夢啊?”回答是“哦哈哈哈不用你管”。
S1:應用雙向最大匹配算法分詞:雙向分詞結果,正向《大白天,的,做什麼,美夢,啊》;反向《大白天,的,做什麼,美夢,啊》。正向反向都是一樣的,所以不需要處理歧義問題。長詞優先選擇,“大白天”和“做什麼”。
S2:以“大白天”舉例,假設hash函數爲f(),並設f(大白天)指向首字hash表項[大,11,P]。於是由該表項指向“3字索引”,再指向對應“詞表”。
S3:將結構體<大白天,…>插入隊尾。體中有一個Ans域,域中某一指針指向“哦哈哈哈不用你管”。
S4:完成訓練。
2.2匹配
可以被描述成如下流程:S1:用戶通過聊天界面向系統提出一個話題;S2:系統對該話題進行分詞處理;S3:在系統知識庫中尋找與該話題匹配的話語回覆用戶。
基於詞典的分詞算法分爲詞典加載、預處理、最大匹配、歧義消解幾個階段。
其具體流程如下:
S1:預處理階段,按照特殊字符(英文字母、數字、標點符號等)將待分析文本進行斷句,將待切分的文本切分爲只有中文的短句子,這些句子是下一步分詞處理的基本單位;
(舉個栗子:輸入“asdfadf東北師範大學哈哈哈dfadflakfl(*^__^*) 嘻嘻……”,simi只會對其中的中文“東北師範大學哈哈哈嘻嘻”做出響應;輸入“(*^__^*)”時,輸出“I have no response.”)
S2:對斷句出來的句子進行雙向最大匹配(雙向匹配,長詞優先)分詞,分詞後的結果作爲S3的輸入;(舉個栗子:輸入“東京古巴比倫”,正向與反向切詞結果均爲《東京,古巴比倫》,長詞優先,所以simi只對“古巴比倫”做出響應;輸入“古巴比倫埃菲爾鐵塔”,正向與反向切詞結果均爲《古巴比倫,埃菲爾鐵塔》,此時Simi對“埃菲爾鐵塔”做出響應)
S3:對上一步分詞得到的結果進行比較,判斷是否存在歧義,如果存在歧義,就進行一定的歧義消解;
S4:重複S2、S3,直到處理完步驟一中斷句所切分出的所有句子單元。
這裏給出與小黃雞對話的例子:我問小黃雞:“埃菲爾鐵塔上45度角仰望星空”。
S1:雙向最大匹配分詞:正向反向均爲《埃菲爾鐵塔上,45度角,仰望星空》,沒有歧義。長詞優先,系統選擇了“埃菲爾鐵塔上”作爲關鍵詞;
S2:系統在知識庫中用剛纔說的哈希函數f(埃菲爾鐵塔上),找到比如[埃,11,P] 的表項,順着指針找到6字詞的索引,順着索引找到6字詞表,遍歷詞表,找到<埃菲爾鐵塔上,…>結構體;
S3:系統隨機選擇該結構體Ans域中的一個回答(也有可能是根據頻率高低來選擇)。比如“兩年之後等着你”。
S4:輸出回答,匹配結束。