李志東,羅琪彬,喬思龍
(華北計算技術研究所 大數(shù)據(jù)研發(fā)中心,北京 100083)
業(yè)務系統(tǒng)中具有多種不同時間序列的數(shù)據(jù)信息,將這些數(shù)據(jù)通過相關性和因果關系相聯(lián)系形成知識圖譜有助于快速深入地掌握時序信息。此外,數(shù)據(jù)信息在時間維度上的語義表達不同,包括年、月、日等不同粒度,跨時間粒度的語義表達會對問答結果產生影響。由此,時序知識圖譜(Temporal Knowledge Graph,TKG)的產生可以對不同的時間序列數(shù)據(jù)生成一個多層的、多粒度的知識圖譜,使得時序之間的關系得以清晰描述。
基于知識圖譜的問答系統(tǒng)(Question Answering System based on Knowledge Graphs,KGQA)最早被用于提高企業(yè)的核心競爭力,由于企業(yè)經營過程中沉淀了許多知識但并不能得到很好的利用,KGQA的出現(xiàn)使得知識的完全利用成為了可能。而TKG是在傳統(tǒng)的知識圖譜上對時間進行延伸,在三元組中加入時間維度,格式為“[頭實體 關系 尾實體 時間]”。這樣不僅僅描述了各實體間的關系,也包含了關系成立的時間點或者時間范圍的信息。
時序知識圖譜問答系統(tǒng)(Temporal Knowledge Graph Question Answering,Temporal KGQA)往往是基于時序知識庫構建,需要經歷復雜的推理,并且答案是實體或者時間。通??梢园褑栴}分為兩大類:簡單問題和復雜問題。其中簡單問題都是基于一跳關系的問答,答案是四元組內缺失的時間或者實體,需要問答系統(tǒng)找出或者推測出正確的答案;復雜問題中往往包含了“Before/After”“First/Last”等約束條件,大多需要復雜的時間推理,會比較難以解決。
傳統(tǒng)的Temporal KGQA方法往往選擇從特定的知識庫中抽取實體和關系,將獲取的內容填入模板生成答案;或通過特定規(guī)則和方法,與問題進行匹配產生答案;或是通過深度學習模型進行答案推理。但這些方法通常是在詞粒度上進行匹配的,忽略了TKG本身所蘊含的句粒度語義信息,可能導致回答不準確。
針對上述問題,本文提出了一種基于句粒度提示的大語言模型Temporal KGQA方法,該方法分為三個部分。一是使用嵌入模型從TKG中提取出與問題相關的句粒度知識。具體來說,先把TKG中的四元組進行句粒度提示改造,再利用嵌入模型把問題和TKG向量化,最后通過向量的相似度匹配來從TKG中提取與問題高度相關的句粒度知識。二是通過提示學習、句粒度知識和問題來構建大語言模型需要的句粒度提示。三是基于大語言模型超強的語義理解能力,讓其對句粒度知識進行理解和推理并得到答案。
本文的貢獻總結如下:
(1)本文提出了一種基于句粒度提示的大語言模型來解決時序知識圖譜問答的方法。
(2)本文通過結合提示學習、句粒度知識和問題,構建了多種提示模板,驗證了大語言模型在無監(jiān)督或弱監(jiān)督下的時序知識問答能力。
(3)本文通過LoRA方法微調大語言模型,提升了大語言模型在時序知識問答任務上的性能。
(4)實驗表明在ICEWS05-15數(shù)據(jù)集上,本文提出的方法最高可以達到36%的準確率,是一種科學可行的方法。
KGQA核心是機器對用戶提出的自然語言的理解[1],常規(guī)的KGQA對于處理多粒度時序關系和復雜的上下文關系稍有欠缺,同時,這些系統(tǒng)往往使用靜態(tài)的知識庫來處理自然語言問題,難以滿足現(xiàn)實業(yè)務的需要。針對上述不足,基于句粒度提示的大語言模型時序知識問答的開發(fā)對其進行了完善和處理,提高了系統(tǒng)在多時序約束條件下的問答推理能力。為了解決時序知識圖譜上的問題,《知識圖譜:認知智能理論與實戰(zhàn)》[2]介紹了基于知識圖譜的智能問答系統(tǒng)的Z型框架,如圖1所示,傳統(tǒng)的解決方法主要依據(jù)這個框架從規(guī)則模板、語義解析和信息檢索方面展開分析。
圖1 智能問答Z字框架
首先,基于規(guī)則和模板的方法通過定義一些預定義規(guī)則將問題和答案進行匹配,實現(xiàn)對知識圖譜的問答。2017年孫振[3]提出的基于人工智能標記語言(Artificial Intelligence Markup Language,AIML)規(guī)則的問答機器人系統(tǒng)使用AIML建立了問答知識庫,實現(xiàn)了AI機器人對話系統(tǒng)的智能性和知識性。2021年羅玲等[4]提出了基于知識圖譜、詞頻-逆文本頻率指數(shù)(Term Frequency-Inverse Document Frequency)和自注意力機制的雙向編碼表示(Bidirectional Encoder Representation From Transformers)的冬奧問答系統(tǒng)模型,用戶可以精準獲取冬奧會相關問答。此類方法的應用關鍵在于模板庫的構建,事先需要很大工作量,因此該方法通常適用在一些簡單、結構化的問答任務上,在多粒度時序知識問答上可用性較差。
其次,基于語義解析的方法也有許多研究,在簡單Temporal KG中,Lan等[5]2019年提出將匹配-聚合模型以及特定上下文關系進行知識問答的方法用在知識庫中,把問題和答案進行匹配,同時在Saxena等[6]2020年提出的多跳問題問答(Multi-hop QA)解決方案中,使用了知識圖譜嵌入(Knowledge Graph Embedding)技術來解決知識圖譜上的Multi-hop QA問題。在復雜應用中,Luo等[7]使用了復雜查詢圖(Complex Query Graph)來完成Temporal KGQA過程,并使用了三個知識庫進行評估,為解決復雜Temporal KGQA問題提供了有效的解決辦法。語義解析的方法避免了大量模板庫的構建,主要在于自然語言到機器所能理解的語言的轉化,容易受到語義鴻溝的影響,在解決Temporal KGQA問題上缺乏靈活性和通用性[8]。
在信息檢索研究方法方面,Bordes等[9]提出了利用深度學習模型從大規(guī)模無標簽數(shù)據(jù)中生成嵌入向量,將答案映射到同一空間并根據(jù)相似度進行答案匹配,處理了自然語言表述的復雜性問題。CRONKGQA模型由Saxena等[10]在2021年提出,是一種基于Transformer的解決方案,利用最新的TKG嵌入方法使得問答在簡單的時間推理問題上準確率很高,但在復雜問題的回答上可能稍有欠缺,且這種方法僅在詞粒度上比較相關性,忽略了句粒度蘊含的語義信息。
自然語言處理(Natural Language Processing,NLP)一直以來都是人工智能領域的一個重要分支,解決NLP任務的模型統(tǒng)稱為語言模型。語言模型最早來自于統(tǒng)計模型[11],但隨著神經網(wǎng)絡和深度學習研究的發(fā)展,循環(huán)神經網(wǎng)絡、長短時記憶網(wǎng)絡也開始作為語言模型來應用。隨著谷歌公司在2018年發(fā)布的BERT[12]證明了預訓練模型和Transformer[13]架構的優(yōu)越性后,語言模型的參數(shù)量開始爆發(fā)式增長,NLP也就進入大語言模型時代。大語言模型通常是基于通識知識進行預訓練,因此在面對特定場景時,常常需要借助模型微調或提示學習來提升大語言模型對下游任務的應用效果。
1.2.1 低秩適應微調
低秩適應[14](Low-Rank Adaptation,LoRA)是大語言模型的高效微調方法,旨在解決大語言模型微調速度慢、計算開銷大等問題。如圖2所示,LoRA微調時會凍結預訓練模型的權重,并在每個Transformer塊中注入可訓練層,即秩分解矩陣。秩分解矩陣由降維矩陣A和升維矩陣B構成,A矩陣由隨機高斯分布初始化,B矩陣由零矩陣初始化從而保證訓練開始時秩分解矩陣是零矩陣。LoRA微調時模型輸入輸出維度不變,只需要將秩分解矩陣的輸出和預訓練模型的輸出相加作為最終的輸出。這樣,僅通過修改秩分解矩陣的參數(shù)而不需要修改預訓練模型,就能快速提升大語言模型在特定任務上的性能。LoRA微調的參數(shù)量較全參數(shù)微調顯著降低,且性能與全參數(shù)微調基本持平。
圖2 LoRA微調
1.2.2 提示學習
提示學習是通過設計自然語言提示或指令來指導語言模型執(zhí)行特定任務的方法[15]。早在2018年Radford等人[16]就已經在GPT-1(Generative Pre-trained Transformer 1)中探索提示學習的應用。提示學習的目的是將下游任務通過提示模板轉換為預訓練的任務,如圖3所示。
圖3 提示學習
當使用掩碼語言模型(Masked Language Model,MLM)來解決文本情感分類任務時,對于 “I love this poem.” 這句輸入,可以在輸入后面加上 “The poem is_” 這樣的提示模板,然后讓MLM用表示情感的詞匯進行填空,如 “wonderful”“terrible” 等,最后再將該詞匯轉化成情感分類的標簽。這樣一來,通過選取合適的提示模板,便可控制模型的輸出,從而使一個在通識數(shù)據(jù)集上訓練的MLM可以被用來處理各種各樣的下游任務。
1.2.3 上下文學習
作為一種特殊的提示學習形式,上下文學習在GPT3[17]中首次得到應用,其核心思想是從類比中學習。基于大語言模型的泛化能力,上下文學習僅需要一些示例就能使模型快速適應所需要做的下游任務。如圖4所示,僅通過K個下游問題的實例,就能讓在通識數(shù)據(jù)上預訓練的大語言模型快速適應文本情感分類任務。
圖4 上下文學習
根據(jù)提示學習中示例的個數(shù)也可以將上下文學習大致分類為三類:Zero-shot learning,One-shot learning和Few-shot learning。Zero-shot learning只允許輸入一則任務說明,不允許輸入任何示例,即最原始的提示形式。One-shot learning和Few-shot learning是在前者的基礎上增加一條示例和多條示例。
基于句粒度提示的大語言模型Temporal KGQA的原理如圖5所示,在載入本地知識圖譜文檔后,首先會對文檔進行切割,并使用嵌入模型將切割后的文檔塊向量化,所有向量依次存儲到向量數(shù)據(jù)庫中。然后使用相同的嵌入模型將問題向量化,將問題向量與向量數(shù)據(jù)庫中的文檔塊向量進行匹配,選取出最高相似度的K個文檔塊向量并根據(jù)索引檢索出對應的原文。根據(jù)已知答案的數(shù)據(jù)依照模板構建上下文學習的示例,最后將示例和匹配出的K段原文與問題一起添加到句粒度提示(prompt)中并輸入到大語言模型。
圖5 基于句粒度提示的大語言模型時序知識問答流程圖
當輸入本地知識文檔后,程序首先會根據(jù)輸入路徑判斷輸入是文檔還是文件夾,若是文檔則直接讀取,否則讀取文件夾下的所有文檔并將其連接到一起。讀取文檔后,程序會對文檔進行切片并生成文檔塊。在切片的過程中如果遇到標點符號會直接切片,否則就等到切片長度達到限制時再切,且其長度可以通過參數(shù)來調節(jié)。
將文檔切片后,使用嵌入模型“text2vec-large-chinese”對每個文檔塊進行向量化。如圖6所示,嵌入模型首先會對文檔塊中的每個詞進行向量化,然后將每個詞的向量在對應維度求均值,最后將均值向量作為文檔塊的向量。
圖6 文檔塊向量化
將本地知識圖譜文檔向量化后,程序使用相同的嵌入模型將問題向量化,并計算問題向量與所有文檔塊向量的余弦相似度。然后程序會選擇K(個數(shù)可以通過參數(shù)來調節(jié))個相似度最高的文檔塊作為已知信息添加到prompt中。值得強調的是,當本地知識圖譜文檔包含非結構化數(shù)據(jù)時,程序可能會把包含完整語義的一句話切成多個文檔塊,單個文檔塊可能無法表達完整的意思,所以在將召回的K個文檔塊添加到prompt中時,可以選擇是否選取其鄰近的文檔塊一起添加到prompt中。如圖7所示,文檔塊2為匹配到的最佳文檔塊,文檔塊1和文檔塊3是其鄰近文檔塊,程序會將最佳匹配文檔塊、鄰近文檔塊和問題一起構建到prompt中,之后再輸入到大語言模型中。
圖7 相關文檔匹配流程
構建prompt時,本文根據(jù)上下文學習和對模型輸出個數(shù)的限制來構建兩大類prompt。
如表1所示,本文首先會構建基礎的prompt,即不提供示例且限制模型只輸出一個答案。在基礎prompt上,再根據(jù)上下文學習來構建具有一個示例和具有五個示例的prompt,也就是One-shot learning和Few-shot learning。在構建示例時,本文會根據(jù)問題中的實體或時間,以字符串匹配的方式從知識圖譜中獲得該問題所對應的句粒度知識,之后會從中選取5條作為回答問題的已知信息,其中包含答案所對應的句粒度知識和用于干擾的句粒度知識。此外在Few-shot learning中,本文所選示例中有針對人物、時間、地點等多角度的問題,以此讓示例包含盡可能多的信息。最后,本文會對模型的輸出個數(shù)進行放開,以此來構建鼓勵模型輸出所有可能答案的prompt。
表1 Prompt 模板
在句粒度知識召回后,本文用召回的句粒度知識來替換模板中的“{context}”,再用問題來替換模板中的“{question}”。這樣就生成了最終要輸入到大語言模型中的prompt。
本實驗中,選用ChatGLM-6B作為Temporal KGQA的基礎語言模型。該模型基于General Laungage Model(GLM)[18]架構,具有62億參數(shù)。相比于ChatGPT、MOSS、PaLM等大語言模型,ChartGLM-6B具有輕量運行的顯著優(yōu)勢,這也是本實驗選取它作為基礎語言模型的主要原因。模型的FP16精度版本,僅需要大概13 GB顯存即可運行。
本實驗采用數(shù)據(jù)集為ICEWS05-15,TKG的時序跨度為2005~2015年,數(shù)據(jù)集共包含461 329條數(shù)據(jù),每條格式為“[頭實體 關系 尾實體 時間]”。其中訓練集345 362條,驗證集24 683條。本實驗從訓練集中選取前10 000條數(shù)據(jù)用于模型微調,從測試集中選取前3 000條用于模型測試。訓練集和測試集都包含問題編號 (quid)、問題文本(question)和答案(answers)三項內容。問題與答案中包含多種粒度的時間信息,包括年、月和日,且問題中涉及多種時序邏輯約束,如之前、之后、首個等,問題答案限定于圖譜中的實體和時間。
鑒于大語言模型是以對話語料來進行訓練的,為了讓模型可以更好地理解TKG所蘊含的信息,本文對TKG進行了句粒度提示改造。在“[頭實體 關系 尾實體 時間]”四元組中的尾實體和時間之間加入了“on”,并把四元組改成了字符串形式,刪去了如“-”“_”等特殊字符。
傳統(tǒng)KGQA任務常用的評價指標為MRR(Mean Reciprocal Rank),計算公式如下:
(1)
但MRR方法僅針對列表形式的答案進行評估,大語言模型以字符串的形式返回答案,因此本文采用一種松弛的MRR方法,記為MRR-relax,計算公式如下:
(2)
檢測時序問答模型返回的字符串中是否包含答案池中的任意答案,若包含則ranki得分為1,否則得分為0。
本實驗使用 “text2vec-large-chinese”作為嵌入模型,默認句子切分的最大長度為30,在句粒度知識召回時只召回最佳文檔塊。LoRA微調時使用10 000個訓練樣本,在預訓練模型上訓練3個epoch。本實驗采用交叉熵作為損失函數(shù),LoRA微調的損失曲線如圖8所示。
本實驗在預訓練模型和LoRA微調模型上都進行了測試,并以句粒度知識召回數(shù)量為5、上下文學習示例個數(shù)為0、模型輸出個數(shù)限制為1為基線方法,在上述三個方面設計了對比實驗,詳細實驗結果如表2和表3所示。
表2 預訓練模型的實驗結果
通過預訓練模型的實驗結果可以看到,隨著句粒度知識召回數(shù)量的提升,大語言模型可以得到更多知識圖譜的語義信息,模型的準確率也逐漸上升。此外基于上下文學習方法在prompt中添加示例,可以讓大語言模型更好地適應KGQA任務,因此得到了更好的效果。最后,當不再限制大語言模型的輸出個數(shù)時,模型會根據(jù)句粒度的提示信息輸出所有可能的答案,相比于只輸出一個答案,這顯著提升了模型的性能。
通過LoRA微調模型的實驗結果可以看到,相比于預訓練的大語言模型,僅使用10 000個數(shù)據(jù)集微調3個epoch后的模型在性能上也有明顯提升,這也再次證明了基于句粒度提示的大語言模型時序知識問答方法的有效性。
本文提出了一種基于句粒度提示的大語言模型時序知識問答方法,通過嵌入模型從時序知識圖譜中提取與問題高度相關的句粒度知識,再根據(jù)提取出的句粒度知識、問題和上下文學習的內容來構建prompt,最后依賴大語言模型超強的語義理解能力從句粒度的提示中得到答案。在時序知識圖譜數(shù)據(jù)集ICEWS05-15上進行實驗,取得了可觀的效果,驗證了該方法的有效性。在后續(xù)的工作中,將基于知識圖譜問答對來構建對話語料并使用多種方式對大語言模型進行微調,繼續(xù)進行句粒度提示的大語言模型問答研究,為時序知識問答提供科學可行的解決方案。