谷歌推自然語言理解框架SLING,理解一步到位
大多數(shù)自然語言理解(NLU)系統(tǒng)分析語言的過程是一條由分析步驟組成的流水線:先標(biāo)注詞性,再進(jìn)行句法依存分析,然后為輸入文本計(jì)算出語義表示。
谷歌打破了這條流水線上的所有步驟,把它們捏到了一起,推出了一步到位的自然語言理解系統(tǒng):SLING。
SLING能夠直接分析自然語言文本,根據(jù)它的語義表示生成語義框架圖示。與原有的大多數(shù)系統(tǒng)相比,它避免了自然語言理解流水線的一個(gè)嚴(yán)重缺陷:前面步驟中的錯(cuò)誤會(huì)影響后續(xù)步驟的分析。
實(shí)際上,流水線式的自然語言理解系統(tǒng)有利于對語言理解的不同階段進(jìn)行模塊化,但是,早期步驟中的錯(cuò)誤會(huì)在后邊的步驟里發(fā)生連鎖反應(yīng),對最終的表示產(chǎn)生影響。
比如說,一個(gè)典型的流程可能會(huì)在早期步驟中進(jìn)行句法依存分析,后來又需要共指消解。這種情況下,如果依存分析出現(xiàn)錯(cuò)誤,共指消解的結(jié)果也會(huì)受到影響。
而SLING這種直接從文本到語框架圖示的方法中,輸出的框架圖示能直接捕捉到用戶感興趣的語義標(biāo)注,同時(shí)避開了流水線式系統(tǒng)所帶來的陷阱,還能防止出現(xiàn)不必要的計(jì)算。SLING使用一個(gè)專用的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),通過框架圖示上的增量編輯運(yùn)算,來為輸入文本計(jì)算輸出表示。
而框架圖示則足夠靈活,能夠捕捉到很多易引發(fā)興趣的語義任務(wù)。
SLING分析器的訓(xùn)練只用到了輸入詞語,不需要依存分析等任何中間注釋。
在推理階段,SLING能夠快速進(jìn)行分析,它提供了一個(gè)高效、可擴(kuò)展的圖示存儲(chǔ)實(shí)現(xiàn),以及一個(gè)生成高效代碼來執(zhí)行RNN的JIT編譯器。雖然SLING現(xiàn)在還在試驗(yàn)階段,但它在普通臺(tái)式機(jī)CPU上的分析速度已經(jīng)超過了2500 token/秒。
框架語義分析
框架語義學(xué)將文本(例如一個(gè)句子)的意思表示為一組形式語句,每個(gè)形式語句成為一個(gè)“框架”,可以看作意義或者知識的一個(gè)單元,也包含和概念的交互,或者與之相關(guān)的其他框架。
SLING將所有語義框架組織成一些列插槽,每個(gè)插槽都有自己的名字(角色)和值,這個(gè)值可以是文字的,也可以是和另一個(gè)插槽之間的連接。
比如說這句話:
Many people now claim to have predicted Black Monday.
SLING會(huì)從中認(rèn)出提及的實(shí)體(例如人物、地點(diǎn)、事件)、測量值(例如時(shí)間、距離)以及其他概念(例如動(dòng)詞),然后將它們放置在與輸入中動(dòng)詞相關(guān)的正確語義角色上。
比如說句中的“predict”,就表示為PREDICT-01框架。PREDICT-01和施行predict這個(gè)動(dòng)作的主體有交互(插槽),通過ARG0插槽表示,ARG0與表示“people”的PERSON框架相連接;PREDICT-01還和被預(yù)測的客體有交互,表示為ARG1插槽,和表示“Black Monday”的EVENT框架連接。
如下圖所示:
框架語義分析的任務(wù)就是直接生成一幅圖示,包含像上圖這樣通過插槽互相連接的框架。
上面只是一個(gè)簡單的例子,框架圖示很強(qiáng)大,適用于各種復(fù)雜的語義標(biāo)注任務(wù)。對于初學(xué)者來說,框架是一種將語言內(nèi)部和外部信息結(jié)合起來的方式。然后,這就可以用來處理復(fù)雜的語言理解問題,比如指代、隱喻、借代等。這些任務(wù)的語義框架圖示只在用到的框架類型、角色、連接限制上有所不同。
SLING
SLING通過為易引發(fā)興趣的語義框架進(jìn)行優(yōu)化,訓(xùn)練了一個(gè)RNN。網(wǎng)絡(luò)隱藏層中已經(jīng)學(xué)習(xí)到的表示取代了流水線系統(tǒng)中手工調(diào)整的特征組合和中間表示。
在內(nèi)部,SLING使用編碼器-解碼器架構(gòu),其中使用諸如原始單詞,其后綴,標(biāo)點(diǎn)符號等簡單詞匯特征將每個(gè)輸入詞編碼成向量。而解碼器用這種表示和自己歷史中的循環(huán)特征,來計(jì)算更新框架圖示以獲得輸入句子的預(yù)期框架語義表示所需的轉(zhuǎn)換序列。
在訓(xùn)練模型時(shí),SLING使用了TensorFlow和DRAGNN。
下面的動(dòng)畫展示了如何用一次轉(zhuǎn)換將框架和角色增量添加到框架圖中。
正如前面用簡單例句所說明的那樣,SLING使用ARG1這一角色來連接VERB和EVENT框架,EVOKE轉(zhuǎn)換從文本中接下來的幾個(gè)token中喚起指定類型的框架。同樣,CONNECT轉(zhuǎn)換將兩個(gè)現(xiàn)有框架和一個(gè)特定角色連接起來。當(dāng)輸入耗盡,最后一個(gè)轉(zhuǎn)換(STOP)執(zhí)行完成,框架圖示被視為已完成,并返回給用戶,用戶可以查看圖示,得到句子背后的語義。
這個(gè)轉(zhuǎn)換系統(tǒng)中有一個(gè)關(guān)鍵方面,就是會(huì)出現(xiàn)一個(gè)固定大小的框架注意力緩沖區(qū),代表最近被喚醒或修改過的框架,如上圖的橙色框所示。這個(gè)緩沖區(qū)捕捉了我們傾向于想起最近喚醒、提及、增強(qiáng)過的知識。如果框架不再使用,隨著新框架的進(jìn)入,它最終會(huì)被刷新出緩沖區(qū)。這個(gè)簡單的機(jī)制在捕捉大部分框架間連接上都非常有效。
相關(guān)資源
SLING是用C++寫成的,開源代碼地址:
https://github.com/google/sling
相關(guān)論文SLING: A framework for frame semantic parsing
地址:https://arxiv.org/abs/1710.07032
— 完 —