于尊瑞,毛震東,王 泉,張勇東
(1.中國科學技術大學 信息科學技術學院,合肥 230000;2.北京百度網訊科技有限公司,北京 100000)
隨著自動對話機器人、電子客服、問答式智能搜索等技術的廣泛應用,人與機器之間的交流變得越來越自然流暢,然而,計算機準確理解和使用自然語言的水平仍有待進一步提高。問題生成技術在對話機器人[1]、教育[2-4]、搜索[5]等領域具有重要的應用價值,例如:訓練問答模型、智能搜索模型等系統需要大量的“段落-問題-答案”數據,人工標注數據需要耗費巨大的人力、物力以及財力,而互聯網(如百度百科、新華網等)中擁有海量的無標注文本數據,利用問題生成技術可以從無標注的文本段落中生成海量的“段落-問題-答案”數據[6-8],從而完成自動問答系統訓練[9]。因此,提升問題生成技術的性能具有重要的實用與科研價值。
早期的問題生成研究多數采用基于語法規則和模板的方法,將問題生成任務拆分為“問什么”和“怎么問”2 個子任務[10]。具體步驟為:利用語言學知識設計規則和模板,根據輸入文本的語法結構等信息自動從文本中提取出所需要的內容,然后填入預先構建好的問題句模板中,形成問句[11-13]。然而,此類方法依賴既定規則,不能根據數據自適應不同的文本領域,遷移成本過高,難以被廣泛應用。
隨后,“序列到序列”編碼器-解碼器神經網絡被廣泛應用于問題生成任務。文獻[4]利用“序列到序列”編碼器-解碼器神經網絡模型,根據所給的一個句子生成問題,但其不能輸入給定答案信息,導致適用范圍受限。文獻[14]將答案信息添加到輸入中,根據給定的段落和答案實現問題生成。在文獻[14]研究成果的基礎上,針對問題生成任務所進行的模型設計取得發展,例如:文獻[15]根據特定的疑問詞捕捉答案中的關鍵信息;文獻[16]采用復制機制、占位符機制和上下文單詞嵌入機制等多種策略實現問題生成;文獻[17-19]使用段落線索、問題類型、問題風格等信息作為輔助信息進行問題生成;文獻[20-21]控制問題的提問角度和難度。在此之后,強化學習策略在該領域的應用也取得了進展,例如:文獻[22]在生成對抗框架下增加潛在變量和觀察變量;文獻[23]在生成評價框架下將所生成問題的語義評分和語法結構評分作為獎勵;文獻[24]使用語義評分和問答系統評分作為獎勵;文獻[25-27]將問題生成任務和問答任務作為對偶任務進行聯合訓練。上述方法在問題生成任務中取得的性能提升,使得問題生成技術在構建大規模問答數據集等研究中得到廣泛應用。
近年來,預訓練語言模型(如BERT[28]、ERNIE[29]等)在多項自然語言理解任務中表現突出。預訓練語言模型通過“預訓練-微調”框架來實現:“預訓練”是指在海量無標注文本數據上,通過多種任務預先訓練好模型參數;“微調”是指針對特定的下游任務,調整模型結構并在標注數據上進行訓練,從而完成特定下游任務。在預訓練模型中添加自注意力掩碼,將雙向語言模型改造成序列到序列語言模型,可以實現生成任務。該方法在問題生成任務中的性能表現已經遠超傳統的序列到序列編碼器-解碼器神經網絡。
然而,現有方法仍無法避免問題生成任務中長期存在的2 個問題:一是“誤差累積”問題,每個問題都由很多個連續的詞組成,生成時需要一個詞接一個詞地連續迭代生成,因為模型不具備糾正錯誤的能力,所以在該過程中一旦有一個詞生成錯誤,后續的詞會根據錯誤的詞繼續生成,誤差將進一步擴大;二是“一對多”問題,給定一個文本段落和一個答案,文本段落中會蘊含多種多樣的信息,人類可以提出多個問題,也可以判斷出哪些問題更具價值,而對于模型而言,難以找到全局最優解,原因是逐個詞地連續迭代生成傾向于找到局部最優解。
本文提出一種帶有關鍵詞感知的問題生成方法,用以克服問題生成過程中僅依賴局部最優解的不足,減少“誤差累積”與“一對多”現象的發生,提升問題生成的質量。具體地,采用“兩步走”的流水線式框架,基于預訓練語言模型設計關鍵詞分類網絡結構和帶有關鍵詞信息感知的問題生成網絡結構,
關鍵詞分類模型從輸入段落中提取關鍵詞特征,在經過后處理之后將其作為全局信息融合到問題生成網絡的輸入中,最終完成問題生成過程。
問題生成任務的定義是:給定一個文本段落C和一個答案A,答案A是文本段落C中的一部分連續文本,計算機根據段落C和答案A自動生成對應的問題Qˉ。問題生成數據示例如表1 所示。

