天天看點

自然語言處理入門——白話人機問答系統原理



背景

在很多的領域其實都需要這樣一個問答系統,問答系統有很多種互動的方式。先來目睹一下問答系統的風采吧:

比如線上的聊天機器人

自然語言處理入門——白話人機問答系統原理

比如智能的搜尋平台

自然語言處理入門——白話人機問答系統原理

關于這種問答系統,好壞的評測很簡單,直接人工肉眼就能判斷出來回答的是否是自己想要的,是以小白的體驗使用者也可以直覺的評測一個問答系統效果是否足夠好。

基于問答庫的實作方法

首先可以設想一下:

如果即沒有任何高大上的機器學習算法,也沒有任何複雜的公式,怎麼設計一個問答系統?

如果現在隻使用java和mysql(想要個頁面也可以加上js\html....),那麼隻要我們的資料庫裡問答的内容足夠多,就能支撐這樣的問答系統。不過資料支援的搜尋過于簡單,隻支援普通的%的模糊搜尋。

自然語言處理入門——白話人機問答系統原理

接下來,我們可以引入一些分詞工具(lucene),或者直接借助全文檢索的系統(solr、elasticsearch)。這樣我們輸入的内容就可以以全文檢索的形式進行查詢了。不過基于全文檢索,即TF-IDF詞頻逆文檔頻率算法,效果仍然有限,比如一些詞語的位置無法識别、同義詞等無法識别。

為了解決這個問題,可以再引入一些自然語言處理的技術手段,比如實作一些同義詞的識别、詞性的轉換等等。

總結起來,大緻的流程就是:

  • 判斷類型的問題,用于鎖定問題的精準範圍(可以采用一些分類的機器學習算法)
  • 資訊提取:提取關鍵詞
  • 基于關鍵詞的搜尋,可以直接基于TF-IDF算法搜尋,也可以基于word2vec轉變空間向量使用相似詞進行搜尋
  • 結合問題的主題等資訊對候選集的答案進行打分
  • 傳回得分最高的TopN候選答案

基于知識圖譜的實作方法

基于問答庫的做法,已經能實作一個基本的問答系統了。但是他其實并不智能,因為所有的答案都需要事先錄入好。沒有準備的問題,就無法找到對應的答案....試想一下,人類說話的方式多種多樣,稍微變一下,就可能得不到想要的答案,這得是多麼爛的系統啊。

随着最近知識圖譜的興起,人機問答系統又迎來了一波春天....關于知識圖譜可以簡單的說一下,知識圖譜裡面有這樣幾種類型:

  • 實體,比如劉德華、北京、奔馳
  • 屬性,比如年齡、位址、性别
  • 關系,比如夫妻、父子、前任

有了這樣的定義,就可以基于我們自己擁有的知識庫建立知識圖譜了。

自然語言處理入門——白話人機問答系統原理

舉個例子,在電商領域阿迪、耐克、三樓、白色都是實體,阿迪和白色之間是一種屬性的關系,比如顔色,是以可以得到這樣的圖:

迪與耐克之間又有一些關系,比如競争:

自然語言處理入門——白話人機問答系統原理

有了這樣的知識圖譜之後,我們就可以進行一些智能的搜尋了。

在問答系統系統中一般有這樣幾種方法:

基于語義解析

語義解析一聽就是跟語言學有關的東西,由于我缺少這方面的背景,是以隻能講個大概,也許還會有很多纰漏。我們在國小學習國文的時候,老師就教過主謂賓定狀補,現在不知道大家還記不記得:

  • 主語:一個句子的主體,也是整個句子的核心,所有的操作行為的發起者
  • 謂語:主體做的動作
  • 賓語:動作的承受者
  • 定語:描述一些程度
  • 狀語:時間地點
  • 補語:做一些數量、狀态的補充

比如明明(主語)在不二心(狀語)吃(謂語)了六個(補語)超好吃(定語)的肉包子(賓語),而在英文裡面詞性又不一樣了,英文中不是主謂賓定狀補而是名詞``代次``形容詞``副詞``動詞...一般來說為了統一表示,在自然語言處理裡面,都是使用統一的代号進行處理的,比如:

S表示句子;NP、VP、PP是名詞、動詞、介詞短語(短語級别);N、V、P分别是名詞、動詞、介詞。      

比如下面兩個文法樹:

自然語言處理入門——白話人機問答系統原理
自然語言處理入門——白話人機問答系統原理

那麼有了這樣的文法樹,就可以基于文法樹形成特定的查詢語言,直接基于知識庫進行查詢了,比如轉化成SPARQL進行查詢,比如:

Number of dramas starring Tom Cruise?      

可以轉化成查詢語言:

自然語言處理入門——白話人機問答系統原理

基于資訊提取

資訊提取的方式,跟之前的語義樹查詢的方式稍有不同。對于這樣的問題:

what is the name of Justin Bieber brother?      

會形成文法的依存樹,然後根據依存樹再生成問題圖:

自然語言處理入門——白話人機問答系統原理

基于這樣的問題圖,我們很容易能到知識圖譜裡面查詢到相關的實體,然後得到基于這個實體的子圖。得到子圖後,就可以從這個實體出發,把所有的關系對應的實體都做為回答的候選集。當然不僅僅是一層的關系,也可以收集兩層的圖作為候選集。有了這樣的候選集就剩下尋找最優答案的問題了,尋找答案的方法有很多,比如抽取答案的特征與問題的特征兩兩組合,基于樸素貝葉斯算法選取機率最大的候選答案。

基于word embedding

說完基于特征的資訊提取,就要說說這個word embedding,word embedding是一種概念,即差別于普通的One hot編碼。

  • one hot:一位有效編碼,一般都是該維有N個值,那麼就會用N-1位來表示該次元的資料,進而友善機器學習進行模型的訓練和計算。然而one hot有個缺點就是無法識别詞之間的關系,比如父親和母親、北京和上海
  • word embedding:也叫做詞嵌入,常用的方法有word2vec。這種方法是基于大量的語料庫去分析詞語被表達的向量,中間的過程暫且不談,最終的效果就是父親-母親 = 男-女,也就是說在用夾角餘弦計算相似度的時候,同種類型的詞語往往相似度都比較高。
自然語言處理入門——白話人機問答系統原理

那麼在問答系統中,就是對問題進行特征的提取,然後轉變成word embedding的表示方法;再對知識庫中的答案提取特征,形成word embedding,最終基于計算兩者的關系,來尋找最比對的答案。這種基于word embedding的表達方式尋找最佳的比對,也被應用到了推薦系統的場景,是以還是值得好好研究一下的。

基于深度學習

繼續閱讀