close


分享嘉賓:周曉歡 阿里巴巴 算法專家

編輯整理:劉香妍 中南財經政法大學

出品平台:DataFunSummit


導讀:實體抽取或者說命名實體識別( NER ) 在信息抽取中扮演着重要角色,常見的實體抽取多是對文本進行子信息元素的抽取,但對語音的實體抽取當前應用也比較廣泛。

今天很高興邀請到來自阿里巴巴天貓精靈事業部人工智能部的周曉歡,來和大家分享天貓精靈在娛樂播放助手中關於實體抽取的一些創新與實踐。本次分享的主題為天貓精靈在實體抽取中的創新與實踐,主要內容包括:①天貓精靈業務背景介紹;②端到端的語義理解模型;③基於內容庫的端到端的實體抽取模型Speech2Slot;④ 無監督語音語義預訓練。

01
天貓精靈業務背景

首先和大家分享下天貓精靈內容點播的業務背景。

1.業務背景介紹

天貓精靈它作為一個智能音箱,內容點播是它最重要的功能之一。當一個用戶他有具體的點播意圖的時候,比如說他說:天貓精靈,我想聽劉德華的忘情水。這個時候就會進入內容點播場景。

2. 傳統語音點播鏈路與問題

天貓精靈的內容點播場景跟傳統的搜索不一樣的地方就在於:用戶是通過語音交互,並且是以自然語言請求的方式來進行點播的。面對這種語音的並且是自然語言請求的自然語言的方式的這種請求,傳統的做法為pipeline式:

一段用戶語音首先進入到語音識別ASR模塊,識別出相應的文本信息;

將文本信息送到自然語言處理NLU模塊當中進行實體抽取;

將識別到的實體(例如歌手名)送入相關性搜索IR模塊當中進行內容檢索,具體查找出用戶想要得到的內容。

但這種做法缺陷是:每一個模塊對於整個系統的性能都起着關鍵的作用,一旦前面的某個模塊出現了錯誤,後續的模塊可能就會出現連續的錯誤。具體而言這種方法存在的問題如下:

①首先是曝光偏差的問題。NLU模型在訓練的過程中基於準確的文本信息去進行訓練,但是在測試階段,它卻是基於ASR的輸出文本來進行預測的,這就導致NLU模型在訓練和測試過程中,它面臨的輸入分布是不一致的,這就是曝光偏差問題。曝光偏差問題會使得NLU模型在ASR結果出現錯誤的時候變得非常脆弱。

②其次訓練目標不一致的問題。在pipeline當中,各個模塊它的訓練目標沒有辦法和整個系統的訓練目標保持一致,例如語音識別ASR模塊,它的訓練目標是去降低所識別文本的字錯誤率。但是對於整個請求的達成來說,一個請求當中不同位置的字錯誤率對於最終請求的達成影響是不一樣的:比如說用戶他說我想聽劉德華的忘情水,這個時候識別錯了」我想聽「,和識別錯」忘情水「,對最終整個請求的達成影響是不一樣的,識別錯了」忘情水「對最終整個請求的達成影響會更大一些。

針對這種pipeline形式存在的問題,在學術界展開了廣泛的研究和討論,他們提出了構建一個端到端的語音語義理解的模型,也就是說要直接基於原始的聲音信號去做語義的理解。

02
端到端的語義理解模型

端到端的語音語義理解模型,主要應用在語義理解任務中的分類任務和生產任務上。

1. 分類任務

分類任務主要是應用在領域識別和意圖識別上,直接基於語音的信號構建一個端到端的語音語義理解模型,訓練目標就是意圖理解或者是領域識別的訓練目標。端到端的模型避免了之前那種pipeline形式的中間信息傳遞的損失,從而也能得到更好的一個效果。

2. 生成任務

生成任務上主要是應用在實體抽取上,端到端的實體抽取模型主要目前主要有兩種結構形式。

第一種,採用的是一種流式處理的模型結構,跟端到端流式處理的ASR模型的模型結構其實是一致的,但是不同的地方在於,它在輸出的文本序列中間加入了一些特殊的標誌符號,去標示出它所識別的實體名稱所在的位置,比如左圖中加了兩個「$」符號去標誌出歌手「劉德華」的位置,以及加了「#」去標誌出歌名「忘情水」所在的位置。

另外一種模型結構是採用的這種encoder-decoder的翻譯模型的模型結構,它是直接基於的原始聲音信號,直接去翻譯出所要抽取的實體名名稱的文本序列。

