關於語音交互的不得不知的技術知識

要更好的了解語音交互,那麼就不得不了解背後的技術知識,國慶花了幾天大致看完了宗成慶的《統計自然語言處理》,這本書主要講的是語言交互里最關鍵的部分,即Natural languge Processing。為了自我梳理,把本書和看的吳軍的《數學之美》 一起匯總了下,整理出來給需要的童鞋。

本文分四個部分,相對比較長,而且又是技術的,可能會比較難看進去,但是....要堅持。

一,語音交互的系統構成

二,語音交互面臨的困難

三,自然語言處理的關鍵技術

四,具體場景語音交互實現的技術原理

一,語音交互的構成

語音交互一般包括三個模塊:

1,語音識別 ASR(Automatic Speech Recognition),主要工作是將聲音信息轉化為文字。

2,自然語言處理 NLP(Natural Language Processing),主要工作是理解人們想要表達的意思,並給出合理的反饋。

3,語音合成TTS( Text To Speech),主要工作是指將文字轉化為聲音

《統計自然語言處理》給了更細緻和完整的的人機對話系統組成結構,主要包括如下6個技術模塊:

1,語音識別模塊(speech recognizer)

實現用戶輸入語音到文字的識別轉換,識別結果一般以得分最高的前n(n≥1)個句子或詞格(word lattice)形式輸出。(把用戶說的語音轉成文字)

2,語言解析模塊 (language parser)

對語音識別結果進行分析理解,獲得給定輸入的內部表示。(即把用戶說的轉成機器理解的語言)

3,問題求解模塊(problem resolving)

依據語言解析器的分析結果進行問題的推理或查詢,求解用戶問題的答案。 (即解決用戶問題的模塊,比如調用的百度搜索)

4,對話管理模塊(dialogue management)

是系統的核心,一個理想的對話管理器應該能夠基於對話歷史調度人機交互機制,輔助語言解析器對語音識別結果進行正確的理解,為問題求解提供幫助,並指導語言的生成過程。可以說,對話管理機制是人機對話系統的中心樞紐。( 能夠記錄歷史對話數據,通過訓練能夠給到用戶更好的回答)

5,語言生成模塊(language generator)

根據解析模塊得到的內部表示,在對話管理機制的作用下生成自然語言句子。 (把回答的機器語言再轉換成 口語語言)

6,語音合成模塊(speech synthesizer)

將生成模塊生成的句子轉換成語音輸出。(把口語語言再轉化成語音)

二,語音交互的面臨的困難

下圖是知乎問題 為什麼 Siri 聽懂了我的話,還是不能做出有效的回答或準確的操作?的內容,很好的例證了語音交互里的最大的問題在於 語義理解,即準確的理解用戶的對話目的。Siri可以很好的識別語音,即能知道用戶說的是「 明天早上9點幫我預約計程車去公司「,但是卻不能理解你的對話目的,到底是要設定預約提醒日曆,還是要提前預約計程車。

而造成Siri不能理解用戶的原因是,1,原本的對話有多個含義,2, 原本的對話里 滴滴打車對於Siri來說是未知語言。(當時內置系統並沒有對接滴滴)

因此語音交互最終需要解決的關鍵問題是歧義消解(disambiguation)問題,和未知語言現象的處理問題

理解了這個背景,我們在和Siri對話或者設計語音交互的功能時就能理解它們為什麼不能做出有效的回答。下面一篇講的就是怎麼做語義理解。

三,自然語言處理的關鍵技術

怎麼讓機器去理解 「 明天早上9點幫我預約計程車去公司「 這句話, 就像對於一個2年紀小孩子,它可能聽得懂但是看不懂,那麼我們是不是先要要教她這句話是這樣讀:

「 明天/早上/9點/幫/我/預約/計程車/去/公司」——即 中文分詞

然後教她意思是明天早上9點/幫我/預約計程車/去公司」——即 句法結構

然後告訴她這裡的「預約」不是預約提醒,即語義分析

