葉 子,陳小平,張 波,歐陽昱,劉輝舟
1(中國科學技術大學 計算機科學與技術學院,合肥 230027)
2(國網安徽省電力有限公司,合肥 230022)
近年來,智能問答技術在諸多領域得到了廣泛應用,例如教育、醫療和電力等[1].傳統問答系統由于缺乏知識和推理能力始終存在提升瓶頸,因此,基于知識庫的問答方法成為了研究問答技術的主流方向.
知識圖譜具有高效表達海量知識、深度知識推理、與領域知識高度關聯等優勢[2],是知識問答的優質知識來源.然而,基于知識圖譜的問答技術目前尚處于起步階段,現有中文知識圖譜問答語料庫大多存在規模較小,質量較差的問題,這嚴重制約了中文知識圖譜問答技術的發展.
問題生成是利用文本數據生成自然語言形式問題的一種技術[3].文本數據可以是結構化的知識庫、句法樹等,也可以是篇章級文本或完整的問答語料.簡單來說,問題生成是人工智能“主動提問”的技術,它的目標是生成正確且多樣的問題.有了問題生成技術,以中文知識圖譜三元組作為輸入生成對應問題,可以生成中文知識圖譜問答訓練語料.不僅如此,問題生成技術對自動合成FAQ文檔,自動輔導系統等應用場景也具有重要意義.
現有的問題生成方法大多是基于規則的方法,這些方法對模板的質量和數量要求較高,較為耗費人力資源,泛化能力較弱,對大規模數據的處理能力有限.要彌補這些不足,需要問題生成模型充分獲取隱含在語料庫中的語法模式和特征,行之有效的方法是將預訓練模型與問題生成模型進行融合.預訓練模型可以利用大規模語料訓練詞語和句子的向量化表示,充分獲取語料中隱含的語義信息,最后根據特定任務設計微調方法得到結果.
本文提出一種融合預訓練模型的中文知識圖譜問題生成方法,其創新性有3點:1) 利用條件變分自編碼器解決預訓練模型難以完成問題生成任務的問題;2) 提出一種融合預訓練模型和編碼器-解碼器架構的預編碼器-源編碼器-解碼器架構;3) 改進了問題生成的答案編碼方法.
現有的問題生成方法大多是基于規則的生成方法[4,5],這些方法可以較為穩定的生成符合語法規則的問題,但是極度依賴于人工設定的規則或模板,擴展性和泛化性能較差,很難生成大規模語料.
隨著機器學習技術的不斷進步與發展,端到端的神經網絡模型被更多地應用在了文本生成領域.在問題生成任務上,Song等人[6]通過獲取網絡信息提出了用于生成領域問題的方法;Venugopal等人[7]提出了問題生成的難度建模方法;Kumar等人[8]對難度可控的復雜問題生成方法進行了嘗試;除此之外,研究者們對篇章級的問題生成方法也有很多新的嘗試[9-11].這些方法具有較好的泛化能力,能夠完成大規模語料庫的文本生成問題,但缺點是生成的文本容易出現語法錯誤,可讀性較差.
Liu等人[12]發現,如果不對基于編碼器-解碼器模型(Seq2seq)的問題生成方法加以限制,容易生成語義不相關的問題.因此,他們將該方法與基于模板的問題生成方法進行了結合,提出了一種基于模板的編碼器-解碼器模型(Template-based Seq2seq),兼顧了模型的泛化性能和問題生成的穩定性.實驗結果顯示這種方法較基線模型而言具有一定提升.然而這種方法始終沒有辦法完全脫離模板,相當于犧牲了一部分效率換取生成問題的穩定性.事實上,原始的編碼器-解碼器模型效果不佳是因為它對語言的特征提取能力還較為有限,只有提升問題生成模型的語義理解能力才能真正脫離模板進行大規模的問題生成.
原始的編碼器-解碼器模型存在并行能力較差,長期信息會丟失的問題,而基于自注意力機制的Transformer模型[13]可以解決這些問題.一方面,該模型將序列中的任意兩個位置之間的距離縮小為一個常量,解決了長期依賴的問題;另一方面,該模型的計算方式具有更好的并行性,計算速度更快.Transformer模型的整體架構也是編碼器-解碼器模型,所以它可以很好地完成文本生成任務.
以Transformer模型為基礎,谷歌提出了基于雙向Transformer編碼器的預訓練模型BERT(Bidirectional Encoder Representation from Transformers)[14],這個模型的主要任務是預訓練語言模型,其預訓練任務有兩種,分別為掩藏詞語言模型訓練(Masked LM,MLM)和預測下句(Next Sentence Prediction,NSP).預訓練完成后,根據不同自然語言處理任務進行微調.BERT模型極大地提升了語言模型對語義信息的獲取能力,但是由于缺少解碼器部分,該模型處理文本生成問題的能力不是很強.要利用BERT這種預訓練模型來完成文本生成任務,需要在BERT的下游接入解碼器,然而直接接入Transformer解碼器的效果并不理想.
Gupta等人[15]提出了一種基于變分自編碼器(Variational Autoencoder,VAE)[16]的文本生成框架,本文利用這種思想將BERT編碼器和Transformer解碼器進行結合.
VAE是一種基于隱變量的生成式模型,它可以學習高維輸入的非線性表征.對于一個輸入x,VAE首先學習它的隱式表征z,使得輸入x可以通過z重構得到.VAE可以得到z的后驗分布qφ(z|x),這種后驗分布一般是高斯分布N(μ(x),σ2(x)),其中參數φ={μ(x),σ2(x)}是輸入x的非線性變換,同時也是以x為輸入的前向神經網絡的輸出部分.解碼器部分需要學習另一個分布pθ(x|z),指的是采樣z得到解碼后的x.學習該模型的損失函數為:
L(x;θ,φ)=Eqφ(z|x)[logpθ(x|z)]-KL(qφ(z|x)‖p(z))
(1)
其中第二項為兩個分布之間的KL散度.
公式(1)提供了模型的置信概率p(x|θ,φ)的下界,訓練過程中需要最大化這個下界.將公式(1)中的隱變量分布局限在條件y下可得條件變分自編碼器(Conditional Variational Autoencoder,CVAE)[17],其損失函數如下:
L(x,y;θ,φ)=Eqφ(z|x,y)[logpθ(x|z,y)]
-KL(qφ(z|x,y)‖p(z))
(2)
本文提出的模型結構如圖1所示,主要分為預編碼器、源編碼器和解碼器3個部分.

