本篇內(nèi)容是對(duì)于ACL‘23會(huì)議上陳丹琦團(tuán)隊(duì)帶來的Tutorial所進(jìn)行的學(xué)習(xí)記錄,以此從問題設(shè)置、架構(gòu)、應(yīng)用、挑戰(zhàn)等角度全面了解檢索增強(qiáng)的語言模型,作為對(duì)后續(xù)工作的準(zhǔn)備與入門,也希望能給大家?guī)韱l(fā)。
1 簡介:Retrieval-based LMs = Retrieval + LMs
首先對(duì)于一個(gè)常規(guī)的(自回歸)語言模型,其任務(wù)目標(biāo)為通過計(jì)算
并加以采樣來預(yù)測句子中的下一個(gè)token,以此來完成對(duì)于整個(gè)句子的生成。
掩碼語言模型/編碼器-解碼器語言模型的概率計(jì)算方式與此不同,但在此不做過多討論。
而檢索增強(qiáng)的語言模型通過給語言模型掛載一個(gè)外部知識(shí)庫,在語言模型進(jìn)行生成的同時(shí)也在知識(shí)庫中檢索相關(guān)文檔,以此來對(duì)語言模型的生成進(jìn)行輔助。
Retrieval-based LMs概念圖
然而,現(xiàn)有的(全參數(shù))大語言模型已經(jīng)展現(xiàn)出了強(qiáng)勁的性能。我們?yōu)槭裁匆褂脵z索增強(qiáng)的語言模型?以及檢索增強(qiáng)的語言模型能夠解決常規(guī)語言模型怎樣的缺陷?
1. LLMs不能夠僅通過參數(shù)來記憶全部的長尾(long-tail)知識(shí)。
所謂長尾知識(shí),即為不熱門不常用的知識(shí)(e.g. 河北省2020年的總?cè)丝跀?shù)有多少)?,F(xiàn)有工作[1]也已指出,僅遵循scaling law擴(kuò)大模型規(guī)模,對(duì)于長尾知識(shí)也只能夠提供較小的性能提升,實(shí)際的性能提升仍為較為常用和熱門的知識(shí)所提供的。這證明語言模型本身對(duì)于長尾知識(shí)的記憶及應(yīng)用能力仍然較差,而這種“較差”與模型的規(guī)模并無直接關(guān)聯(lián)。通過對(duì)知識(shí)庫的檢索可以對(duì)這方面知識(shí)有更好的“回憶”作用。
Performance on less popular questions (blue) doesn’t improve over scale
2. LLMs通過參數(shù)所記憶的知識(shí)很容易過時(shí),并且難以更新。
如今互聯(lián)網(wǎng)的信息呈爆炸式增長,知識(shí)更新速度極快,而語言模型通過參數(shù)所記憶的知識(shí)只能夠保證是當(dāng)時(shí)數(shù)據(jù)收集時(shí)的最新,而無法與時(shí)俱進(jìn),且語言模型預(yù)訓(xùn)練的消耗量極大,無法完成對(duì)于知識(shí)的頻繁更新。雖然現(xiàn)有的所提出的一些“知識(shí)編輯”的方法可以對(duì)此問題有一定的緩解作用,但是可擴(kuò)展性不佳。而對(duì)于檢索增強(qiáng)的語言模型來說,僅需要對(duì)于外部的知識(shí)庫進(jìn)行更新即可解決此類問題,且更新知識(shí)庫的花費(fèi)相比于重新訓(xùn)練一個(gè)語言模型甚至是可以忽略不計(jì)的,并且對(duì)外部知識(shí)庫內(nèi)的知識(shí)可以很容易地實(shí)現(xiàn)規(guī)模的擴(kuò)張。
Retrieval-based LMs僅通過更新外部知識(shí)庫實(shí)現(xiàn)對(duì)于知識(shí)的更新
3. LLMs的輸出難以解釋和驗(yàn)證。
我們通常很難對(duì)于語言模型所給出答案的原因以及依靠來源進(jìn)行分析,這便導(dǎo)致我們很難去判斷語言模型這個(gè)“黑箱”內(nèi)部的真實(shí)運(yùn)行邏輯,也使得我們無法完全相信其所給出的答案(即使通常情況下是正確的,但也是不可解釋的)。而檢索增強(qiáng)的語言模型通過返回檢索得到的外部文檔作為依靠,我們可以很容易地知道模型正在依靠怎樣的文本知識(shí)去進(jìn)行當(dāng)前內(nèi)容的生成,通過分析及驗(yàn)證其檢索到的相關(guān)文檔,來理解模型生成當(dāng)前內(nèi)容的運(yùn)行邏輯。
NewBing給出文檔來源的示例
4. LLMs很容易泄露隱私訓(xùn)練數(shù)據(jù)。
如果將隱私數(shù)據(jù)(e.g. 用戶住址、聯(lián)系方式等)加入語言模型的預(yù)訓(xùn)練階段,則使用語言模型的所有人均能夠接觸到這部分?jǐn)?shù)據(jù),顯然這會(huì)造成用戶隱私數(shù)據(jù)的泄露(OpenAI的ChatGPT也曾經(jīng)面臨過此類問題),并且此類問題難以通過指令微調(diào)或者偏好對(duì)齊的方式進(jìn)行徹底解決。而檢索增強(qiáng)的語言模型允許我們將隱私數(shù)據(jù)存儲(chǔ)在外部的知識(shí)庫中,而與語言模型本身參數(shù)沒有關(guān)系,語言模型可以通過訪問知識(shí)庫中的這部分?jǐn)?shù)據(jù)來為我們提供更為個(gè)性化的服務(wù),保護(hù)隱私的同時(shí)也能夠提高其個(gè)性化定制的能力。
部分隱私數(shù)據(jù)被包含在了預(yù)訓(xùn)練語料之中
5. LLMs規(guī)模極大,訓(xùn)練和運(yùn)行均極其昂貴。
不光是訓(xùn)練一個(gè)大語言模型,將其部署且運(yùn)行推理的花費(fèi)也極其昂貴。而我們嘗試通過檢索增強(qiáng)的語言模型來減少語言模型本身的規(guī)模,實(shí)現(xiàn)一個(gè)較小的語言模型也能夠達(dá)到與大語言模型相媲美的性能。這顯然更加經(jīng)濟(jì),長期效果來看無論是對(duì)于學(xué)術(shù)界還是小規(guī)模的公司也更加友好。(現(xiàn)有檢索增強(qiáng)的語言模型工作[2]以25倍的參數(shù)縮減,實(shí)現(xiàn)了與GPT-3所匹配的性能)。
檢索增強(qiáng)的語言模型已然成為了目前較為關(guān)鍵的研究問題,值得深入探索。
2 問題定義:一個(gè)在測試階段使用外部知識(shí)存儲(chǔ)的語言模型
對(duì)于該定義,我們可以分為兩個(gè)部分來看:1)語言模型;2)在測試階段使用外部知識(shí)存儲(chǔ)。
而對(duì)于1)語言模型,則無需過多解釋,無論是目前性能較為work的自回歸Decoder-only語言模型,還是幾乎同期出現(xiàn)的Encoder-only/Encoder-Decoder語言模型均可以被考慮在內(nèi)。
不同解碼方式/架構(gòu)的語言模型
而預(yù)訓(xùn)練+Prompting是目前對(duì)于語言模型較為常用且十分work的訓(xùn)練范式,使語言模型能夠適配較多的下游任務(wù),以達(dá)到通用化需求,其中可以適配的常見下游任務(wù)如下圖所示(不完全):
語言模型通過Prompting后適配的多種常見下游任務(wù)
且對(duì)于訓(xùn)練好的模型,我們通??梢酝ㄟ^兩種評(píng)估手段來判斷模型性能的好壞,分別為:困惑度(Perplexity)和下游任務(wù)準(zhǔn)確度(Downstream Accuracy)。
兩種常用評(píng)估手段
其中,Perplexity的計(jì)算方式為:
為方便計(jì)算,語言模型的實(shí)際評(píng)估過程中常使用log-perplexity進(jìn)行計(jì)算(與上圖示例中相同),即只需要外套一個(gè)log,計(jì)算即可。
進(jìn)一步的,對(duì)于2)在測試階段使用外部知識(shí)存儲(chǔ),具體形式如下圖所示:
Retrieval-based LMs推理階段示意圖
首先對(duì)于Datastore,其內(nèi)部組成大多為原始文本語料,即包含至少1-10B token的無標(biāo)簽且非結(jié)構(gòu)化數(shù)據(jù)(也有部分的知識(shí)庫為向量存儲(chǔ)形式)。而上圖中的Query即代表用于檢索的查詢,該檢索查詢q與輸入語言模型的x并不一定相同。Index即為在知識(shí)庫D中查找得到的與檢索查詢q最相似的一小部分(Top-k個(gè))元素子集,這也是我們?cè)谥R(shí)庫中的查詢目標(biāo)。
在此涉及到了相似度的計(jì)算,則便衍生出多種可選的相似度度量方式,可以是類似于TF-IDF的傳統(tǒng)計(jì)算方式,也可以是對(duì)嵌入向量間的點(diǎn)乘計(jì)算方式等等。同時(shí)檢索的方式也包含了精確檢索/近似檢索,此即為檢索開銷與檢索精度間的trade-off了。
兩種文本間相似度計(jì)算方式示例
而對(duì)于上述全部的定義,我們提出三點(diǎn)需要解答的問題以供后續(xù)展開:
(When)檢索查詢是怎樣的 & 何時(shí)執(zhí)行檢索操作?
(What)檢索何種形式的內(nèi)容?
(How)如何去利用檢索得到的內(nèi)容?
3 架構(gòu):What & How & When
上圖即為對(duì)于以上所提出的三個(gè)問題的回答,可總結(jié)為下表:
分別對(duì)于各個(gè)情況進(jìn)行對(duì)比討論,則我們可以從具體性能與經(jīng)驗(yàn)上可以得到下述結(jié)論:
1)對(duì)于“What to retrieve?”:
直接檢索chunks能夠降低檢索難度(因?yàn)樵颊Z料中多數(shù)文本也正以大段的形式存在),且空間上更加友好。
相比于檢索chunks,檢索更細(xì)粒度的tokens可以更好地利用罕見模式(e.g. 檢索表示深度學(xué)習(xí)算法包的“torch”,而非火把“torch”)以及領(lǐng)域外知識(shí)(OOD),并且檢索也會(huì)非常高效(kNN搜索本身即十分高效),但會(huì)導(dǎo)致數(shù)據(jù)存儲(chǔ)在空間上開銷更大(e.g. Wikipedia:chunks-13M v.s. tokens-4B),并且語言模型輸出結(jié)果與檢索結(jié)果之間并無交叉注意力計(jì)算,性能因此會(huì)受到部分損害。
除這二者之外,檢索entity mention同樣為一種可行方式,其思想可歸納為“One vector per entity mention”,即去知識(shí)庫中檢索查詢中所出現(xiàn)的實(shí)體對(duì)象,在以實(shí)體為中心的任務(wù)中更加有效,相比于檢索token,在存儲(chǔ)空間上也更加友好,但同時(shí)也需要增加額外的實(shí)體檢測操作。
2)對(duì)于“How to use retrieval?”:
在input layer直接加入檢索到的文檔顯然十分簡單直觀,在面對(duì)大量、頻繁的文檔檢索場景時(shí)是十分低效的。
而在intermediate layer應(yīng)用檢索到的信息,相比于直接在input layer添加檢索到的文檔,可以利用語言模型的更多塊(block),以支持更頻繁的檢索,使計(jì)算更加高效,但同時(shí)也會(huì)引入較多的復(fù)雜度,使得整個(gè)模型無法不經(jīng)訓(xùn)練直接使用。
在Output layer應(yīng)用檢索信息則是對(duì)于語言模型預(yù)測token與檢索得到的token概率進(jìn)行的加權(quán)聚合(以kNN-LM為代表),同樣可以不經(jīng)訓(xùn)練便可以直接使用,關(guān)鍵更多在于存儲(chǔ)各種token上下文時(shí)的空間開銷。
3)對(duì)于“When to retrieve?”:
上表中所提及的三種檢索頻率,應(yīng)用上更多是根據(jù)剩余兩個(gè)問題所決定的架構(gòu)而調(diào)整的,但我們可以發(fā)現(xiàn)上述三種選擇大多數(shù)情況下均為固定的檢索頻率。當(dāng)前也正有工作向著自適應(yīng)的檢索頻率進(jìn)行發(fā)展,即當(dāng)語言模型對(duì)給出答案置信度較高時(shí),不執(zhí)行檢索或降低檢索頻率,反之更加頻繁地執(zhí)行檢索操作。抑或是在Output layer進(jìn)行對(duì)于預(yù)測token的概率加權(quán)聚合時(shí),將各個(gè)組件的權(quán)重視作與輸入x有關(guān)的函數(shù),以動(dòng)態(tài)調(diào)整檢索與語言模型預(yù)測結(jié)果對(duì)于最終輸出結(jié)果的作用權(quán)重。自適應(yīng)的檢索頻率能夠提高效率,但最終的結(jié)果可能不是最優(yōu)的。
由于所涉及到的各個(gè)工作實(shí)現(xiàn)細(xì)節(jié)過于繁多,在此并不展開來講,可根據(jù)下方總結(jié)圖表進(jìn)行對(duì)應(yīng)索引:
當(dāng)前各工作所采取的不同架構(gòu)總結(jié)圖
當(dāng)前各工作所采取的不同架構(gòu)總結(jié)表
上表中最后一行也提及了一類不同的檢索增強(qiáng)的語言模型,相比于其他種類,此類并不從外部的知識(shí)庫中進(jìn)行信息的檢索,而是從自身生成的歷史信息中進(jìn)行“自檢索”,其目標(biāo)是為了處理超長文本或?qū)崿F(xiàn)自身的長期記憶,這樣的架構(gòu)設(shè)計(jì)也是為了實(shí)現(xiàn)這樣的下游任務(wù)而設(shè)計(jì)的。
4 訓(xùn)練:(To train and how to train) or not to train
檢索增強(qiáng)的語言模型的訓(xùn)練同樣是最關(guān)鍵的一點(diǎn),簡單地同時(shí)去訓(xùn)練語言模型以及更新索引顯然無論在空間上還是在時(shí)間上都是復(fù)雜度極高的?,F(xiàn)有工作中對(duì)于檢索增強(qiáng)的語言模型被證實(shí)的比較work的訓(xùn)練方式可劃分為以下四類:
Independent training:語言模型與檢索器均是獨(dú)立訓(xùn)練的。
Sequential training:獨(dú)立訓(xùn)練單個(gè)組件后將其固定,另一個(gè)組件根據(jù)此組件任務(wù)目標(biāo)進(jìn)行訓(xùn)練。
Joint training w/ asynchronous index update:允許索引是“過時(shí)”的,即每隔T步才重新更新檢索索引。
Joint training w/ in-batch approximation:使用“批內(nèi)索引”,而不是完整知識(shí)庫中的全部索引。
以上提及的四類訓(xùn)練方式各有優(yōu)缺點(diǎn):
Independent training:可以使用現(xiàn)成的模型(大型索引和強(qiáng)大的LM)而無需額外的訓(xùn)練,每個(gè)部分都可以獨(dú)立改進(jìn);但語言模型沒有被訓(xùn)練如何利用檢索,且檢索模型沒有針對(duì)語言模型的任務(wù)/域進(jìn)行優(yōu)化。
Independent training
Sequential training:可以使用現(xiàn)成的單個(gè)組件(大型索引或強(qiáng)大的LM),并且可以訓(xùn)練語言模型以更加有效地利用檢索結(jié)果,或者可以訓(xùn)練檢索器以更好地提供幫助語言模型的檢索結(jié)果;然而有一個(gè)組件仍然是固定沒有經(jīng)過訓(xùn)練的。
Sequential training
Joint training w/ asynchronous index update:此方法存在索引更新頻率的選取難題,頻率過高會(huì)導(dǎo)致開銷昂貴,頻率過低會(huì)導(dǎo)致索引“過時(shí)”而影響性能。
Joint training w/ asynchronous index update
Joint training w/ in-batch approximation:因在整個(gè)知識(shí)庫中實(shí)現(xiàn)重新索引會(huì)產(chǎn)生巨量的計(jì)算開銷,此方法只在批內(nèi)進(jìn)行重新索引的更新計(jì)算,以更小的計(jì)算開銷去近似整體重新索引的效果。
!Joint training w/ in-batch approximation
對(duì)于Joint training,其均能夠獲取更加良好的性能,但訓(xùn)練更為復(fù)雜(異步更新、計(jì)算開銷、數(shù)據(jù)批處理等),并且訓(xùn)練-測試的差異仍然存在。
整體看來,上述的四類訓(xùn)練方式除了與模型的設(shè)計(jì)架構(gòu)直接相關(guān),還主要為訓(xùn)練開銷與模型性能之間的trade-off,后續(xù)研究工作的開展也同樣應(yīng)該是圍繞這種思路構(gòu)建的,以尋求最佳的開銷-性能平衡點(diǎn)。以上所提到的四類訓(xùn)練方式的全部相關(guān)信息可以被總結(jié)為下表:
訓(xùn)練方式優(yōu)/劣勢總結(jié)表
5 應(yīng)用:What & How & When
首先,我們需要明確的是:What are the tasks?我們可以從下圖中得到一個(gè)全面的了解:
檢索增強(qiáng)的語言模型可應(yīng)用的各類下游任務(wù)
其中第一行的三個(gè)任務(wù)所代表的是知識(shí)密集型任務(wù)(knowledge-intensive),第二行所表示的是More generations類型的任務(wù),最下面一行所表示的是More classifications型任務(wù)。
同時(shí)我們還需要回答下列問題:
How can we adapt a retrieval-based LM for a task?
When should we use a retrieval-based LM?
針對(duì)How,目前主要的求解范式可以被分為:Fine-tuning,Reinforcement learning,Prompting;并且這三者可同時(shí)出現(xiàn)并利用,具體形式如下所示:
How can we adapt a retrieval-based LM for a task?
雖然Fine-tuning與Reinforcement learning(RLHF)的結(jié)合使得語言模型能夠更好地與人類偏好對(duì)齊,但需要額外的訓(xùn)練以及收集額外的偏好/對(duì)齊數(shù)據(jù)。但如果我們不能為下游任務(wù)訓(xùn)練語言模型時(shí)(e.g. 缺乏計(jì)算資源/專有未開源的語言模型等),此時(shí)我們便應(yīng)該訴諸于Prompting,此時(shí)便無法從語言模型的中間層進(jìn)行改進(jìn),而只能去操作語言模型的輸入/輸出層(輸入合并檢索上下文/輸出token概率插值聚合)。
各類模型What & How & When分類總結(jié)
總結(jié)而言,Retrieval-based prompting實(shí)現(xiàn)起來非常簡單,無需訓(xùn)練;但結(jié)果/性能上有更高的方差。Fine-tuning(+RL)需要額外訓(xùn)練但結(jié)果/性能上方差較小,且需要收集更多的額外數(shù)據(jù)。并且需要注意的是,在下游任務(wù)上訓(xùn)練檢索器會(huì)很有幫助。
并且我們需要明確知識(shí)庫的類型,這可以是多樣化的,大致可分為:Wikipedia,訓(xùn)練數(shù)據(jù),代碼文檔。但在OOD檢索上仍然具有挑戰(zhàn)。
而針對(duì)When,我們可以通過下圖進(jìn)行總結(jié):
When should we use a retrieval-based LM?
其中上述六方面概念我們?cè)谇拔闹幸灿兴偨Y(jié),故在此不過多贅述。
在此需要注意的是,多數(shù)工作證實(shí)檢索增強(qiáng)的語言模型在MMLU數(shù)據(jù)集(Multiple-choice NLU任務(wù))上表現(xiàn)不佳,聯(lián)想到先前也有工作表示通過向量相似度計(jì)算的方式無法很好地完成多詞條召回(Multi-tag recall)任務(wù),故筆者猜測可能多選任務(wù)上性能不佳的原因也與此有關(guān)聯(lián),此部分仍有很大的提升空間。
6 擴(kuò)展:Multilingual & Multimodal
此類擴(kuò)展均是面向了更加多樣化的知識(shí)庫形式,從而能夠使語言模型從更多種類的存儲(chǔ)形式中獲取知識(shí)。
不限形式的檢索增強(qiáng)的語言模型
除了報(bào)告中介紹的具備代表性的多語言檢索增強(qiáng)的語言模型[3]外,更多此類工作總結(jié)如下:
多語言檢索增強(qiáng)的語言模型——現(xiàn)有工作
除了報(bào)告中所介紹的Meta最新多模態(tài)檢索增強(qiáng)的語言模型工作[4]外,更多此類工作總結(jié)如下:
多模態(tài)檢索增強(qiáng)的語言模型——現(xiàn)有工作
總結(jié)而言,擴(kuò)展到多語言檢索:可以實(shí)現(xiàn)通過跨語言檢索和生成來克服許多世界語言中數(shù)據(jù)存儲(chǔ)的稀缺性(e.g. 中文互聯(lián)網(wǎng)數(shù)據(jù)中缺少的知識(shí)可以從英文互聯(lián)網(wǎng)數(shù)據(jù)中尋求補(bǔ)充);而擴(kuò)展到多模態(tài)檢索:為了使輸入(輸出)適配更多的模態(tài),從而可以將模型更加靈活通用地部署在各類下游任務(wù)上。
審核編輯:彭菁
-
解碼器
+關(guān)注
關(guān)注
9文章
1129瀏覽量
40637 -
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4226瀏覽量
85578 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1757瀏覽量
32044 -
數(shù)據(jù)收集
+關(guān)注
關(guān)注
0文章
70瀏覽量
11149 -
語言模型
+關(guān)注
關(guān)注
0文章
501瀏覽量
10236
原文標(biāo)題:陳丹琦 ACL'23 Tutorial - 基于檢索的大語言模型 學(xué)習(xí)筆記
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論