1. 程式人生 > >語音問答系統調研

語音問答系統調研

    因工作需要,準備開始做語音問答系統,之前對語音和自然語言處理(NLP)沒接觸過,所以開頭還是很難的,歷時兩週做了一個大概的瞭解,適合像我這樣的新手入門,裡邊借鑑了n多大神的內容,並給出了講得比較好的網頁、課程等等,如侵權請聯絡刪除。。。

一 對話系統框架

二 調研內容

  1. 語音識別-- Speech Recogniton, SR
  2. 閒聊型問答系統--Chitchat-bot
  3. 知識庫問答--Knowledge base Question Answering,KB-QA
  4. 垂直領域QA

三 迴圈神經網路(RNN)基本型別

    在語音識別和問答系統中,必不可少的就是迴圈神經網路(RNN)了,這裡不對演算法做詳細介紹,只給出基本型別及應該學習瞭解的網路結構及其較好的學習資源。

    上圖是RNN的基本型別,下邊對其輸入輸出及其作用做一個大概的說明

  • one to one: 給一個輸入,得到一個輸出,就是基本的網路結構,不含序列資訊,比如我們常用的影象分類
  • one to many:給一個輸入,得到一系列輸出,可用於image caption generation,輸入一張影象,輸出對該張影象的文字描述
  • many to one: 給一系列輸入,得到一個輸出,可用於文字情感分類,如分析文字是積極的還是消極的
  • many to many: 第四幅影象,輸入和輸出的序列數不一定相同,可用於機器翻譯、問答系統等
  • many to many: 第五幅影象,輸入和輸出的序列數相同,可用於字元預測、對視訊的幀打標籤等

四 語音識別的前世今生

前世

    從1990年到2010年,語音識別多采取上述框架,下邊對上述框架的部分做一簡要解析

預處理: 1. 首尾端的靜音切除,降低對後續步驟造成的干擾,靜音切除的操作一般稱為VAD(語音啟用檢測); 2. 聲音分幀,也就是把聲音切開成一小段一小段,每小段稱為一幀,使用移動窗函式來實現,不是簡單的切開,各幀之間一般是有交疊的;

特徵提取: 主要演算法有線性預測倒譜系數( LPCC)和Mel 倒譜系數( MFCC),目的是把每一幀波形變成一個包含聲音資訊的多維向量;

聲學模型( AM): 通過對語音資料進行訓練獲得,輸入是特徵向量,輸出為音素資訊;常用演算法為GMM+HMM;

字典: 字或者詞與音素的對應, 簡單來說, 中文就是拼音和漢字的對應,英文就是音標與單詞的對應;語言模型( LM) : 通過對大量文字資訊進行訓練,得到單個字或者詞相互關聯的概率;常用演算法為: n-gram模型;解碼: 就是通過聲學模型、字典、 語言模型對提取特徵後的音訊資料進行文字輸出; 

上述模組中涉及到很多知識,在此列出本人覺得比較好的連結,部分內容我也已經轉載,但是為了尊重原創,還是給出原文連結:

今生

    今生主要得益於神經網路,主要思想就是用DNN取待原有模組,或做最後的大融合

    上述涉及到的知識如果想要詳細瞭解請參考以下連結:

五 閒聊型問答系統

Seq2Seq

    在閒聊型問答系統介紹之前不得不先請出該系統的明星:Seq2Seq

   其模型結果如下所示:

 

  •   每個單元是迴圈神經網路,如: RNN、 LSTM、 GRU等, LSTM居多;
  • seq2seq屬於encoder-decoder結構中的一種, encoder將一個可變長度的訊號序列變為固定長度的向量表達, Decoder將這個固定長度的向量變成可變長度的目標訊號序列。
  • 該模型有很多變體,如加入注意力機制、記憶力模型等

   

說明: 上上一個模型為訓練模式,即decoder的輸入為ground truth,上個模型為部署模式,在測試時, decoder的輸入為其上一時刻的輸出

閒聊式問答系統框架

分詞  概念 a) 中文分詞指的是將一個漢字序列切分成一個一個單獨的詞。 分詞就是將連續的字序 列按照一定的規範重新組合成詞序列的過程。  中文分詞方法 a) 基於字串匹配的分詞方法 b) 基於理解的分詞方法 ( 處於試驗階段) c) 基於統計的分詞方法 d) 實際使用時結合a)和c)  中文分詞工具 jieba分詞、 SnowNLP、 THULAC、 NLPIR

詞嵌入( Word Embedding)  概念 a) 是一種詞的型別表示, 具有相似意義的詞具有相似的表示, 是將詞彙對映到實數向 量的方法總稱。  獨熱碼( one-hot encoding) a) 將詞表示為很長的向量, 詞的維度是詞表大小, 絕大多數維度為0, 只有一個維度為 1 b) “ 可愛” [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ……]  常用演算法 a) word2vec:詳細演算法請參看http://www.dataguru.cn/article-13488-1.html Skip-gram及CBOW演算法詳解及訓練過程請參看cs224d視訊的第2節課的內容

Seq2Seq  工具 a) Tensorflow embedding_attention_seq2seq的API介面 b) 介面引數請參看http://www.shareditor.com/blogshow?blogId=136 c) 該介面融合了word embedding 和attention機制

自然語言生成( Word Embedding)  演算法 a) 貪婪搜尋:輸出序列的每一步中輸出最有可能的單詞 b) 集束搜尋( beam search) :返回可能性最大的輸出序列列表 c) 詳細講解請參看: https://www.sohu.com/a/159397046_206784

知識庫問答系統(KB-QA)

  • 概念

給定自然語言問題,通過對問題進行語義理解和解析,進而利用知識庫進行查詢、推理得出答案。

  • 應用場景

適合回答when,what等事實性問題,回答的答案是知識庫中的實體或實體關係

  • 知識庫

利用三元組儲存(實體entity, 實體關係relation, 實體entity),如(姚明,出生地,上海)

  • 主流方法

 語義解析 思想在於將人類使用的自然語言句子轉化為機器可以理解的邏輯形式,通過資料庫得出答案。  資訊抽取 思想在於通過抽取句子中的特徵資訊和知識庫中相關實體的特徵資訊,用以上特徵訓練分類器對候選答案排序得出答案。  向量建模 思想在於將知識庫的實體和自然語言句子都對映到同一個向量空間中,通過比較相似度尋找答案。

 深度學習 應用於語義解析、向量建模;採用記憶網路、 Attention機制  動態模型 思想在於預定義一些網路模組,通過對問題進行解析,針對問題使用不同的 模組組合出動態模型進行回答。  參考資料 知乎專欄 https://zhuanlan.zhihu.com/p/27141786

垂直領域QA

對話系統

基於檢索的對話系統 (面向具體任務的問答新系統) 

 模式: s1,s2->R, 即字串s1和s2符合一定的規則  將回復使用的資料預先儲存, 優點為回覆的內容不會有語 法和語義的錯誤;  缺點:不會創造新的回答, 無法對未訓練的問題作出回答

  •  基於生成的對話系統 ( chitchat-bot, KB-QA)

 模式: s1->s2, 即由字串s1得到s2

  • 趨勢

具有上述兩種功能的混合對話系統

說明

總結

  • 相關知識比較龐雜,基礎知識比較欠缺的情況下,剛開始學起來可能成就感較低,弄清楚一個知識點可能需要查閱許多資料;
  • 傳統方法比較多,比較難理解; 但是不要灰心,不斷學習總能掌握