圖1 融合BERT的問題生成模型結構圖Fig.1 Question generation model with BERT
預編碼器是使用預訓練模型的編碼器結構,其核心是BERT模型.
BERT模型的輸入是句子對的序列化表示,該序列中有兩個重要的標記符[CLS]和[SEP].[CLS]是起始標記符,它被用來綜合表示序列的最終隱狀態,可用來進行分類等.[SEP]標記符是分隔標記符,用來分隔序列中的兩個句子.
序列的向量化表示由詞向量,分隔向量和位置向量相加得到,其中詞向量是經由訓練得到的每個詞或標記符的向量化表示,分隔向量用來區分某個詞或標記符屬于句子A還是句子B,位置向量表示每個詞或標記符的位置順序.
得到序列的向量化表示后,將進行BERT模型最重要的兩個訓練步驟:預訓練和微調.
3.1.1 預訓練
BERT模型的預訓練過程主要是在兩種不同的任務上進行無監督學習,即MLM和NSP.
MLM的具體實現方式是在序列中隨機用[MASK]標記符來替換15%的詞,然后根據未被替換的詞來預測被替換的詞.為了解決在訓練過程出現[MASK]標記符而下游任務中未出現該標記符的問題,對于一個被替換的詞,有80%時間使用[MASK]標記符進行正常替換,有10%的時間用隨機詞進行替換,剩下的10%時間保持該詞不變,最終將三者綜合后進行預測.
很多下游任務比如問答任務都需要語言模型理解不同句子之間的關系,所以BERT采用了NSP方法進行訓練.在訓練過程中,對于句子A,它的下一句為B.有50%的時間B為A真實的下一句,標記為“是下一句”(IsNext),其余的50%時間B是語料庫中其他的隨機一個句子,標記為“不是下一句”(NotNext).
預訓練過程需要大量語料和較強的算力,直接采用已有的開源預訓練模型可以大大節約計算成本提高效率.因此,本文在實驗部分直接采用了預訓練好的中文BERT參數模型進行使用.
3.1.2 微調
在微調過程中,我們將包括了頭實體、關系和尾實體的中文知識圖譜三元組x(o)={Eh,Er,Et}={tok1,tok2,…,tokn}與對應問題x(p)={tok1,tok2,…,tokn}進行拼接,預編碼器的輸入如圖2所示.和BERT模型一樣,頭部接入[CLS]標記符.x(o)與x(p)用[SEP]進行分隔,尾部接入結束符,得到序列S,輸入裝載BERT的預編碼器部分.

