Chatbot (20%)
Last updated
Last updated
Chatbot Type
樣板式模型 (Rule-based model)
檢索式模型 (Retrieval-based model)
生成式模型 (Generative model)
樣板式模型 (Rule-based model)
檢索式模型 (Retrieval-based model)
維護問題與答案的配對:
Questions=q1,q2,……,qnQuestions=q1,q2,……,qn
Answers=a1,a2,……,an
「相似度」計算
用「TF * IDF」來計算詞的權重
將一個句子分成了很多個「詞」qi
,每個詞都會一個「IDF」分數,「f(qi,D)」指的是在 D
這篇文檔中,qi
這個詞一共出現了幾次,撇開停用詞不談,顯然一個詞在文章裡出現次數越多,他就顯得越重要。
到目前為止都是 TFIDF 的概念,BM25 引入了 b 與 k1 這兩個基於經驗調整的參數,兩者中 b 又會顯得重要些,從分母的地方能看出來,b 越大,文章長度就會顯得越重要,那為什麼要將文章長度列入考慮呢?我們可以這麼想,一個文章越長,它包含 qi
的機率就會越高,這樣對短文本就不太公平了,或許前者是一段冗長又包山包海的廢文,後者則是一針見血的精闢見解,所以 BM25 引入 b ,就是為了要懲罰這種情形。
什麼是編輯距離,我們能想成句子 A 要變成句子 B 要「最少」改幾個字,好比說:
那這兩個句子的編輯距離就是 3 ,我們會發現編輯距離越短,某種程度上「句型」會越相似(雖然主題就不一定了),也會發現這其實是個動態規劃問題,正因如此,我們就直接從應用層出發吧(?)
話又說回來了,剛剛不是說到這相似評估好像沒辦法涉及語意,沒錯,最基本的編輯距離是沒辦法,但如果把距離的定義從「字變成別的字」換成「詞變成別的詞的相似度差異」就又是另一回事了。
把檢索的目標從一個一個q_k
,換成某種對話的主題
,我們就能把文本分類的技巧套用到檢索式模型上。以經典的新聞分類來看:
當用戶說「今天洋基隊的比分是多少」,我們的聊天機器人就知道用戶是在講體育賽事,用技術的語言來說,用戶的「意圖」是問體育賽事,這個句子還有「洋基隊」、「今天」、「比分」這三個特徵,所以我們能這麼做:
明白了運作流程後,顯然能看出技術成分有兩處:「分類」與「特徵抽取」
「這附近有什麼好吃的」為例 :
定義規則
(意圖是)飲食 -> (是想吃)食物 -> (想吃)飯 -> (因為附近跟地點有關,所以想找) 餐廳
定義規則
生成式模型
Sequence to Sequence with Attention model
REF:
REF:
,這是在 python 上基於萊文斯坦距離的實作,使用上非常直觀:
自 google 的論文發表後,用 Sequence to Sequence
來實現聊天機器人就成為一股熱潮,Github 上有不少像 看起來高完成度的應用。Sequence to Sequence
的基本概念是串接兩個 RNN/LSTM,一個當作編碼器,把句子轉換成隱含表示式,另一個當作解碼器,將記憶與目前的輸入做某種處理後再輸出,不過這只是最直觀的方式,其實解碼器還有很多種作法,如果想了解細節與效能上的差異,。