這裡將整個端到端的實體抽取模型抽象成這樣的兩個過程,分別是聲學建模過程和語言建模過程。聲學建模過程是指對原始的聲音信息進行一個處理和建模,而語言建模過程是指對輸出的文本用一個語言模型去學習它的語法規律。在天貓精靈內容點播場景里,所要識別的視頻實體名稱多是一些歌手名,歌名等等。同時在點播內容庫里存在着海量的歌手名和歌名。這些海量的歌手名和歌名,對於語言模型來說,要去建模是非常困難的。困難之處如下:

①內容實體名稱存在一音多字的情況,比如雷雨心的《記念》和蔡健雅的《紀念》,使得模型對於一些長尾的內容實體名稱的識別並不能做得特別好。

②同時語言模型對於內容實體名稱的泛化能力並不夠,這是主要是因為內容實體名稱通常不具備有語法的約束,甚至是反語言模型的,毫不相關的幾個字拼湊在一起都可能是一個歌名,因此語言模型很難對內容實體名稱去進行一個建模。

③此外用戶還經常存在口音的問題。

因此,針對內容實體名稱存在的困難,在天貓精靈的語音與一體化中,不僅僅希望引入一個端到端的語音語義理解模型來減少以前的那種pipeline方式帶來的信息損失,還希望能夠引入更多的信息來幫助模型去做好內容實體名稱的識別。最直接的想法就是考慮的是引入內容庫的信息。已知內容庫里已經有一首陳奕迅的《聖誕結》,這個時候去識別「she4ng da4n jie2」這個發音就會變得簡單了很多。同時,用戶請求的這些歌手歌名其實都是存在於內容庫里,所要識別這些實體名稱其實是在一個有限的集合內,因此可以把實體抽取從生成問題變成一個匹配的問題,做選擇題總是比做填空題簡單。

03
基於內容庫的端到端的實體抽取模型Speech2Slot

1. 模型的輸入和輸出

輸入的是用戶請求的音素後驗矩陣(音素它類似於拼音的序列),輸出的是slot的音素序列。音素後驗矩陣是ASR模型的一個中間的輸出結果矩陣,可以理解為是一個時間步數乘以音素詞典大小的這樣一個矩陣,在每一個時間步上都有一個音素的概率分布。為什麼要選取ASR的中間結果音素後驗來作為輸入?這主要是因為我們認為聲學建模與實體抽取任務其實是兩個相對獨立的任務,聲學建模可以認為它是一個感知層面的學習,而後續的實體抽取的任務,可以認為它是一個認知層面的一個學習,將感知學習和認知學習進行分離,對最終整個系統的效果的影響應該不會太大。另外,選擇音素後驗矩陣作為輸入,然後slot的音素序列作為輸出,通過這種選擇,音素可以恰好為語音信號和文本信號提供了一個統一的編碼方式,使得整個模型的訓練難度大大的降低。

2. 模型結構

我們的模型希望去建模這樣一個過程:首先在一段請求語音中截取實體名稱所在的聲音切片,然後再對這個聲音切片進行一個特徵的抽取和處理,最後基於抽取處理後的特徵進行一個分類,看它到底是屬於內容庫里的哪一個實體名稱。這裡需要注意的一點是,實體名稱在聲音特徵上並不具備特殊性,因此在進行一個語音實體名稱的聲音切片的定位時,還需要引入一些上下文的知識,比如內容庫的知識等來輔助實體名稱的定位。所以最終的整個的模型結構就如下圖所示,主要分三部分來介紹:Speech encoder、Knowledge encoder、Bright layer。

① Speech encoder(圖中藍色部分)。我們對請求語音進行一個語音語義的理解,然後生成一個memory的矩陣,這裡就是常規transformer結構,它可以幫助捕捉到重點的語義信息。

② Knowledge encoder(圖中橘色部分)。通過預訓練的方式來將內容庫的知識建模在knowledge encoder當中,它的預訓練方式採用的是語言模型的預訓練的方式,訓練語料是內容庫中的所有的實體名稱,通過這種方式,knowledge encoder能夠提前看到內容庫里都存在哪些實體名稱,同時去記住這些實體名稱。

③ Bright layer(圖中綠色部分)。它實現的是一個實體定位和實體分類的這樣一個作用。首先將的knowledge encoder每一個step的輸出,來對Speech encoder的memory矩陣做attention,然後定位出內容實體的聲音切片所在的位置,同時還會對抽出來的相應的這些信息做一個處理,最終輸出它接下來這一幀應該輸出哪一個音素。注意這裡knowledge encoder的輸出只去參與了attention的過程,並不參與最後音素概率的計算,這保證模型不過分依賴語音模型的結果。

3. 引入內容庫信息的方法