圖2 預編碼器的輸入表示Fig.2 Input representation of p-encoder
序列S進行訓練可得到T[CLS]∈H,它是訓練后的綜合向量表示.然后,將T[CLS]作為輸入放入一個前向神經網絡,將該網絡的輸出維映射為2H,以輸出維為基準等分為兩個張量,其中一個表示均值μ.由于方差大于等于0,需要對另一個張量施加Softplus激活函數,表示標準差σ,從而得到分布z~N(μ,σ).
源編碼器是對知識圖譜三元組進行編碼的模塊,采用的是Transformer的編碼器模型.源編碼器的輸入x(o)={Eh,Er,Et}={tok1,tok2,…,tokn}在答案編碼上有略微不同,將在3.5節中介紹.在源編碼器中,數據首先會經過多頭的自注意力層.它會將數據分別輸入到h個自注意力層中進行運算,得到h個加權后的特征矩陣,然后按列進行拼接并經過一層全連接層后得到輸出.計算注意力值的公式為:
(3)

為了防止退化問題,模型中采用了殘差網絡[18]的短路方法將原有向量與經過自注意力層的向量進行相加并歸一化.
得到注意力值之后,它會被送入一個前向神經網絡,它共有兩層,第一層的激活函數是ReLU,第二層是一個線性激活函數,可以表示為:
FFN(Z)=max(0,ZW1+b1)W2+b2
(4)
解碼器部分采用的是Transformer的解碼器模型.因為解碼的過程一般為順序操作過程,所以Transformer采用了掩式的多頭注意力機制(Masked Multi-head Attention),也就是說當解碼第i個向量時,解碼器只能看到第i-1及其之前的解碼結果.
在本文的問題模型中,我們將BERT模型得到的分布向量z與解碼得到的輸出o進行拼接得到z′=[z;o]作為解碼器的輸入.這種方式相當于預編碼器提前賦予了解碼器解碼的模式,但不給解碼器提供完整的目標問題,所以我們將這種機制稱為半掩式的多頭注意力機制.
同樣地,半掩式多頭注意力層利用短路方式進行向量的相加與歸一化,然后將注意力值輸入一個新的多頭注意力層.該層與編碼器的多頭注意力層的結構完全一致,只需將輸入的V,K,替換為編碼器得到的V,K.類似地,將計算得到的注意力值輸入一個前向神經網絡.最后,進行損失函數的計算.
Gupta等人[15]給出了該生成模型的分布推導示意圖如圖3所示.