最後 「剛說的明天早上9點幫我預約計程車去公司。 但是我現在不需要了」—是轉折,即篇章分析

1,中文分詞

詞是對話最小單元,因此理解一句話的前提是能夠知道對話里用了哪些詞。

比如:「上海大學城書店在哪裡」,就需要拆分成「上海/大學城/書店/在/哪裡」,而不是: 「上海大學/城/書店/在/哪裡」

下面是《數學之美》吳軍講的 分詞的統一方法,他講的比較直接好了解,就直接截圖了。

不同應用的 分詞顆粒度大小是不同的,早期谷歌的分詞採用Basic Technology公司的通用分詞器,分詞結果沒有針對搜索進行優化,後期還專門為搜索設計和實現了自己的分詞系統。

2, 句法分析(syntactic parsing)

文中的解釋是句法分析是自然語言處理中的關鍵技術之一,其基本任務是確定句子的句法結構。 其實說簡單點, 我的理解是,中文分詞是把一句話拆分成 word1, word2, word3,那麼句法分析就是把一句拆分成 主語,謂語,賓語....。

通過句法分析,能夠更快的理解一句話,比如在理解英文對話的時候,雖然有些形容詞看不懂,但是我們找到動詞和主語或賓語後,能夠大致知道這句話的意思。

基於概率上下文無關文法(probabilistic (或stochastic)context-free grammar, PCFG或SCFG)的短語結構分析方法可以說是目前最成功的語法驅動的統計句法分析方法,有興趣的可以深入了解下。

3,語義分析

語義分析主要是詞義消歧和語義角色標註。

詞義消歧主要是因為一詞多義非常普遍,如,英語中的單詞bank的含義可以是「銀行」,也可以是「河岸」,到底是哪個需要根據上下文環境,自動排除歧義。

比如 「 take me to the bank in the north 「 到底是去北邊的銀行還是去北邊的河岸。

詞義消歧方法分為有監督的消歧方法(supervised disambiguation)和無監督的消歧方法(unsupervised disambiguation)。在有監督的消歧方法中,可以根據訓練數據得知一個多義詞所處的不同上下文與特定詞義的對應關係,那麼,多義詞的詞義識別問題實際上就是該詞的上下文分類問題,一旦確定了上下文所屬的類別,也就確定了該詞的詞義類型。

在無監督的詞義消歧中,由於訓練數據未經標註,因此,首先需要利用聚類演算法對同一個多義詞的所有上下文進行等價類劃分,如果一個詞的上下文出現在多個等價類中,那麼,該詞被認為是多義詞。然後,在詞義識別時,將該詞的上下文與其各個詞義對應上下文的等價類進行比較,通過上下文對應等價類的確定來斷定詞的語義。

4,篇章分析

篇章在英文中常用「discourse」表示,在漢語里常有篇章、語篇或者話語之說。篇章分析的最終目的是從整體上理解篇章,最重要的任務之一是分析篇章結構。

在對話的過程中我們很少長篇大論,但是在多輪對話時,一整段對話其實是一個篇章。所以需要理解每句話之間或者說篇章的結構。

比如:「 幫我定個明天早上7點的鬧鐘「 「 算了,太早了,幫我改成8點「 那麼通過理解兩句話的結構,我們知道需要去取消之前7點的鬧鐘,並設置一個8點的鬧鐘。

四,人機對話系統的實現技術

下面是《統計自然語言處理》里介紹的一種口語解析方法——基於規則和HMM的統計解析方法,文章並沒有說這是人機對話系統的標準實現技術,而且表示這種做法有一定缺陷。 我們只需要了解這種根據辭彙分類,語義組塊分析後生成機器能夠理解的對話分析機制。

基於規則和HMM的統計口語解析方法是

