關(guān)于語(yǔ)音交互,你不得不知的技術(shù)知識(shí)
要更好的了解語(yǔ)音交互,那么就不得不了解背后的技術(shù)知識(shí),國(guó)慶花了幾天大致看完了宗成慶的《統(tǒng)計(jì)自然語(yǔ)言處理》,這本書(shū)主要講的是語(yǔ)言交互里最關(guān)鍵的部分,即Natural languge Processing。為了自我梳理,把本書(shū)和看的吳軍的《數(shù)學(xué)之美》 一起匯總了下,整理出來(lái)給需要的童鞋。
本文分四個(gè)部分,相對(duì)比較長(zhǎng),而且又是技術(shù)的,可能會(huì)比較難看進(jìn)去,但是….要堅(jiān)持。
- 一,語(yǔ)音交互的系統(tǒng)構(gòu)成
- 二,語(yǔ)音交互面臨的困難
- 三,自然語(yǔ)言處理的關(guān)鍵技術(shù)
- 四,具體場(chǎng)景語(yǔ)音交互實(shí)現(xiàn)的技術(shù)原理
一,語(yǔ)音交互的構(gòu)成
語(yǔ)音交互一般包括三個(gè)模塊:
- 語(yǔ)音識(shí)別 ASR(Automatic Speech Recognition),主要工作是將聲音信息轉(zhuǎn)化為文字。
- 自然語(yǔ)言處理 NLP(Natural Language Processing),主要工作是理解人們想要表達(dá)的意思,并給出合理的反饋。
- 語(yǔ)音合成TTS( Text To Speech),主要工作是指將文字轉(zhuǎn)化為聲音
《統(tǒng)計(jì)自然語(yǔ)言處理》給了更細(xì)致和完整的的人機(jī)對(duì)話系統(tǒng)組成結(jié)構(gòu),主要包括如下6個(gè)技術(shù)模塊:
1,語(yǔ)音識(shí)別模塊(speech recognizer)
實(shí)現(xiàn)用戶輸入語(yǔ)音到文字的識(shí)別轉(zhuǎn)換,識(shí)別結(jié)果一般以得分最高的前n(n≥1)個(gè)句子或詞格(word lattice)形式輸出。(把用戶說(shuō)的語(yǔ)音轉(zhuǎn)成文字)
2,語(yǔ)言解析模塊?(language parser)
對(duì)語(yǔ)音識(shí)別結(jié)果進(jìn)行分析理解,獲得給定輸入的內(nèi)部表示。(即把用戶說(shuō)的轉(zhuǎn)成機(jī)器理解的語(yǔ)言)
3,問(wèn)題求解模塊(problem resolving)
依據(jù)語(yǔ)言解析器的分析結(jié)果進(jìn)行問(wèn)題的推理或查詢,求解用戶問(wèn)題的答案。 (即解決用戶問(wèn)題的模塊,比如調(diào)用的百度搜索)
4,對(duì)話管理模塊(dialogue management)
是系統(tǒng)的核心,一個(gè)理想的對(duì)話管理器應(yīng)該能夠基于對(duì)話歷史調(diào)度人機(jī)交互機(jī)制,輔助語(yǔ)言解析器對(duì)語(yǔ)音識(shí)別結(jié)果進(jìn)行正確的理解,為問(wèn)題求解提供幫助,并指導(dǎo)語(yǔ)言的生成過(guò)程??梢哉f(shuō),對(duì)話管理機(jī)制是人機(jī)對(duì)話系統(tǒng)的中心樞紐。( 能夠記錄歷史對(duì)話數(shù)據(jù),通過(guò)訓(xùn)練能夠給到用戶更好的回答)
5,語(yǔ)言生成模塊(language generator)
根據(jù)解析模塊得到的內(nèi)部表示,在對(duì)話管理機(jī)制的作用下生成自然語(yǔ)言句子。 (把回答的機(jī)器語(yǔ)言再轉(zhuǎn)換成 口語(yǔ)語(yǔ)言)
6,語(yǔ)音合成模塊(speech synthesizer)
將生成模塊生成的句子轉(zhuǎn)換成語(yǔ)音輸出。(把口語(yǔ)語(yǔ)言再轉(zhuǎn)化成語(yǔ)音)
二,語(yǔ)音交互的面臨的困難
下圖是知乎問(wèn)題?為什么 Siri 聽(tīng)懂了我的話,還是不能做出有效的回答或準(zhǔn)確的操作?的內(nèi)容,很好的例證了語(yǔ)音交互里的最大的問(wèn)題在于 語(yǔ)義理解,即準(zhǔn)確的理解用戶的對(duì)話目的。Siri可以很好的識(shí)別語(yǔ)音,即能知道用戶說(shuō)的是“ 明天早上9點(diǎn)幫我預(yù)約出租車去公司“,但是卻不能理解你的對(duì)話目的,到底是要設(shè)定預(yù)約提醒日歷,還是要提前預(yù)約出租車。
而造成Siri不能理解用戶的原因是,1,原本的對(duì)話有多個(gè)含義,2, 原本的對(duì)話里 滴滴打車對(duì)于Siri來(lái)說(shuō)是未知語(yǔ)言。(當(dāng)時(shí)內(nèi)置系統(tǒng)并沒(méi)有對(duì)接滴滴)
因此語(yǔ)音交互最終需要解決的關(guān)鍵問(wèn)題是歧義消解(disambiguation)問(wèn)題,和未知語(yǔ)言現(xiàn)象的處理問(wèn)題。
理解了這個(gè)背景,我們?cè)诤蚐iri對(duì)話或者設(shè)計(jì)語(yǔ)音交互的功能時(shí)就能理解它們?yōu)槭裁床荒茏龀鲇行У幕卮?。下面一篇講的就是怎么做語(yǔ)義理解。
三,自然語(yǔ)言處理的關(guān)鍵技術(shù)
怎么讓機(jī)器去理解 “ 明天早上9點(diǎn)幫我預(yù)約出租車去公司“ 這句話, 就像對(duì)于一個(gè)2年紀(jì)小孩子,它可能聽(tīng)得懂但是看不懂,那么我們是不是先要要教她這句話是這樣讀:
“ 明天/早上/9點(diǎn)/幫/我/預(yù)約/出租車/去/公司”——即?中文分詞
然后教她意思是?“明天早上9點(diǎn)/幫我/預(yù)約出租車/去公司”——即?句法結(jié)構(gòu)
然后告訴她這里的“預(yù)約”不是預(yù)約提醒,即語(yǔ)義分析
最后 “剛說(shuō)的明天早上9點(diǎn)幫我預(yù)約出租車去公司。 但是我現(xiàn)在不需要了”—是轉(zhuǎn)折,即篇章分析
1,中文分詞
詞是對(duì)話最小單元,因此理解一句話的前提是能夠知道對(duì)話里用了哪些詞。
比如:“上海大學(xué)城書(shū)店在哪里”,就需要拆分成“上海/大學(xué)城/書(shū)店/在/哪里”,而不是: “上海大學(xué)/城/書(shū)店/在/哪里”
下面是《數(shù)學(xué)之美》吳軍講的 分詞的統(tǒng)一方法,他講的比較直接好了解,就直接截圖了。
不同應(yīng)用的 分詞顆粒度大小是不同的,早期谷歌的分詞采用Basic Technology公司的通用分詞器,分詞結(jié)果沒(méi)有針對(duì)搜索進(jìn)行優(yōu)化,后期還專門為搜索設(shè)計(jì)和實(shí)現(xiàn)了自己的分詞系統(tǒng)。
2, 句法分析(syntactic parsing)
文中的解釋是句法分析是自然語(yǔ)言處理中的關(guān)鍵技術(shù)之一,其基本任務(wù)是確定句子的句法結(jié)構(gòu)。 其實(shí)說(shuō)簡(jiǎn)單點(diǎn), 我的理解是,中文分詞是把一句話拆分成 word1, word2, word3,那么句法分析就是把一句拆分成 主語(yǔ),謂語(yǔ),賓語(yǔ)….。
通過(guò)句法分析,能夠更快的理解一句話,比如在理解英文對(duì)話的時(shí)候,雖然有些形容詞看不懂,但是我們找到動(dòng)詞和主語(yǔ)或賓語(yǔ)后,能夠大致知道這句話的意思。
基于概率上下文無(wú)關(guān)文法(probabilistic (或stochastic)context-free grammar, PCFG或SCFG)的短語(yǔ)結(jié)構(gòu)分析方法可以說(shuō)是目前最成功的語(yǔ)法驅(qū)動(dòng)的統(tǒng)計(jì)句法分析方法,有興趣的可以深入了解下。
3,語(yǔ)義分析
語(yǔ)義分析主要是詞義消歧和語(yǔ)義角色標(biāo)注。
詞義消歧主要是因?yàn)橐辉~多義非常普遍,如,英語(yǔ)中的單詞bank的含義可以是“銀行”,也可以是“河岸”,到底是哪個(gè)需要根據(jù)上下文環(huán)境,自動(dòng)排除歧義。
比如 “ take me to the bank in the north “ 到底是去北邊的銀行還是去北邊的河岸。
詞義消歧方法分為有監(jiān)督的消歧方法(supervised disambiguation)和無(wú)監(jiān)督的消歧方法(unsupervised disambiguation)。在有監(jiān)督的消歧方法中,可以根據(jù)訓(xùn)練數(shù)據(jù)得知一個(gè)多義詞所處的不同上下文與特定詞義的對(duì)應(yīng)關(guān)系,那么,多義詞的詞義識(shí)別問(wèn)題實(shí)際上就是該詞的上下文分類問(wèn)題,一旦確定了上下文所屬的類別,也就確定了該詞的詞義類型。
在無(wú)監(jiān)督的詞義消歧中,由于訓(xùn)練數(shù)據(jù)未經(jīng)標(biāo)注,因此,首先需要利用聚類算法對(duì)同一個(gè)多義詞的所有上下文進(jìn)行等價(jià)類劃分,如果一個(gè)詞的上下文出現(xiàn)在多個(gè)等價(jià)類中,那么,該詞被認(rèn)為是多義詞。然后,在詞義識(shí)別時(shí),將該詞的上下文與其各個(gè)詞義對(duì)應(yīng)上下文的等價(jià)類進(jìn)行比較,通過(guò)上下文對(duì)應(yīng)等價(jià)類的確定來(lái)斷定詞的語(yǔ)義。
4,篇章分析
篇章在英文中常用“discourse”表示,在漢語(yǔ)里常有篇章、語(yǔ)篇或者話語(yǔ)之說(shuō)。篇章分析的最終目的是從整體上理解篇章,最重要的任務(wù)之一是分析篇章結(jié)構(gòu)。
在對(duì)話的過(guò)程中我們很少長(zhǎng)篇大論,但是在多輪對(duì)話時(shí),一整段對(duì)話其實(shí)是一個(gè)篇章。所以需要理解每句話之間或者說(shuō)篇章的結(jié)構(gòu)。
比如:“ 幫我定個(gè)明天早上7點(diǎn)的鬧鐘“ “ 算了,太早了,幫我改成8點(diǎn)“ 那么通過(guò)理解兩句話的結(jié)構(gòu),我們知道需要去取消之前7點(diǎn)的鬧鐘,并設(shè)置一個(gè)8點(diǎn)的鬧鐘。
四,人機(jī)對(duì)話系統(tǒng)的實(shí)現(xiàn)技術(shù)
下面是《統(tǒng)計(jì)自然語(yǔ)言處理》里介紹的一種口語(yǔ)解析方法——基于規(guī)則和HMM的統(tǒng)計(jì)解析方法,文章并沒(méi)有說(shuō)這是人機(jī)對(duì)話系統(tǒng)的標(biāo)準(zhǔn)實(shí)現(xiàn)技術(shù),而且表示這種做法有一定缺陷。 我們只需要了解這種根據(jù)詞匯分類,語(yǔ)義組塊分析后生成機(jī)器能夠理解的對(duì)話分析機(jī)制。
基于規(guī)則和HMM的統(tǒng)計(jì)口語(yǔ)解析方法是
由詞匯分類模塊對(duì)其詞匯進(jìn)行詞義分類,即把句子中的每一個(gè)詞映射到相應(yīng)的詞義類中。語(yǔ)義組塊分析器從句子對(duì)應(yīng)的詞義類序列中分析出語(yǔ)義組塊,組塊分析器輸出的是一個(gè)語(yǔ)義組塊序列。統(tǒng)計(jì)解析模塊從語(yǔ)義組塊序列分析出句子IF表示的主要框架。語(yǔ)義組塊解釋模塊把各個(gè)語(yǔ)義組塊解釋為相應(yīng)的IF表達(dá)式片段。 經(jīng)過(guò)對(duì)上述兩部分的合并,得到最終的IF(interchange format)表達(dá)式(國(guó)際語(yǔ)音翻譯先進(jìn)研究聯(lián)盟C-STAR采用的一種稱作中間轉(zhuǎn)換格式的語(yǔ)義表示形式,以有利于多語(yǔ)言互譯)。
1,IF表達(dá)式格式:
Speaker:Speech-Act[+Concept]*[(Argument=Value[,Argument=Value]*)]
例:明天我想預(yù)訂一個(gè)單人間。
IF:c:give-information+reservation+room(room-spec=(room-type=single, quantity=1), reservation-spec=(time=(relative-time=tomorrow)))
該IF的含義為:說(shuō)話人為“c”,該句子的意圖是提供信息,主題概念為“預(yù)訂房間”,關(guān)于“房間”的具體信息由一組“屬性-值”對(duì)描述:房間類型(room-type)為單人間(single),數(shù)量(quantity)為1;“預(yù)訂”的具體要求通過(guò)“相對(duì)時(shí)間(relative-time)”這一參數(shù)描述,參數(shù)值取“明天(tomorrow)”。
2.詞匯分類
據(jù)詞匯的語(yǔ)義功能,把每個(gè)詞匯劃分到不同的類。其分類依據(jù)是詞匯在句子中的語(yǔ)義功能,語(yǔ)義功能相同的詞匯歸為一類,例如,“單人間”和“雙人房”屬于同一個(gè)語(yǔ)義類;“大”和“小”雖然詞義不同,但在句子中的語(yǔ)義功能是相同的,所以,把它們也歸為一類。
3,語(yǔ)義組塊分析
根據(jù)語(yǔ)義組塊具體的意義,對(duì)語(yǔ)義組塊進(jìn)行了語(yǔ)義分類。例如,所有對(duì)時(shí)間的表達(dá),“明天”、“后天”、“星期一”、“三天后”等,都?xì)w屬于時(shí)間類語(yǔ)義組塊,記作TIME;對(duì)房間類型的表達(dá),如“單人間”、“雙人間”、“一個(gè)人住的房間”、“寬敞的房間”等,都?xì)w屬于房間類語(yǔ)義組塊,記作ROOM_TYPE。
4,統(tǒng)計(jì)解析過(guò)程
手工標(biāo)注一定數(shù)量的語(yǔ)料。對(duì)于語(yǔ)料中的每一個(gè)句子,首先對(duì)它進(jìn)行語(yǔ)義組塊分析,得到該句子對(duì)應(yīng)的組塊序列,然后給出該句子的IF語(yǔ)義表示,最后把IF語(yǔ)義表示線性化并且和語(yǔ)義組塊序列對(duì)齊。用這些語(yǔ)料來(lái)對(duì)模型的參數(shù)進(jìn)行訓(xùn)練,就得到一個(gè)統(tǒng)計(jì)解析模型。
對(duì)于一個(gè)需要解析的句子,首先對(duì)它進(jìn)行語(yǔ)義組塊分析,得到該句子對(duì)應(yīng)的語(yǔ)義組塊序列,然后把語(yǔ)義組塊序列作為統(tǒng)計(jì)解析模型的輸入,則解析模型的輸出就是輸入句子的線性化后的IF框架。
5,組塊解釋方法
在語(yǔ)義組塊分析時(shí),通過(guò)規(guī)則方法獲得語(yǔ)義組塊的同時(shí),也可以得到語(yǔ)義組塊內(nèi)部的層次結(jié)構(gòu),但這種層次結(jié)構(gòu)并不是我們所需要的IF表示,因此,我們?cè)O(shè)計(jì)了語(yǔ)義組塊解釋模塊,用來(lái)把這種層次結(jié)構(gòu)轉(zhuǎn)換為IF表示。語(yǔ)義組塊解釋模塊是與組塊分析模塊配合工作的,組塊分析過(guò)程中用到的每一條規(guī)則都對(duì)應(yīng)一個(gè)規(guī)則的解釋方法,利用這些解釋方法可以把規(guī)則所涉及的詞匯解釋為相應(yīng)的IF表示。循環(huán)調(diào)用生成語(yǔ)義組塊的每一條規(guī)則所對(duì)應(yīng)的解釋子程序,就可以得到該語(yǔ)義組塊對(duì)應(yīng)的IF層次表示。
6,IF的生成
從上面的介紹可以看出,基于HMM的解析模塊輸出的結(jié)果和語(yǔ)義組塊解釋的結(jié)果都只是IF的片段,只有把它們合并才能得到完整的IF表示。語(yǔ)義組塊解釋模塊把每個(gè)語(yǔ)義組塊轉(zhuǎn)換為IF片段,同時(shí)每個(gè)語(yǔ)義組塊經(jīng)過(guò)統(tǒng)計(jì)解析模塊解析后,又對(duì)應(yīng)一個(gè)標(biāo)注符號(hào),并且該標(biāo)注符號(hào)最終要作為IF表示中的一個(gè)結(jié)點(diǎn)。在各組塊合并時(shí),IF生成器把語(yǔ)義組塊解釋結(jié)果作為該結(jié)點(diǎn)的子結(jié)點(diǎn),把經(jīng)過(guò)簡(jiǎn)化處理的concepts序列還原為原來(lái)的concepts序列,這樣就得到了IF表示。
至此,本文講完了,感謝&撒花。并推薦 宗成慶的這本《統(tǒng)計(jì)自然語(yǔ)言處理》。
本文由 @少女璐 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自Pixabay,基于CC0協(xié)議
另外小吐槽一下少女樓主的文風(fēng),CC0,HMM好多專業(yè)名稱的縮寫,讀起來(lái)不適
剛剛看過(guò)《數(shù)學(xué)之美》,里面有些統(tǒng)計(jì)學(xué)知識(shí)的推導(dǎo)還是挺難懂的,樓主基礎(chǔ)蠻好的,本人也從事語(yǔ)音產(chǎn)品工作,期待有機(jī)會(huì)進(jìn)行交流
同涉及語(yǔ)音產(chǎn)品中,可否留個(gè)方式交流?
18681503479 您加我吧