在模型中,通過以下兩點來引入內容庫信息:Knowledge encoder用內容庫中所有的內容名稱進行預訓練,並採用Cold-fusion的方式進行Finetune。另外在推理階段,會提前的把內容庫里所有的內容名稱構建成一個Trie樹,在Beam-search過程中,構建的Trie樹用來約束模型輸出必須指向內容庫中的某一名稱。

4. 模型效果

04
無監督語音語義預訓練

1. 為什麼要進行無監督語音語義預訓練

訓練數據不足。

語義理解能力,對於整個端到端的實體抽取模型非常重要。在天貓精靈的模型中抽取實體時:主要是encoder的語義理解能力,以及knowledge encoder對內容庫的一個匹配能力,同時應用這兩個能力來對實體名稱進行定位的。

2. 如何進行語音語義的無監督預訓練

具體的就是直接基於音素的後驗,利用大量的無標籤的語音數據來進行對於語音語義理解的這一模塊進行預訓練,之後這一個模塊也能夠快速地應用於語音語義理解模型里(分類任務、生成任務)的finetune。那麼關於訓練在文本領域其實已經有的大量的應用,比如BERT,通過隨機的mask一些輸入的token,然後去做一個預測,通過這種方式來進行預訓練。那麼我們的基於音素的無監督預訓練也可以採用的類似的方式,我們提出Phoneme-BERT一種基於音素的無監督預訓練方式。

3. 文本預訓練和音素後驗預訓練的區別

① 輸入輸出不同

文本預訓練模型的輸入輸出都是token組成的序列,而在音素後驗的模型當中,輸入輸出的是概率分布矩陣(音素後驗矩陣)。因此,在mask操作時,Phoneme-BERT採用的方式是選取音素後驗矩陣中任意的幾幀,對相應幀上的整個概率分布進行mask,計算loss時將預測的概率分布和原始的被mask的概率分布進行一個交叉熵計算,通過這種方式來實現mask訓練的過程。

② token含義不同

在文本預訓練,序列中的每一個token都是有意義的,但是在音素後驗矩陣當中卻存在着大量無意義的靜音幀。mask掉這些靜音幀去做預測的話,給模型的學習帶來很多噪聲和困難。對此,我們採取的方案是通過概率分布篩選出靜音幀,並在mask過程中對這些靜音幀進行進行排除。

③ 單個token信息量不同

文本預訓練中,每個token包含的信息量比較大,這是因為不管是中文詞典或者是英文詞典,規模都較大,所以每一個token包含的信息量都會比較多。而音素後驗矩陣中單個向量包含的信息量會比較少,因為中文音素只有121個,然後英文音素的話只有42個。由於每一幀包含的信息量較少,這樣隨機mask後做訓練的話,模型並不能真正得到語義能力的學習。對此,我們採用片段式的mask,通過這種方式使得在每一次mask的過程中可以去掉包含更多信息量的這些幀,然後使得整個無監督的預訓練的效果會達到更好。

4. 應用流程

我們利用Phoneme-BERT對speech2slot中的speech encoder進行一個預訓練,通過大規模無監督語料讓speech encoder具備語音語義理解能力。預訓練完成之後,我們再用少量標註數據對整個speech2slot進行端到端的finetune。Phoneme-BERT還可以應用於所有的端到端的語音語義理解模型(分類任務/生成任務)的預訓練。

5. 實驗結果

可以看到實驗結果,不管是哪一種預訓練的方式,都相比沒有預訓的方式能夠得到更好的一個提升。

同時在分類模型上也分別做了實驗,一個是在公開的數據集上做的一個實驗:先用開公開的4000多小時的英文的語音數據,是對模型進行一個預訓練,然後之後預訓練好的模型,再去做一個領域分類任務,可以看到的,端到端的模型一開始在訓練數據不足的情況下,相比於baseline錯誤率是還提高了,但是預訓練之後,整個模型相比於之前的模型準確率是提升的。另外在天貓精靈的數據上也是得到了像一樣的驗證效果。

今天的分享就到這裡,謝謝大家。

在文末分享、點讚、在看,給個3連擊唄~

分享嘉賓:


福利下載


識別二維碼,添加小助手微信,回復『自然語言處理典藏版合集』,即可下載。

關於我們:

DataFun:專注於大數據、人工智能技術應用的分享與交流。發起於2017年,在北京、上海、深圳、杭州等城市舉辦超過100+線下和100+線上沙龍、論壇及峰會,已邀請近1000位專家和學者參與分享。其公眾號 DataFunTalk 累計生產原創文章500+,百萬+閱讀,12萬+精準粉絲。

🧐分享、點讚、在看,給個3連擊唄!👇

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()