由辭彙分類模塊對其辭彙進行詞義分類,即把句子中的每一個詞映射到相應的詞義類中。語義組塊分析器從句子對應的詞義類序列中分析出語義組塊,組塊分析器輸出的是一個語義組塊序列。統計解析模塊從語義組塊序列分析出句子IF表示的主要框架。語義組塊解釋模塊把各個語義組塊解釋為相應的IF表達式片段。 經過對上述兩部分的合併,得到最終的IF(interchange format)表達式(國際語音翻譯先進研究聯盟C-STAR採用的一種稱作中間轉換格式的語義表示形式,以有利於多語言互譯)。

1,IF表達式格式:

Speaker:Speech-Act[+Concept]*[(Argument=Value[,Argument=Value]*)]

例:明天我想預訂一個單人間。

IF:c:give-information+reservation+room(room-spec=(room-type=single, quantity=1), reservation-spec=(time=(relative-time=tomorrow)))

該IF的含義為:說話人為「c」,該句子的意圖是提供信息,主題概念為「預訂房間」,關於「房間」的具體信息由一組「屬性-值」對描述:房間類型(room-type)為單人間(single),數量(quantity)為1;「預訂」的具體要求通過「相對時間(relative-time)」這一參數描述,參數值取「明天(tomorrow)」。

2.辭彙分類

據辭彙的語義功能,把每個辭彙劃分到不同的類。其分類依據是辭彙在句子中的語義功能,語義功能相同的辭彙歸為一類,例如,「單人間」和「雙人房」屬於同一個語義類;「大」和「小」雖然詞義不同,但在句子中的語義功能是相同的,所以,把它們也歸為一類。

3,語義組塊分析

根據語義組塊具體的意義,對語義組塊進行了語義分類。例如,所有對時間的表達,「明天」、「後天」、「星期一」、「三天後」等,都歸屬於時間類語義組塊,記作TIME;對房間類型的表達,如「單人間」、「雙人間」、「一個人住的房間」、「寬敞的房間」等,都歸屬於房間類語義組塊,記作ROOM_TYPE。

4,統計解析過程

手工標註一定數量的語料。對於語料中的每一個句子,首先對它進行語義組塊分析,得到該句子對應的組塊序列,然後給出該句子的IF語義表示,最後把IF語義表示線性化並且和語義組塊序列對齊。用這些語料來對模型的參數進行訓練,就得到一個統計解析模型。

對於一個需要解析的句子,首先對它進行語義組塊分析,得到該句子對應的語義組塊序列,然後把語義組塊序列作為統計解析模型的輸入,則解析模型的輸出就是輸入句子的線性化後的IF框架。

5,組塊解釋方法

在語義組塊分析時,通過規則方法獲得語義組塊的同時,也可以得到語義組塊內部的層次結構,但這種層次結構並不是我們所需要的IF表示,因此,我們設計了語義組塊解釋模塊,用來把這種層次結構轉換為IF表示。語義組塊解釋模塊是與組塊分析模塊配合工作的,組塊分析過程中用到的每一條規則都對應一個規則的解釋方法,利用這些解釋方法可以把規則所涉及的辭彙解釋為相應的IF表示。循環調用生成語義組塊的每一條規則所對應的解釋子程序,就可以得到該語義組塊對應的IF層次表示。

6,IF的生成

從上面的介紹可以看出,基於HMM的解析模塊輸出的結果和語義組塊解釋的結果都只是IF的片段,只有把它們合併才能得到完整的IF表示。語義組塊解釋模塊把每個語義組塊轉換為IF片段,同時每個語義組塊經過統計解析模塊解析後,又對應一個標註符號,並且該標註符號最終要作為IF表示中的一個結點。在各組塊合併時,IF生成器把語義組塊解釋結果作為該結點的子結點,把經過簡化處理的concepts序列還原為原來的concepts序列,這樣就得到了IF表示。

至此,本文講完了,感謝&撒花。

更多語音交互和產品設計知識,可以關注微信號。

weixin.qq.com/r/8zu4oGX (二維碼自動識別)

推薦閱讀:

CRF 小結
為何讀不懂你的那個TA
嶺回歸-嶺回歸
AI+互聯網金融--入職半年總結
torchtext入門教程,輕鬆玩轉文本數據處理

TAG:自然語言處理 |