圖3 分布推導示意圖Fig.3 Distribution derivation
參考公式(2),可得到損失函數如下:
L(x(o),x(p);θ,φ)=Eqφ(z|x(o),x(p))[logpθ(x(p)|z,x(o))]
-KL(qφ(z|x(o),x(p))‖p(z))
(5)
事實上,公式(5)中的第一項代表了源編碼器和解碼器的損失,第二項代表了預編碼器的損失.要最大化這個下界,需要增大第一項,減小第二項.
第一項的計算最簡單的方法是蒙特卡洛采樣,可將公式(5)重寫為:

(6)
然而使用蒙特卡洛采樣法采樣出的z方差較大,而且一般不可求導.因此,需要使用其他方法進行z的采樣.一種利用重參數法的方法是把z分成兩部分來求:一部分是預編碼器中的均值μ和標準差σ,另一部分是一個隨機的高斯噪聲ε.即zl=g(x(o),x(p),εl)=μ+σ⊙εl,其中εl~N(0,1).這種計算方式使得隨機的部分只由高斯分布決定,因此減少了方差,而且通過這種方式我們能夠計算均值μ和標準差σ的梯度用以更新.
第二項的計算就是計算KL散度.首先,KL散度是恒大于0的,它描述了兩個分布之間的差距,由于z是服從高斯分布的所以VAE預設p(z)服從N(0,1),這樣可以直接進行計算.衡量兩個高斯分布的差異可以通過它們的密度函數展開推導出,可得公式:
(7)
在知識圖譜問題生成任務中,問題的生成源為三元組x(o)={Eh,Er,Et}.其中,尾實體一般就是生成問題的答案.在圖2所示的例子中,“余華”是問題的答案.事實上,在問題生成任務中答案一般不會出現在問題中,所以如果直接把尾實體進行編碼后訓練容易使生成的問題中出現答案,從而降低生成問題的正確率.矛盾的是,答案中又包含了很多生成問題所需的知識,例如“余華”是人物,人物與疑問詞“誰”緊密相關,完全去除答案又會降低語料中包含的語義信息的利用率.為了避免這種問題,原始的答案編碼方法是直接將答案替換為一個特定的標記符進行訓練[19].
本文的問題生成模型中,預編碼器中輸入的三元組是帶有答案的,而在源編碼器中輸入的三元組用標記符
由于問題生成領域優質公開數據集較少,本文主要在NLPCC2017 KBQA任務提供的問答數據集上進行了實驗,該數據集包含了24479個三元組問題對,其中訓練集11687個,驗證集2922個,測試集9870個.
評價指標主要有兩類,分別是機器指標與人工指標.機器指標沿用了機器翻譯中的通用評價指標BLEU(BLEU-4),ROUGE(ROUTGE-4 F-measure);對于人工指標,本文隨機選擇了測試結果中的200個問題來人工評價這些問題是否是符合語法的,以語法正確的問題的比例作為指標.
在問題生成任務上,能否生成多種不同的問題也是一項重要的評價指標.因此,Liu等人[12]提出了多樣性(DIVERSE)作為評價指標.多樣性通過計算具有相同關系的三元組所生成的問題之間的相似度來進行評價,該指標值越低說明生成問題越不相似,多樣性越高,其計算公式為:
(8)

預訓練模型采用的是基于全詞遮罩(Whole Word Masking)技術的中文預訓練模型BERT-wwm[20].該模型層數為12,隱藏單元為768,多頭注意力頭數為12,參數總量為110M.
本文對語料庫中的目標問題進行分詞作為輸入序列輸入問題生成模型,利用BERT模型表示詞向量,維度均為768.輸入的三元組序列長度限定為15,目標問題序列長度限定為40,長度不足的序列使用
我們將源編碼器與解碼器的編碼解碼模塊數設置為6,多頭注意力層的頭數為12.所有前向神經網絡的隱藏單元數為2048.
我們設置批處理大小為32,學習率為1e-4,dropout保留率為0.9作為參數組合在測試集上進行預測,并與其他基線模型進行對比.其他基線模型均使用默認參數.
實驗采用的CPU為3.7GHz Intel Core i7,RAM為32GB,GPU為NVIDIA GTX2080Ti.
4.3.1 質量分析
實驗比較了基于模板的方法,Seq2seq方法,基于模板的Seq2seq方法以及本文提出的融合預訓練模型的問題生成方法.實驗結果如表1所示,為方便展示,表中數據均為百分比結果.

