天然語言處理掃盲·第四天——白話人機問答系統原理

整理到第四天愈來愈心虛了,由於發現好多專業的技術都不知道,好比關於語義的分析提取之類的,後面打算專門針對這些專業性的「玩法」整理下。那麼今天,就繼續整理下人機問答的原理實現吧!html

更多內容參考:java

背景

在不少的領域其實都須要這樣一個問答系統,問答系統有不少種交互的方式。先來目擊一下問答系統的風采吧:mysql

好比在線的聊天機器人

想要體驗一下的話,能夠點擊傳送門算法

好比智能的搜索平臺

關於這種問答系統,好壞的評測很簡單,直接人工肉眼就能判斷出來回答的是不是本身想要的,所以小白的體驗用戶也能夠直觀的評測一個問答系統效果是否足夠好。sql

基於問答庫的實現方法

首先能夠設想一下:數據庫

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

若是如今只使用java和mysql(想要個頁面也能夠加上js\html....),那麼只要咱們的數據庫裏問答的內容足夠多,就能支撐這樣的問答系統。不過數據支持的搜索過於簡單,只支持普通的%的模糊搜索。網絡

接下來,咱們能夠引入一些分詞工具(lucene),或者直接藉助全文檢索的系統(solr、elasticsearch)。這樣咱們輸入的內容就能夠以全文檢索的形式進行查詢了。不過基於全文檢索,即TF-IDF詞頻逆文檔頻率算法,效果仍然有限,好比一些詞語的位置沒法識別、同義詞等沒法識別。iphone

爲了解決這個問題,能夠再引入一些天然語言處理的技術手段,好比實現一些同義詞的識別、詞性的轉換等等。機器學習

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

  • 判斷類型的問題,用於鎖定問題的精準範圍(能夠採用一些分類的機器學習算法)
  • 信息提取:提取關鍵詞
  • 基於關鍵詞的搜索,能夠直接基於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的表達方式尋找最佳的匹配,也被應用到了推薦系統的場景,所以仍是值得好好研究一下的。

基於深度學習

因爲word embedding其實也是基於特徵詞的,所以在提取特徵詞的時候都會忽略掉位置等等的因素。好比,謝霆鋒的爸爸是誰?謝霆鋒是誰的爸爸?就是兩個徹底不一樣的問題。可是在深度學習中,若是使用一些循環神經網絡,就能夠把每一個詞做爲下一個詞分析的輸入,也就變相的考慮了詞語的順序特徵。具體的就不詳談了,能力有限...

對深度學習如何在問答系統中應用,能夠參考知乎專欄——揭開知識庫問答KB-QA的面紗

參考

相關文章
相關標籤/搜索