表1 問題生成數據示例Table 1 Question generation data example
問題生成模型θ的目標是在生成問題時,使得數據集中真實的問題Q出現的概率盡量大,表示如下:

其中:Q1,Q2,…,QLQ是構成問題Q的詞;LQ是組成問題Q的詞數量。
本文帶有關鍵詞感知的問題生成采用“兩步走”的流水線式框架,包括關鍵詞分類、問題生成2 個步驟:關鍵詞分類模型針對輸入的文本段落中的每個詞,預測其為關鍵詞還是非關鍵詞并作為特征;問題生成的輸入數據中融合上述特征,經過問題生成模型生成問題。關鍵詞分類模型和問題生成模型的網絡結構設計均基于預訓練語言模型ERNIE[29]。
預訓練語言模型ERNIE[29]在自然語言理解任務中表現突出,在16 個公開數據集上性能領先,在國際通用語言理解評估基準GLUE 上率先突破90 分,在全球語義評測SemEval 2020 中摘得5 項世界冠軍。基于ERNIE[29]的突出表現,本文選取ERNIE 作為基線模型。
ERNIE 的網絡結構由嵌入向量層(輸入)、雙向自注意力編碼器、下游任務層(輸出)3 個部分組成,如圖1 所示。

圖1 ERNIE 網絡結構Fig.1 ERNIE network structure
ERNIE 等預訓練模型在預訓練過程中使用的詞表是子詞(Sub-Token)表,“子詞”即將一個英文單詞拆分為幾個具有一定意義的小單元,以更好地對子詞語義嵌入向量進行預訓練,例如:將單詞“eating(正在吃)”拆分為“eat(吃)”和“ing(正在)”。
在預訓練過程中,輸入文本數據的格式是:“[CLS]句子1[SEP]句子2[SEP]…”,其中:[CLS]表示開始;[SEP]表示一個句子結束,兩者均為子詞表中的特殊標志子詞。輸入文本數據經過嵌入向量層后被轉化為嵌入向量(Embedding Vector),具體過程為:嵌入向量層根據輸入的編號查表映射為向量,例如輸入的編號為2,則從表中取出第2 個向量。嵌入向量由4 個部分相加組成,分別是子詞語義嵌入(Sub-Token Embedding)、位置嵌入(Position Embedding)、句子嵌入(Sentence Embedding)、任務嵌入(Task Embedding):子詞語義嵌入以子詞在詞表中的順序位置作為編號,學習子詞本身到向量的映射,例如某子詞在詞表中的第521 個位置,其編號即為521;位置嵌入學習子詞在輸入文本中的位置到向量的映射,例如某子詞在輸入數據中的第4個位置,其編號即為4;句子嵌入學習子詞所屬的句子(或文本片段)的位置到向量的映射,例如某子詞在第1 個句子(或文本片段)中,其編號即為1;任務嵌入學習任務類型到向量的映射。嵌入向量在雙向自注意力編碼器層進行計算(雙向自注意力編碼器層采用Transformer[30]結構),計算后的向量傳給下游任務層以實現特定的下游任務。
2.2.1 關鍵詞分類任務定義
在輸入的文本段落中有很多實詞(如動詞、名詞),在生成問題的過程中,為了確保問題與原文語義上的一致性,往往需要“拷貝”一些重要的實詞,在本文中稱這些需要被拷貝的詞為“關鍵詞”。關鍵詞分類任務的定義是:給定一個文本段落C和一個答案A,答案A是文本段落C中的一部分連續文本,C由連續的詞C={C1,C2,…,CLC}構成(LC是段落C中的詞數量),計算機根據段落C和答案A預測段落C中的每一個實詞Ci(1≤i≤LC)是否為關鍵詞。
2.2.2 數據標注
實現關鍵詞分類任務需要在訓練集中標注關鍵詞,具體操作是:遍歷文本段落中的單詞,如果該單詞不在停詞表(包含常用的高頻虛詞,使用開源工具spaCy 和NLTK 獲取)中,并且該單詞也出現在問題中,則將其視為關鍵詞。標注關鍵詞的算法描述如下:
算法1標注關鍵詞

