AIML元素详细说明
- 目錄
- 前言:
- 1、簡介
- 2、詳細說明
- 總結:
目錄
前言:
智能客服客戶咨詢功能的實現主要依靠的就是Python的AIML庫,這里就先介紹下AIML。
詳細的使用教程可參考:https://github.com/andelf/PyAIML
目前大部分AIML只支持Py2.7版本并且不支持中文,即使有支持Py3且支持中文的版本,AIML的一些功能也有一些缺陷,但是黃天不負有心人,經過博主不斷的搜尋,最終找到了一款算是比較穩定的支持Py3版本的AIML。
地址:https://github.com/Shuang0420/aiml
后期博主會將自己的項目發布出來,到時候大家有興趣的也可以參考下。
1、簡介
AIML是Artificial Intelligence Markup Language的縮寫, 用于描述一類稱為AIML的對象,同時部分描述了計算機程序處理這些對象時的表現。AIML是XML語言(可擴展標記語言)的衍生。
AIML對象是由topic和category單元組成的,格式化或未格式化的數據均可。格式化的數據是由字符組成的,其中有的組成符號數據,有的構成AIML元素。AIML元素將應答數據封裝在文檔中。包含這些元素的字符數據有可能被AIML解釋器格式化,也有可能在之后的響應中處理。
aiml中的元素不區分大小寫
2、詳細說明
1、think元素
型如: <think><set name="topic">Me</set></think>放置在template元素里面,表示一旦用戶的輸入匹配到該category時,再回復應答的同時,給一個變量賦值,這里也就是把Me記在腦子里,以后就可以用<get name=”topic”/>來取出先前記住的內容。
2、<star/>表示*
比如有一個匹配模式是<pattern>* 你 好 *<pattern>;這里pattern元素里的匹配模式是用*號表示任意匹配的,但在其他元素里面不能用*號,而用<star/>這個元素來表示。
3、<srai>元素
表示<srai>里面的話會被當作是用戶輸入,從新查找匹配模式,直到找到非<srai>定義的回復。例如:
<srai>我 是 <star/></srai>,那么機器人會把“我 是 *”當作是用戶輸入來從新查找匹配模式。(PS:srai不能很好的匹配中文)
4、<condition>元素(condition元素即為做選擇操作時使用的元素,類似于if-else語句。)
放在template元素里面,可以有多個condition元素,但不能嵌套(目前還不支持),有3種形式:
Name是預先定義的變量,第一種表示name變量的值如果和value相等,回復內容就包括”你好”;第二種表示name變量的值如果里面包含value這個字符串,回復內容就包括“你好”;第三種表示name變量的值如果存在value的值,回復內容就包括“你好”(這個什么意思還不明確)
舉個使用例子:
a. 情況一:如果事先用think設置了變量“用戶名字”,而且等于“張三”,那么用戶接受到的回復內容是:你好阿!你又來了阿;)
b.情況二:如果事先沒有定義或者變量“用戶名字”的值不等于“張三”,那么用戶接受到的回復內容是:你好阿!
寫法有一下幾種:
這里最后一個li元素表示默認的情況;即找不到condition相匹配時,就用默認的。
6、<gender>元素
替換性別以及代名詞,例如:
將被替換成:He told her to take a hike,跟性別有關的單詞都將被替換,中文怎么處理不是很清楚。
7、<get name=””名字/>
即得到name的值。
8、<gossip>元素
用來把改元素里面的內容保存到gossip.log文件里。
9、<if>元素
判斷元素,有以下形式:
10、<input>表示用戶輸入
例如: <input index="2"/>將輸出用戶倒數第2次的輸入,看如下對話: 用戶:好阿 機器人:你也好,你叫什么名字? 用戶:我叫黑山 機器人:呵呵,你好黑山。 如果有aiml文件里有片斷: <category> <pattern>嘿 嘿</pattern> <template> <gossip>你剛才說:“<input index="2"/>”?</gossip> </template> </category> 如果這個時候用戶輸入“嘿嘿”,那么機器人將回復:你剛才說:“我叫黑山”? Index屬性的數字表示倒數第幾句話,1:倒數第一句,2:倒數第2句,依此類推。11、<learn filename=”xxx.aiml”>元素
表示讓機器人學習某個aiml文件。
12、<li></li>元素
可以在random元素或condition等元素當中使用,表示一個列表;
13、<pattern>表示匹配模式
里面的內容必須大寫,可以有星號* 或下劃線_,星號表示匹配所有,任意情況;下劃線的意義跟星號一樣,除了不能匹配字典里面Z后面的字母。
14、<person>和<person2>
第一個是把第一人稱轉換成第3人稱;第2個是把第一人稱轉成第2人稱。<person/>等于 <person><star/></person>
15、<random>隨機元素
一般和<li>一起使用,表示從列表里隨機取一個。
16、<sentence>元素用來格式化句子
比如: <sentence>this is some kind of sentence test.</sentence> 可以格式化成:This is some kind of sentence test.即把句子首字母大寫,還可以添加標點符號等。如: <category><pattern>你是誰</pattern><template><sentence>你好我是聊天機器人小君</sentence></template> </category>17、<star/>表示星號
已經不推薦使用,只針對0。9版本,目前一般要加index屬性來使用,
18、<system><system>元素
表示調用系統函數,
20、<that>元素
表示先前機器人說的話,例如: <category> <pattern>好</pattern> <that>一 起 聊 聊 電 影 好 嗎 *</that> <template>那你喜歡什么電影那?</template> </category> 即:如果機器人先前問用戶“一起聊聊電影好嗎?”,而且現在用戶回答了“好”,那么匹配正確,回復內容為:“那你喜歡什么電影那?” 如果要取前面的前面機器人的話,可以用:<that index=”nx,ny”>,例如:<that index=”2,<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1”>表示取機器人倒數第2句的話,<that index=”2,1”>也等于<justbeforethat/>21、<thatstar index=”n”>元素
先前第n個機器人說過的星號部分的話,
22、<think>
記錄用戶輸入且里面的內容不回復給用戶。
23、<Topic name=”film”>元素
用來設置主題,例如: <aiml> <topic name="功夫"><category> <pattern> phrase </pattern> <that> phrase </that> <template> phrase </template> </category> </topic> </aiml> 只有當前的topic系統變量是“功夫”時才會匹配到這里。24、<topicstar index=”n”>元素用來得到先前倒數第n次談論的主題。
總結:
個人感覺在業務咨詢模塊,包括在整個智能客服的項目中,這個AIML知識庫即用以上的這些語法組成的知識庫的設計是最重要、最耗時的工作,因為如果把這個知識庫設計好,后面可以省去很多事情,但是如何才能設計好這個知識庫呢?這就是一個經驗問題了,你除了需要有相關的盡可能多的數據外,還得了解咨詢業務中那些問題是常見的,對于一些常見問題你需要怎么去設計這個知識庫去匹配等等,最終你還需要熟悉整個AIML的標簽以及如何將業務問題最優化的使用這些標簽來表示(畢竟真實的業務咨詢場景出現的問題會是各種各樣,一旦數據量大了之后,很有可能整個知識庫就會發生沖突,如輸入一個問題,有兩個匹配的答案,那么這時系統就會崩潰。。。后面就會有一大堆的問題接踵而來)。所以感覺這部分跟技術關聯不是特別大,更多的是和業務關聯比較大。
總結
以上是生活随笔為你收集整理的AIML元素详细说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注意:匿名函数调用直接加载函数名setI
- 下一篇: 计算机服务里打印功能停止,win7系统电