趙睿卓,高金華,孫曉茜, 徐 力,沈華偉,2,程學(xué)旗,2
(1. 中國科學(xué)院 計(jì)算技術(shù)研究所 網(wǎng)絡(luò)數(shù)據(jù)科學(xué)與技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京 100190;2. 中國科學(xué)院大學(xué) 計(jì)算機(jī)與控制學(xué)院,北京 100049)
語義解析的目標(biāo)是將自然語言表達(dá)映射為機(jī)器可理解的邏輯表達(dá),使得人類和機(jī)器能夠更加方便地進(jìn)行交互。語義解析在問答、指令解釋和代碼生成等自然語言理解任務(wù)中均有重要的應(yīng)用。為了適配不同的應(yīng)用需求,目標(biāo)邏輯表達(dá)的形式也不盡相同。常見的邏輯表達(dá)包括FunQL、λ演算和以SQL查詢和python代碼為代表的編程語言等??紤]到λ演算的表達(dá)能力和靈活性,本文采用λ演算作為目標(biāo)邏輯表達(dá)的表示形式。
早期的語義解析方法[1]通常采用詞典和包含一系列組合規(guī)則的語法共同作用的方式生成邏輯表達(dá)。對于一個給定的自然語言表達(dá),該類方法先根據(jù)詞典和語法規(guī)則產(chǎn)生目標(biāo)邏輯表達(dá)的備選集,再學(xué)習(xí)一個打分函數(shù)來對備選集中的邏輯表達(dá)進(jìn)行打分,并將得分最高的邏輯表達(dá)作為最終的解析結(jié)果。然而,詞典和語法通常被限制在一個特定領(lǐng)域并且訓(xùn)練過程需要大量的特征工程。隨著深度學(xué)習(xí)的發(fā)展,越來越多的結(jié)合深度神經(jīng)網(wǎng)絡(luò)的神經(jīng)語義解析方法[2]被提出。該類方法通常采用編碼器—解碼器框架,將自然語言表達(dá)作為輸入,邏輯表達(dá)作為輸出,以端到端的方式進(jìn)行訓(xùn)練,在語義解析任務(wù)上取得了目前最好的效果。
神經(jīng)語義解析方法面臨的關(guān)鍵挑戰(zhàn)在于如何捕獲蘊(yùn)含在自然語言中的組合語義。大部分現(xiàn)有的工作從語法的角度切入,通過在序列化解碼器中引入語法限制或者模板限制來建模組合語義。然而,此類方法引入的語法或者模板是領(lǐng)域特定的,不能覆蓋所有的自然語言輸入。還有一類工作提出,使用樹形結(jié)構(gòu)的解碼器來更好地建模邏輯表達(dá)的層次化語義結(jié)構(gòu)。雖然這類模型相比于簡單的序列化解碼器取得了更好的效果,但是其忽略了語義相似的句子通常有相同語法結(jié)構(gòu)的事實(shí),如圖1(a)所示。文獻(xiàn)[3]提出了一個由粗到精的解碼框架來捕獲不同層次粒度的語義。該方法將邏輯表達(dá)分為包含高層次語義的語義框架(Sketch)表示和包含細(xì)粒度語義的語義細(xì)節(jié)。然而,該方法提出的高層次語義框架仍然是用序列化的方式解碼生成的,不能很好地建模語義框架的層次化結(jié)構(gòu),如圖1(b)所示。
圖1 自然語言與邏輯表達(dá)示例(a) 是兩個自然語言表達(dá)和它們分別對應(yīng)的的邏輯表達(dá);(b) 展示了兩個邏輯表達(dá)共同的語義框架和樹形結(jié)構(gòu)。
本文提出生成樹形語義框架來更好地建模邏輯表達(dá)的組合語義,該模型包含兩個階段。第一階段使用一個樹形結(jié)構(gòu)的解碼器自頂向下地生成自然語言的語義框架,第二階段結(jié)合生成的語義框架和自然語言輸入來解碼得到最終的邏輯表達(dá)。該模型有兩個優(yōu)點(diǎn)。首先,采用語義框架作為中間形式,使得相似的邏輯表達(dá)能夠在不同的語義層次上共享相同的語義框架。其次,樹形結(jié)構(gòu)的解碼器能夠保證語義框架中不同組成部分的解碼獨(dú)立性,進(jìn)而生成更好的語義框架。大量的實(shí)驗(yàn)結(jié)果表明,該模型能夠更準(zhǔn)確地生成語義框架,并且在語義解析任務(wù)中取得更好的效果。
在語義解析發(fā)展的數(shù)十年中,很多不同的方法被先后提出?,F(xiàn)有的大部分方法主要采用監(jiān)督學(xué)習(xí)的形式,通過自然語言句子和對應(yīng)的邏輯表達(dá)來訓(xùn)練得到語義解析器。早期的方法通常以詞典和包含一系列組合規(guī)則的語法為基礎(chǔ)生成邏輯表達(dá)。對于一個給定的自然語言句子,這類方法首先根據(jù)語法和詞典生成目標(biāo)邏輯表達(dá)形式的備選集,再訓(xùn)練一個打分函數(shù)對備選集中的邏輯表達(dá)進(jìn)行打分排序,并將得分最高的邏輯表達(dá)作為最終的解析結(jié)果。常見的語法規(guī)則包括組合類型語法(CCG)[4]、同步上下文無關(guān)語法(SCFG)[5]、基于依存的組合語法(DCS)[6]等。然而,這類方法中的語法和詞典通常只能用于特定的領(lǐng)域或者特定的邏輯表達(dá)形式,并且訓(xùn)練的過程需要大量的特征工程。相比之下,本文提出的模型以端到端的方式運(yùn)行訓(xùn)練,不需要進(jìn)行特征工程,并且能夠靈活地遷移到不同的領(lǐng)域和邏輯表達(dá)形式。
最近,基于深度神經(jīng)網(wǎng)絡(luò)的編碼器—解碼器模型已被廣泛應(yīng)用到語義解析任務(wù)中并取得了較好的效果[7]。這些方法的關(guān)注點(diǎn)集中在建模邏輯表達(dá)的語法結(jié)構(gòu)。一些工作通過引入先驗(yàn)知識來限制解碼器的輸出,包括語法規(guī)則和邏輯表達(dá)模板等。文獻(xiàn)[8]把語法規(guī)則作為解碼器的輸出空間,文獻(xiàn)[9]設(shè)計(jì)了一個語法限制的解碼器來生成抽象語法樹(ASTs),文獻(xiàn)[10]將解碼過程設(shè)計(jì)為對預(yù)定義SQL模板進(jìn)行填槽。然而,預(yù)設(shè)的語法規(guī)則和邏輯表達(dá)模板很難覆蓋整個輸出空間,限制了該類方法的實(shí)際應(yīng)用場景。此外還可通過設(shè)計(jì)結(jié)構(gòu)化的解碼器來捕獲邏輯表達(dá)的語法結(jié)構(gòu)。文獻(xiàn)[7]提出一個層次化的樹形結(jié)構(gòu)解碼器來建模邏輯表達(dá)的組合結(jié)構(gòu)。文獻(xiàn)[3]提出一個由粗到精的解碼框架來建模不同粒度的語義。該方法首先生成一個粗粒度的語義框架(sketch),再將該語義框架用于指導(dǎo)最終邏輯表達(dá)的生成。
我們的模型也采用語義框架來建模邏輯表達(dá)的組合結(jié)構(gòu)。與之前工作不同的是,該模型通過一個樹形結(jié)構(gòu)的解碼器自上而下地生成語義框架。樹形結(jié)構(gòu)的解碼器能夠?qū)哟位夭东@組合語義并且保證解碼過程中不同組成部分的獨(dú)立性,進(jìn)而更好地生成語義框架。
語義解析任務(wù)的目標(biāo)是基于自然語言輸入和邏輯表達(dá)來訓(xùn)練得到最終的語義解析器。給定自然語言句子表達(dá)X=x1,…,x|x|和其所對應(yīng)的邏輯表達(dá)Y=y1,…,y|Y|,語義解析任務(wù)的目標(biāo)是建模條件概p(Y|X)。
這個概率被分解為以下兩個部分,如式(1)所示。
其中,S=s1,…,s|S|代表輸入句子的語義框架。第一個階段以概率p(S|X)生成語義框架S;第二個階段在輸入X和語義框架S的指導(dǎo)下以概率p(Y|X,S)生成最終的邏輯表達(dá)。語義框架是以自上而下的方式生成的,概率p(S|X)可以分解為如式(2)所示。
(2)
(3)
其中,y 本節(jié)主要介紹我們所提出的兩階段模型以及其訓(xùn)練和推斷過程。 模型流程包含兩個階段: 語義框架生成和邏輯表達(dá)生成(圖2)。在語義框架生成階段,使用一個序列化的編碼器來編碼自然語言句子,并通過一個樹形結(jié)構(gòu)的解碼器生成對應(yīng)的語義框架;在邏輯表達(dá)生成階段,將生成的語義框架編碼成向量,并與輸入句子的編碼向量一起作為最終邏輯表達(dá)生成的指導(dǎo)信息。 圖2 模型整體流程示意圖左半部分表示樹形結(jié)構(gòu)語義框架的生成過程,右半部分表示給定語義框架下邏輯表達(dá)的解碼過程。 語義框架生成部分包括一個編碼器和一個樹形結(jié)構(gòu)的解碼器。編碼器把輸入的自然語言句子轉(zhuǎn)化成向量表示,然后由解碼器生成對應(yīng)的語義框架。 3.2.1 自然語言句子編碼 我們采用帶LSTM單元的雙向循環(huán)神經(jīng)網(wǎng)絡(luò)作為輸入部分的編碼器。每個詞的表達(dá)是對應(yīng)的前向和后向LSTM單元的狀態(tài)合并。對于第t個詞xt,它首先由xt=WXo(xt)被映射成一個向量,其中xt代表xt的n維向量表示,o(xt)是一個代表詞xt索引的one-hot向量,WX∈Rn×|VX|是詞典VX的表示矩陣。在得到了xt的詞向量之后,它的表示et由兩個方向的隱狀態(tài)向量合并得到,計(jì)算如式(4)~式(6)所示。 3.2.2 語義框架解碼器 為建模語義框架的層次結(jié)構(gòu)和組合語義,本文采用樹形結(jié)構(gòu)的解碼器來生成語義框架。 該解碼器先將語義框架轉(zhuǎn)化為層次化的樹形結(jié)構(gòu)形式。我們引入一些特殊的符號來刻畫語義框架的層次化結(jié)構(gòu)。如圖3所示,非終止符“ 圖3 語義框架解碼器示意圖虛線框中展示了樹形解碼器的模型實(shí)現(xiàn)細(xì)節(jié) 解碼器以自上而下的方式逐層生成語義框架。它首先順序地生成樹形結(jié)構(gòu)語義框架的最頂層,直到“”符號生成。如果中途產(chǎn)生“ (7) 上下文向量如式(8)所示。 (8) 其中,W0∈R|VS|×n,W1,W2∈Rn×n,b0∈R|VS|均為參數(shù)矩陣。 邏輯表達(dá)生成主要基于自然語言輸入X和第3.2節(jié)得到的語義框架S。給定X和S,邏輯表達(dá)缺失的細(xì)節(jié)需要被填補(bǔ),我們同樣也用編解碼的框架來實(shí)現(xiàn)。 3.3.1 語義框架編碼 本文采用和自然語言編碼器一樣的結(jié)構(gòu)來編碼語義框架。編碼器將語義框架S編碼成向量{α1,…α|S|}。 這些向量和由自然語言編碼器得到的向量{e1,…e|X|}共同指導(dǎo)邏輯表達(dá)的生成。 3.3.2 邏輯表達(dá)解碼器 邏輯表達(dá)中的詞是由循環(huán)神經(jīng)網(wǎng)絡(luò)序列化生成的。在生成邏輯表達(dá)中第t個詞yt時,其隱狀態(tài)vt由式(11)、式(12)所示。 模型的訓(xùn)練目標(biāo)是最大化給定自然語言輸入下生成邏輯表達(dá)的對數(shù)似然。根據(jù)式(1),該似然可以分成語義框架似然和邏輯表達(dá)似然兩部分,如式(13)所示。 (13) 其中,D是訓(xùn)練對的集合,每一個訓(xùn)練對包含一個句子和對應(yīng)的邏輯形式。 本文在三個數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn),并將我們的方法和多個現(xiàn)有方法進(jìn)行了對比。本節(jié)將介紹實(shí)驗(yàn)使用的數(shù)據(jù)集、模型的參數(shù)設(shè)置以及實(shí)驗(yàn)結(jié)果和分析。 本節(jié)簡要介紹實(shí)驗(yàn)中使用的3個語義解析數(shù)據(jù)集。 JOBS 該數(shù)據(jù)集包含640個工作列表數(shù)據(jù)庫的查詢。每對訓(xùn)練樣本包括一個自然語言問題及其對應(yīng)的Prolog風(fēng)格的查詢。我們的訓(xùn)練—測試數(shù)據(jù)分割和文獻(xiàn)[4]一致,其中500個實(shí)例用于訓(xùn)練,剩下的用于測試。為了避免低頻詞或未登錄詞帶來的學(xué)習(xí)問題,我們在三個數(shù)據(jù)集上進(jìn)行了參數(shù)替換[7]。在該數(shù)據(jù)集上,變量值“company”、“degree”、“l(fā)anguage”、“platform”、“l(fā)ocation”、“job area”和“number”都被識別并替換成特定的符號。 GEO 該數(shù)據(jù)集包含了880個美國地理數(shù)據(jù)庫的查詢實(shí)例。它被拆分為包含680個實(shí)例的訓(xùn)練集和包含200個實(shí)例的測試集。該數(shù)據(jù)集采用λ演算作為目標(biāo)邏輯表達(dá)形式。在該數(shù)據(jù)集上,變量值“city”、“state”、“country”、“river”和“number”被識別并替換。 ATIS 該數(shù)據(jù)集包含5 410個對于航班預(yù)定系統(tǒng)的查詢。數(shù)據(jù)被分割為4 480個訓(xùn)練實(shí)例和480個驗(yàn)證實(shí)例以及450個測試實(shí)例。該數(shù)據(jù)集也采用λ演算來作為目標(biāo)邏輯表達(dá)形式。類似地,變量值“date”、“time”、“city”、“aircraft”、“airport”、“airline”和“number”在這個數(shù)據(jù)集中被識別并替換。 在模型訓(xùn)練過程中,邏輯表達(dá)需要被轉(zhuǎn)化為對應(yīng)的語義框架。省去低層次的參數(shù)和變量名信息,同時保留謂語、操作符以及組合信息。此外,本文中的語義框架和文獻(xiàn)[3]不同。他們的方法所生成的謂詞包含左括號,但是本文中所有謂詞都保持原來的形式。這個區(qū)別在于本文所提模型能自上而下地生成層次化的語義框架,可以避免產(chǎn)生括號不配對等存在語法錯誤的語義框架。 預(yù)處理實(shí)驗(yàn)采用和文獻(xiàn)[7]相同的數(shù)據(jù)預(yù)處理方式。首先根據(jù)第4.2節(jié)中描述的方法標(biāo)注語義框架,然后按照第3.2節(jié)中描述的方法將其轉(zhuǎn)化為樹形結(jié)構(gòu)。 參數(shù)配置在JOBS和GEO數(shù)據(jù)集上,模型的超參通過在訓(xùn)練集上的交叉驗(yàn)證得到,而在ATIS數(shù)據(jù)集上則是通過模型在驗(yàn)證集的表現(xiàn)來選擇超參數(shù)。隱狀態(tài)向量和詞向量的維度從{250,300}和{150,200,250,300}中選擇,dropout rate從{0.3,0.5}中選擇。標(biāo)簽平滑參數(shù)設(shè)置為0.1。模型采用GloVe預(yù)訓(xùn)練詞向量作為初始化。訓(xùn)練過程采用RMSProp作為優(yōu)化器,并且從{0.002,0.005}中選擇學(xué)習(xí)率。為了避免梯度爆炸的問題,參數(shù)梯度被限制小于5。Batch大小設(shè)置為64。 評價(jià)指標(biāo)我們選取邏輯表達(dá)的準(zhǔn)確率作為評價(jià)指標(biāo)。準(zhǔn)確率是指自然語言句子被正確地解析成它們的邏輯表達(dá)的百分比。 在三個數(shù)據(jù)集中,我們選擇了一些之前構(gòu)建的系統(tǒng)和方法來驗(yàn)證模型效果,結(jié)果分別在表1、表2、表3中展示。注意DCS+L,KCAZ13和GUSP是在問答的設(shè)定下進(jìn)行實(shí)驗(yàn),因此本文報(bào)告的準(zhǔn)確率是生成正確答案的百分比??梢钥吹剑窠?jīng)語義解析方法普遍比之前統(tǒng)計(jì)學(xué)習(xí)的方法效果好。相比于現(xiàn)有的深度學(xué)習(xí)模型方法,本文提出的兩階段模型能夠建模語義框架不同層次和粒度的語義,而SEQ2TREE和Seq2Act只用了一層的解碼器,不能夠捕獲不同層次的語義??偟膩碚f,本文提出的模型在JOBS和ATIS數(shù)據(jù)集上得到了最好的結(jié)果,在GEO數(shù)據(jù)集上和目前最好的效果相當(dāng)。這些結(jié)果也表明了模型的有效性。 表1 JOBS數(shù)據(jù)集的準(zhǔn)確率 表2 GEO數(shù)據(jù)集的準(zhǔn)確率 表3 ATIS數(shù)據(jù)集的準(zhǔn)確率 我們進(jìn)一步分析了語義框架生成的準(zhǔn)確率來解釋效果提升的原因。分別將本文模型和Coarse2fine模型生成的語義框架與標(biāo)準(zhǔn)答案進(jìn)行比對,并將兩個模型的生成準(zhǔn)確率記錄在表4中。Coarse2fine用序列化的方式生成語義框架,而我們采用了樹形結(jié)構(gòu)的解碼器。在JOBS、GEO、ATIS三個數(shù)據(jù)集上,本文所提模型的生成準(zhǔn)確率都明顯優(yōu)于Coarse2fine模型。這說明樹形結(jié)構(gòu)解碼器能夠更好地捕獲語義框架的層次化結(jié)構(gòu),在語義解析任務(wù)上取得更高的準(zhǔn)確率。 表4 語義框架的準(zhǔn)確率 我們通過一個例子說明樹形結(jié)構(gòu)的語義框架能夠更好地描述邏輯表達(dá)組合語義的原因。給定一個輸入句子“whatistheearliestarriveflightfromci0toci1”,樹形解碼器通過兩個輪次生成語義框架。在第一個輪次,模型生成語義框架的最頂層“argmin#1 此外,對于這個例子,我們發(fā)現(xiàn)Coarse2fine[3]模型錯誤地將語義框架中的“arrival_time@1”生成為“departure_time@1”。這是因?yàn)樵谟?xùn)練數(shù)據(jù)中,大部分查詢都是在問詢航班離開的時間,使得序列化解碼器在生成語義框架時更傾向于生成 “departure_time@1”。相比之下,本文使用的樹形結(jié)構(gòu)解碼器在不同解碼層生成序列“andflight@1from@2to@2”和“argmin#1 本文中,我們提出生成樹形結(jié)構(gòu)的語義框架來更好地捕獲自然語言表達(dá)中蘊(yùn)含的組合語義。首先使用樹形結(jié)構(gòu)解碼器自上而下地生成語義框架,再將生成的語義框架與自然語言句子結(jié)合來指導(dǎo)最終邏輯表達(dá)的生成。樹形結(jié)構(gòu)解碼器能更好地捕獲語義框架的層次化結(jié)構(gòu),進(jìn)而生成更精確的語義框架。實(shí)驗(yàn)結(jié)果顯示,模型在語義框架生成和邏輯表達(dá)生成這兩階段的準(zhǔn)確率都有所提升。此外,我們通過案例分析進(jìn)一步說明了樹形結(jié)構(gòu)語義框架的好處。未來工作方面,我們將研究小標(biāo)注樣本下的語義解析問題。3 模型
3.1 模型概覽
3.2 語義框架生成
”符號和“<(>”符號被分別用來標(biāo)識解碼頂層語義框架和各級子樹的起始狀態(tài),“”符號被用來標(biāo)識解碼過程的終止。3.3 邏輯表達(dá)生成
3.4 模型訓(xùn)練和推斷
4 實(shí)驗(yàn)
4.1 數(shù)據(jù)集
4.2 語義框架標(biāo)注
4.3 實(shí)驗(yàn)設(shè)置
4.4 實(shí)驗(yàn)結(jié)果分析
4.5 樹形結(jié)構(gòu)的語義框架分析
5 總結(jié)與展望