表1 問題生成模型實驗結果對比Table 1 Performance of question generation models
實驗結果表明,基于模板的方法在人工指標和BLEU指標上都有較好的表現,出現這種情況可能有兩種原因:1)訓練集與測試集的知識圖譜三元組具有較高的相似度,兩者之間的生成方式具有相同的模式;2)測試集的規模較小,所抽取的模板能夠生成大部分的問題.
較基于模板的方法而言,Seq2seq方法在ROUGE指標上有略微提高,但BLEU指標要低許多.這是因為原始的Seq2seq方法還不能夠很好地獲取訓練語料中的語義信息,也沒有如基于模板的方法一般的自然語言生成模式,所以也很難生成具有較高流暢度的問題.
基于模板的Seq2seq方法較前兩種方法在3個指標上均有提升,主要原因是這種方法結合了前面兩種方法的優勢,既保證了生成的問題具有模板的限制,又增強了模型的泛化能力.但是這種模型還是沒有充分提取語料中的語義信息,很大程度上還是依賴于模板,提升較為有限.
本文提出的方法較所有模型在所有指標上均取得了最優效果.在ROUGE指標上,較前3種方法而言,分別提升了9.12,8.55,3.85.ROUGE指標評價了模型生成的問題的召回程度,這保證了知識圖譜三元組在真實問題中的體現,說明融合預訓練模型的問題生成方法在語義理解能力上較前3種模型有提升;在BLEU指標上,分別提升了0.90,2.37,0.39,提升較為有限的原因可能是測試數據集與訓練集相似度較高,所以基于模板的兩種方法具有較高的BLEU值;在人工評價的200個生成問題中,符合語法的問題共有189個,準確率為94.5%,穩定性較好,比前3種模型分別提升了7.5,11.0,2.0.
4.3.2 多樣性分析
根據公式(8)可以計算得到四種模型的DIVERSE值如表2所示:

表2 問題生成模型多樣性對比Table 2 DIVERSE of proposed models
為了減少誤差,計算多樣性的關系種類都是至少對應3條或3條以上的三元組,共有505種.結果如表2所示,其中N=[3,4]表示包含3條或4條三元組的關系,共有406種,N≥5表示包含5條和5條以上三元組的關系,共有99組.
實驗結果顯示,融合預訓練模型的問題生成方法總體上能夠生成更加豐富多樣的問題,在N=[3,4]的問題集合中取得了最優效果,但基于模板的Seq2seq方法在N>=5的問題集合中效果略好.出現這種情況可能有兩個原因:1) 實驗的關系種類數量太少,存在偶然性;2) 這類關系一般性較強,描述方式較為簡單,如果不設計多樣的模板容易生成相似度較高的問題.
本文提出了一種融合預訓練模型的中文知識圖譜問題生成方法.該方法以條件變分自編碼器為基礎,利用BERT作為預編碼器,結合Transformer模型作為源編碼器和解碼器.該模型增強了問題生成模型的語義理解和表示能力,極大提高了泛化能力,為知識問答任務擴充語料提供了一種新的思路.該方法在NLPCC2017 KBQA數據集上優于其他現有中文知識圖譜問題生成方法,并且能夠生成更加具有多樣性的問題.
后續的工作主要是將該問題模型融合其他預訓練模型進行實驗比較.還可以對答案編碼部分進行改進,用命名實體識別方法標注答案詞性,增強答案與疑問詞之間的聯系.