該算法的運算過程包括對問題中所有詞的一次遍歷運算、對停詞表的查表運算、對問題詞集合的查表運算、對關鍵詞集合的插入運算。算法的空間復雜度為O(n),時間復雜度為O(n)。
2.2.3 關鍵詞分類網絡結構
關鍵詞分類網絡結構如圖2 所示。輸入數據的格式為“[CLS],C1,C2,…,CLC,[SEP]”。在嵌入向量層中,子詞語義嵌入的編號設定方式與ERNIE 預訓練過程中的設定方式相同,子詞語義嵌入所需要的編號由子詞在詞表中的順序位置決定;因為[CLS]和[SEP]需要2 個位置,所以位置嵌入所需要的編號按順序設置為0,1,…,LC,LC+1,LC+2;因為輸入的只有一個文本段落,所以統一將句子嵌入所需要的句子編號設置為0;因為該任務沒有在預訓練過程中使用過,所以將任務嵌入所需要的任務編號設置為默認值0。

圖2 關鍵詞分類網絡結構Fig.2 Keyword classification network structure
嵌入向量在經過雙向自注意力編碼器與全連接層后,利用Softmax 層執行二分類任務,將每一個子詞分成關鍵詞或非關鍵詞,表達如下:

2.2.4 后處理
為了提升問題生成的效果,關鍵詞分類模型輸出的結果PKC(Ci)需要經過后處理,原因有以下兩點:
1)由于問題生成任務固有的“一對多”的特點,關鍵詞分類任務不可能實現準確率和召回率都逼近100%的結果。例如:
段落:學術性刊物《計算機工程》于1975 年創刊。
答案:1975 年
問題1:《計算機工程》是哪年創刊?
問題2:學術性刊物《計算機工程》是哪年創刊?
在該例中,問題1 與問題2 都是正確的,但問題1中不包含“學術性刊物”,問題2 中包含“學術性刊物”,因此,“學術性刊物”可以是關鍵詞也可以是非關鍵詞。
如果將準確率和召回率都不夠高的特征輸入到問題生成模型中,必然引入大量噪聲,影響問題生成的結果。為解決該問題,可以降低判定為關鍵詞的概率閾值,將特征調整為高召回率的特征,高召回率的直觀理解是:對于判定為關鍵詞的子詞,問題生成模型應該進行復制;對于判定為非關鍵詞的子詞,問題生成模型應該自適應地計算是否復制。
2)原文段落相對較長,問題相對較短,原文段落中存在大量無關詞匯,導致數據標注過程中被標注為關鍵詞與非關鍵詞的比例不均衡。可以通過降低關鍵詞的判定概率閾值來解決該問題。
基于以上兩點原因,后處理至關重要,其能影響關鍵詞特征的質量以及問題生成的效果。后處理的具體方法是:設定一個關鍵詞閾值T,如果關鍵詞分類模型輸出的關鍵詞概率大于等于閾值T,則將其判定為關鍵詞;否則,判定為非關鍵詞。公式描述如下:

經過后處理的關鍵詞分類結果將作為特征融合到問題生成模型MQG的輸入中,并要保持問題生成模型MQG在訓練和預測過程中接收到的特征具有一致性。預測過程中的特征是由關鍵詞分類模型MKC得出的,因此,在問題生成模型MQG的訓練過程中,也應該使用關鍵詞分類模型MKC預測得出的特征,而不是數據集標注的真實特征。具體做法是:在訓練集上訓練好關鍵詞分類模型MKC后,用MKC在訓練集和測試集上均執行一遍預測過程,然后執行調整關鍵詞分類閾值的后處理操作,將結果作為問題生成模型MQG的輸入特征。
帶有關鍵詞感知的問題生成網絡在結構設計時主要考慮三點:一是在輸入層中融合關鍵詞特征;二是在編碼器層中添加自注意力掩碼,將雙向自注意力機制改為序列到序列的自注意力機制;三是在輸出層實現訓練階段的并行訓練與預測階段的迭代生成。
基于ERNIE 的問題生成網絡結構如圖3 所示。問題生成任務訓練過程的輸入文本數據格式為“[CLS],是問題,問題的長度LQ是定值,對于數據中長于LQ的問題,在LQ處截斷,對于數據中短于LQ的問題,用特殊標志子詞[PAD]填充至LQ長度。對文本段落也做同樣處理。在預測過程中,所有的問題子詞均以[PAD]作為輸入,目的是保持問題在訓練和預測的過程中所處位置不變。

圖3 問題生成網絡結構Fig.3 Question generation network structure
在嵌入向量層,子詞語義嵌入、位置嵌入、任務嵌入的設置方法與關鍵詞分類所用ERNIE 方法相同。對于句子嵌入,需要進行特殊處理以區分段落、答案以及問題部分,具體為:將問題的句子嵌入所需編碼設置為0,將輸入文本段落中非答案部分的句子嵌入所需編碼設置為1,將答案部分的句子嵌入所需編碼設置為2。
在嵌入向量層,添加關鍵詞特征嵌入并與原來的4 種嵌入向量相加。對于關鍵詞,其關鍵詞嵌入的編碼設置為1,對于非關鍵詞,其關鍵詞嵌入的編碼設置為0。在此,將關鍵詞分類模型及后處理得到的特征信息融合進問題生成模型的輸入中,以實現問題生成模型的關鍵詞感知能力。
在編碼器層,預訓練語言模型ERNIE 的自注意力是雙向的,即在計算每個子詞的向量時,根據其上文和下文2 個方向的子詞進行向量計算。對于問題生成任務,不能使用雙向的自注意力,這是因為在訓練過程中要保持并行訓練效率,一個問題中的所有子詞并行參與訓練,不能讓問題中后邊的子詞“看到”前邊的子詞;另外,問題中所有子詞的向量計算均需要“看到”所有文本段落部分的子詞,不能讓文本段落部分的子詞“看到”問題部分的子詞,以防數據泄露。如圖4 所示,本文采用類似UniLM[31]中提出的自注意力掩碼機制,實現問題生成任務所需的序列到序列自注意力編碼器。在編碼器中計算向量時,問題中的子詞可以“看到”問題中前邊的子詞和文本段落中的子詞,文本段落中的子詞僅可以“看到”文本段落中的子詞。自注意力掩碼結構的設計,使得一條數據問題中包含的所有詞可以并行訓練,不會發生數據泄露,提升了訓練效率。在預測過程中,為了保持和訓練過程的一致性,也使用該自注意力掩碼機制。

圖4 自注意力掩碼示意圖Fig.4 Schematic diagram of self-attention mask
帶有自注意力掩碼的編碼器輸出的向量經過全連接層后,用問題部分前一個子詞Ci-1位置的向量乘以子詞嵌入矩陣的逆矩陣,得到的子詞編碼對應的子詞作為當前子詞Ci的預測輸出,用公式表示如下:

實驗代碼在開源深度學習框架PaddlePaddle[32]上實現,在V100 GPU 上訓練與測試。使用預訓練模型ERNIE 初始化參數,并設置所有參數為可訓練狀態。設置問題的最大長度LQ為40,文本段落的最大長度LC為341。優化器為Adam,dropout 比率為0.1。使用指數滑動平均(Exponential Moving Average,EMA)進行評估,衰減率設置為0.999 9。學習率使用線性warm up 和decay,warm up 步數設置為總訓練步數的10%。最大學習率為2e-5,批大小(batch size)為16,關鍵詞分類的訓練輪數(epoch)為4,問題生成的訓練輪數(epoch)為5。
現有的問題生成研究主要在英文問答數據集SQuAD[33]上進行評價,SQuAD 中的數據由段落、問題、答案3 個部分組成,其中:段落和問題從維基百科中獲取;答案由人工標注。但是SQuAD 數據集中官方沒有提供測試集,只提供了訓練集和驗證集。為解決該問題,文獻[34]將原始的訓練集劃分為新的訓練集和新的驗證集,將原始的驗證集劃分為新的測試集,這種劃分方式在問題生成領域被廣泛使用,為了對比實驗的公平性,本文同樣使用文獻[34]中的數據劃分方式。
BLEU-4[35]是目前問題生成領域常用的評價指標。BLEU 通過計算數據集真實數據和模型生成數據中共同出現的n-gram 占所有n-gram 的比率,以此來衡量生成質量的高低。BLEU 還引入長度懲罰因子,避免過長或過短的句子獲得過高的分數。
問題生成實驗結果如表2 所示。其中,選擇3 個具有代表性的模型作為對比模型:帶有復制機制的問題生成模型[34]帶有最大值指針與門控結構復制機制,在段落級的問題生成中取得了突破性的進展與性能提升;帶有語義監督的問題生成模型[24]用問答任務來監督問題生成任務,在效能上具有較大的提升;帶有序列到序列預訓練的問題生成模型UniLM[31]在“序列到序列”預訓練之后進行“微調”,是首個將預訓練語言模型應用于問題生成任務的方法,在該領域具有很大的影響力。不帶關鍵詞感知的問題生成模型是本文的基線模型,其在問題生成模型的嵌入向量層沒有添加關鍵詞特征的嵌入向量。從表2 可以看出,本文帶有關鍵詞感知的問題生成模型的性能優于基線模型以及對比問題生成模型。

表2 問題生成實驗結果Table 2 Question generation experiment results
用準確率和召回率評估關鍵詞分類及后處理之后的問題生成質量,多組關鍵詞分類閾值下的實驗結果如表3 所示。從表3 可以看出,準確率和召回率無法同時達到很高水平,這是由于問題生成任務固有的“一對多”特點所造成的,需要采用后處理的方法調整關鍵詞分類閾值T來解決該問題。

表3 關鍵詞分類實驗結果Table 3 Keyword classification experiment results
為進一步探究后處理中關鍵詞分類閾值T對問題生成質量的影響,本文評估多組閾值設置下的問題生成BLEU-4 指標,結果如圖5 所示。

圖5 關鍵詞分類閾值對BLEU-4 的影響Fig.5 Influence of keyword classification threshold on BLEU-4
從圖5 可以看出:當閾值設置為0.01 時,BLEU-4指標結果與基線模型持平;當閾值設置為0.50 時,BLEU-4 指標略高于基線模型;當閾值設置為0.20時,BLEU-4 指標明顯優于基線模型。由此可見,關鍵詞后處理操作具有有效性。
帶有關鍵詞感知的問題生成方法已經借助千萬級規模的數據平臺——百度百科實現了大規模工業應用。一條百度百科數據由一個“詞條名”和對該詞條名的文字介紹構成,例如,詞條“紅嘴鷗”中有大量文字系統性地介紹了紅嘴鷗的形態特征、棲息環境、生活習性等信息。將百度百科數據中的某一個段落以及標記的答案作為問題生成的輸入,將詞條名作為關鍵詞,通過帶有關鍵詞感知的問題生成方法生成包含詞條名的問題,將問題加入搜索引擎的問題庫,當用戶使用搜索引擎搜索該問題時,即可將該段落和答案作為搜索結果。
本文基于預訓練語言模型ERNIE,提出一種帶有關鍵詞感知功能的問題生成方法。利用關鍵詞分類模型提取關鍵詞信息,經過后處理操作后將其作為全局信息來引導問題生成過程。在SQuAD 數據集上的實驗結果表明,該方法能夠顯著提升問題生成效果,BLEU-4 指標值可達24。目前,該方法的有效性已在大規模工業應用中得到驗證,下一步將探索其在摘要抽取、標題生成等其他自然語言生成任務中的適用性。