論文翻譯 | (DSP)展示-搜索-預測:為知識密集型自然語言處理組合檢索和語言模型

摘要

????????檢索增強式上下文學習已經成為一種強大的方法,利用凍結語言模型 (LM) 和檢索模型 (RM) 來解決知識密集型任務。現有工作將這些模型結合在簡單的“檢索-讀取”流程中,其中 RM 檢索到的段落被插入到 LM 提示中。
????????為了充分發揮凍結 LM 和 RM 的潛力,我們提出了 DEMONSTRATE-SEARCH-PREDICT (DSP) 框架,該框架依賴于在 LM 和 RM 之間通過復雜的流程傳遞自然語言文本。DSP 可以表達高級程序,這些程序可以引導流程感知的演示、搜索相關段落并生成有根據的預測,系統地分解問題,使其成為 LM 和 RM 可以更可靠地處理的小型轉換。
????????我們為開放域、多跳和對話場景下的問答任務編寫了新的 DSP 程序,并在早期評估中取得了新的上下文學習最先進成果,分別比基線 LM (GPT-3.5)、標準檢索-讀取流程和同期自問流程取得了 37-120%、8-39% 和 80-290% 的相對提升。我們將在?https://github.com/stanfordnlp/dsp 發布 DSP。

1 引言

????????上下文學習通過在文本提示中包含任務指令和幾個演示示例來調整凍結語言模型(LM),使其適應各種任務。對于問答、事實核查和信息尋求對話等知識密集型任務,檢索模型(RM)越來越多地用于增強提示,從大型語料庫中檢索相關信息。

????????最近的研究表明,這種檢索增強式上下文學習在簡單的“檢索-讀取”流程中非常有效:將查詢輸入到 RM 中,并將檢索到的段落作為提供 LM 響應上下文的一部分。在這項工作中,我們認為 LM 和 RM 都消耗(并生成或檢索)自然語言文本,這為它們之間更復雜的交互提供了機會。充分實現這一點將具有變革性:凍結的 LM 和 RM 可以作為跨任務的通用基礎設施,使機器學習和領域專家能夠以更高的抽象級別快速構建有根據的 AI 系統,并降低部署開銷和標注成本。

????????圖 1 開始說明了檢索增強式上下文學習的強大之處,但也突出了“檢索-讀取”方法的局限性。我們的查詢是“大衛·格雷戈里繼承的城堡有多少層?”。當被提示回答這個問題時,GPT-3.5(text-davinci-002;Ouyang 等人,2022 年)編造了一個虛構的城堡,其屬性不正確,這突出了 LM 參數中存儲的知識通常不可靠的常見現象(Shuster 等人,2021 年;Ishii 等人,2022 年)。引入 RM 組件有所幫助,因為 LM 可以將其響應建立在檢索到的段落上,但凍結的檢索-讀取策略會失敗,因為 RM 無法找到直接回答問題的段落。

圖1所示。基于GPT3.5 (text-davinci-002)的三個系統的比較。LM本身經常做出錯誤的斷言。當簡單的搜索無法找到答案時,越來越流行的檢索-讀取管道就會失敗。相比之下,任務感知DSP程序成功地分解了問題并產生了正確的響應。為演示而編輯的文本

????????我們引入了 DEMONSTRATE-SEARCH-PREDICT (DSP) 框架,用于上下文學習,該框架完全依賴于在凍結的檢索模型 (RM) 和語言模型 (LM) 之間傳遞自然語言文本(和分數)。DSP 引入了一系列可組合的功能,用于引導訓練示例 (DEMONSTRATE)、從知識語料庫中收集信息 (SEARCH) 和生成有根據的輸出 (PREDICT),從而系統地統一檢索增強式 NLP 和上下文學習文獻中的技術 (Lee 等人,2019 年;Khattab 等人,2021a;Anantha 等人,2020 年;Gao 等人,2022 年;Izacard 等人,2022 年;Dohan 等人,2022 年;Zelikman 等人,2022 年;Zhang 等人,2022 年)。
????????我們使用 DSP 來建議強大的知識密集型任務策略,這些策略由上述技術的組合構成。這揭示了上下文學習的一般性新概念可能性(第 2 節),并使我們能夠展示豐富的程序,這些程序為上下文學習設置了新的最先進成果(第 3 節)。

????????圖 1 展示了 DSP 程序可能采取的路徑來得出答案,而圖 2 則說明了如何通過精心設計的程序實現這一點。程序并沒有直接要求 LM 回答這個復雜的問題,而是 SEARCH 階段使用 LM 生成了一個查詢:“大衛·格雷戈里繼承了哪座城堡?” RM 檢索到一條段落,說格雷戈里繼承了 Kinnairdy Castle。在第二次搜索“跳轉”找到城堡的層數后,PREDICT 階段使用這些段落來查詢 LM,以回答原始問題。
????????盡管這個程序實現了查詢生成等行為,但它不需要手動標注這些中間轉換的示例(即,檢索跳轉中生成的查詢和段落)。相反,DEMONSTRATE 階段使用標記的問答對來實現一種弱監督形式,該形式可以自動標注 SEARCH 和 PREDICT 中調用的轉換。

圖 2. 多跳問答 DSP 程序的一個示例。給定一個輸入問題和 2-shot 訓練集,DEMONSTRATE 階段使用一種弱監督形式自動對訓練示例中的中間轉換進行注釋。SEARCH 階段從演示中學習,分解復雜的輸入問題,并在兩次檢索跳轉中檢索支持信息。最后,PREDICT 階段使用演示和檢索到的段落來回答問題。

????????我們在開放域、多跳和對話場景下對多個 DSP 程序進行了問答評估。在這些程序中,我們實現了新穎且可重用的轉換,例如使用弱監督對所有流程引導注釋(第 2.3 節)、可靠地重寫問題以解決對話依賴關系并使用中間跳轉的摘要迭代分解復雜查詢(第 2.4 節),以及使用自洽性從多個段落生成有根據的響應(第 2.5 節)。我們使用凍結的 LM GPT-3.5 和 RM ColBERTv2(Khattab & Zaharia,2020 年;Santhanam 等人,2022b 年)在 Open-SQuAD、HotPotQA 和 QReCC 上報告了初步結果,無需微調。我們的 DSP 程序分別比相應的基線 LM、標準檢索-讀取流程和同期自問流程(Press 等人,2022 年)取得了 37-120%、8-39% 和 80-290% 的相對提升。
本報告的后續版本將包括額外的測試任務和 LM 選擇。

????????總之,本工作做出了以下貢獻。首先,我們主張簡單的、與任務無關的上下文學習流程應該讓位于深思熟慮的、任務感知的策略。其次,我們展示了這種轉變不必成為負擔:使用 DSP,這樣的策略可以輕松地表示為使用可組合運算符的簡短程序。第三,這種組合性催生了強大的能力,例如能夠自動標注復雜流程的演示,僅從最終任務的標簽中。第四,對于三個知識密集型任務,我們實現了豐富的程序,為上下文學習建立了最先進的結果。

2 展示-搜索-預測

????????現在,我們引入了 DSP 框架,并通過提出一系列策略來展示其表達力,這些策略使 LM 和 RM 能夠有效地共同解決復雜問題。我們在第 3 節展示了這些策略優于現有的上下文學習方法。我們首先討論了 DSP 所基于的 LM 和 RM 基礎模塊(第 2.1 節),然后討論了 DSP 內部的數據類型和控制流程(第 2.2 節)。隨后,我們討論了每個推理階段:DEMONSTRATE(第 2.3 節)、SEARCH(第 2.4 節)和 PREDICT(第 2.5 節)。

2.1 預訓練模塊:LM和RM

????????一個DSP程序定義了語言模型LM和檢索模型RM之間的通信。

????????語言模型我們調用一個凍結的語言模型 LM 來有條件地生成(或評分)文本。對于每次調用,程序都會準備一個提示,使 LM 適應一個特定的功能(例如,回答問題或生成查詢)。一個提示通常包括指令、一些所需行為的演示,以及一個要回答的輸入查詢。
????????如圖 2 所示,LM 不僅生成: (i) 對輸入問題的最終答案(在 PREDICT 階段),而且還生成 (ii) 中間的“跳轉”查詢,以找到對輸入問題有用的信息(SEARCH)以及 (iii) 示例查詢,展示如何為訓練集中的問題生成查詢(DEMONSTRATE)。這種對 LM 的系統使用是 DSP 程序的一個特點。

????????檢索模型 DSP 程序還調用一個凍結的檢索模型 RM,以檢索對于給定查詢最“相關”的 top-k 文本序列。RM 可以索引大量預定義的段落以實現可擴展的搜索,并且可以在不改變檢索參數的情況下更新這些段落。RM 接受自由形式的文本輸入,并專門用于估計文本序列與查詢的相關性(或相似性)。
????????如圖 2 所示,RM 負責檢索(i)LM 生成的每個查詢的段落(在 SEARCH 階段),以及(ii)用于演示中的段落(DEMONSTRATE)。在后一種情況下,RM 的貢獻較少在于直接為輸入問題提供相關信息,而更多在于幫助 LM 適應領域和任務。
????????盡管在此示例中未使用,但 RM 在 DSP 中還用于諸如從任務訓練數據檢索“最近鄰”演示(DEMONSTRATE)和從 LM 選擇基于事實生成的序列(PREDICT)等功能。

2.2?數據類型和控制流

????????我們使用 Python 實現了 DSP 框架。本節介紹了框架提供的基本數據類型和可組合函數。我們使用示例代碼片段來說明這些例子,并傳達了能夠在簡單程序中表達 LM 和 RM 之間復雜交互的力量。

????????示例數據類型為了執行任務,DSP 程序操作一個或多個 Example 數據類型的實例。一個 Example 類似于具有多個字段的 Python 字典。程序通常會被提供幾個訓練示例。下面的代碼片段展示了這對于多跳問答的情況。

????????這段代碼包含兩個標記的示例,每個示例都有一個多跳問題(例如,“Akeem Ellis 在 2017 年在哪個城市打球?”)及其簡短答案(“Ellesmere Port”)。在 Example 中允許任意鍵和值,盡管典型的值是字符串或字符串列表。

????????在此任務中,我們不太可能找到一個單獨的段落能提供任何問題的答案。例如,第一個訓練示例可能只能通過首先回答誰發現了帕洛馬(“埃德溫·哈勃”)的問題,然后使用不同的證據段落來解答哈勃的出生日期問題。我們通常假設人類標記的訓練數據不包括對中間轉換(例如,單個跳轉的查詢)的標簽,這些轉換對于執行這些步驟會有用,因此 DSP 程序的任務是通過上下文學習發現這些策略。

????????DSP 程序以下代碼片段是一個完整的程序,用于解決類似于圖 1 中的多跳問題,并得到上述訓練示例的幫助。

????????程序接受輸入(此處為一個問題)并輸出系統輸出(其簡短答案)。它首先為輸入問題創建一個 Example,并將訓練字段分配給之前的代碼片段中的訓練集。程序調用和組合 DSP 基本操作(即內置函數)來構建定義程序的 DEMONSTRATE、SEARCH 和 PREDICT 轉換。

????????轉換 轉換是一個函數,它接受一個 Example 作為輸入并返回一個 Example,在其中填充新的字段(或修改現有字段)。這個程序調用了三個由開發者定義的轉換,即multihop_demonstrate、multihop_search 和 multihop_predict。轉換本身也可以調用其他轉換,它們與標準深度神經網絡(DNN)編程框架(如 PyTorch)中的層類似,不同的是它們在彼此之間傳遞文本數據而不是張量,并不涉及反向傳播。

????????我們將轉換根據它們在 DEMONSTRATE、SEARCH 和 PREDICT 階段的行為(或目的)進行分類。盡管如此,DSP 并不強制執行這種分類,允許我們定義可能融合這些階段的函數。我們將在下一節討論這三個階段。

2.3 展示

????????已知在 LM 的提示中包含所需行為的示例通常會導致更好的性能(Brown 等人,2020 年)。在 DSP 中,演示是一個經過準備的訓練示例,用于展示 LM 的特定所需行為。DEMONSTRATE 轉換接受類型為 Example 的輸入 x,并為 x.demos 準備一個演示列表,通常通過從 x.train 中的訓練示例中選擇子集并引導新的字段來實現。

????????引導演示 訓練集中的示例通常包含任務的輸入文本和目標輸出。DEMONSTRATE 階段可以通過編程方式引導注釋來增強訓練示例。在我們的“多跳”示例中,演示展示了三個基于 LM 的轉換:
(i)如何分解輸入問題以收集回答它的信息(即第一跳檢索),
(ii)如何使用之前“跳”中收集的信息來提出后續問題,
(iii)如何使用收集到的信息來回答復雜問題。

????????類似于一個專業的地圖,annotate 原始函數接受一個用戶定義的轉換函數 fn 并將其應用于一個訓練示例列表。每當 fn 返回一個示例(而不是 None)時,annotate 會緩存中間預測(即生成的查詢和檢索到的段落)。這些預測作為管道轉換的成功演示。在簡單使用中,fn 可能嘗試一次或多次回答示例的“零樣本”問題。這通常是通過調用程序的 SEARCH 和 PREDICT 階段來實現的。當產生一個答案時,如果 fn 認為它是正確的,它會返回一個填充好的示例,其中包含中間預測。

? ? ? ? 案例學習 下面的代碼片段定義了multihop_demo函數(在multihop_program的第3行中調用),并演示了annotate的用法。

????????在第 10 行,multihop_demonstrate 調用了 annotate,它通過緩存 attempt_example 的注釋來引導訓練示例中缺失的字段。轉換 attempt_example 接收一個訓練示例 d 并嘗試以零樣本的方式回答它:它創建了一個 d 的副本,其中沒有演示(第 4 行;即零樣本)并調用多跳搜索和預測管道(第 5 和 6 行)。每個轉換都會返回一個帶有額外字段填充的 d 的更新版本。如果管道回答正確(第 7 行),則返回更新后的 d。

????????圖 2 展示了這種行為。DEMONSTRATE 轉換一個訓練問題-答案對到一個完全填充的演示中,包括 hop1 和 hop2(即多跳搜索的查詢)以及 psg1 和 psg2 字段。當 LM 后來被調用以執行某個轉換,例如在 SEARCH 階段生成一個“第二次跳轉”查詢時,psg1 字段作為上下文,而 hop2 字段則作為這個特定訓練示例的標簽。

????????討論 這個簡單的案例研究展示了 DSP 抽象中組合的力量。因為管道是一個定義良好的程序,其中轉換通過附加在示例上的文本進行通信,一個簡單的映射和過濾策略可以利用 LM 和 RM 從最終任務的標簽來引導注釋整個管道。這是一個可擴展的策略,但即使在它的最簡單形式中,它也推廣了 Zelikman 等人(2022 年)、Wei 等人(2022 年)、Zhang 等人(2022 年)和 Huang 等人(2022 年)最近探索的方法,在這些方法中,LM 為單個提示自我生成思維鏈的理性。

????????通過引導管道,DEMONSTRATE 使得在 SEARCH 和 PREDICT 中探索復雜策略變得容易,而不必為每個轉換編寫示例。這包括在傳統檢索增強 NLP 中難以探索的策略,因為需要自定義注釋。例如,Khattab 等人(2021a)介紹了一個用于多跳推理的管道,它使用弱監督進行訓練,擴展了 Lee 等人(2019 年)和 Khattab 等人(2021b)的工作。在其中,需要檢索的目標 3 或 4 個段落必須被標記,但系統自動發現最佳的“跳轉”順序。

????????相比之下,DSP 允許我們構建復雜管道,而無需中間步驟的標簽,因為我們能夠將小轉換組合成程序。如果 LM 和 RM 能夠“零樣本”(即無需演示)準確處理這些轉換,至少在一個或兩個示例上,這些示例可以使用最終任務的標簽發現并用作演示。

????????用我們之前與 PyTorch 等深度神經網絡框架的類比來說,DEMONSTRATE 旨在以可擴展的方式替換反向傳播的功能,通過模擬程序的行為(對應于“前向”傳遞)并從錯誤中程序化學習。這樣做時,DEMONSTRATE 在凍結模型和僅使用最終任務標簽的情況下引入了高度的模塊性。特別是,無需手動標注中間轉換,開發者可以更換訓練領域、更新訓練示例或修改程序的策略,并使用 annotate 來自動填充演示的所有中間字段。

????????選擇演示?示例并非總是可以將所有訓練示例放入 LM 的上下文窗口中。DSP 提供三個用于選擇訓練示例子集的原語,即 sample、knn 和 crossval。

????????作為基線選擇,可以使用 sample 原始函數隨機從 train 中抽取 k 個演示示例,這是 Brown 等人(2020 年)以及后續許多工作的做法。我們還可以利用 RM 的表示,從訓練集中選擇與輸入文本最接近的 k 個最近鄰,這是 Liu 等人(2021 年)探索的策略。另一種策略是對多個抽樣示例集應用交叉驗證,以選擇表現最佳的示例集(Perez 等人,2021 年)。例如,給定 jtrainj = 100 個訓練示例,crossval 會選擇 n 個包含 k = 5 個示例的子集,并返回與剩余 95 個示例上轉換evaluate 表現最佳的子集。

????????組合與擴展 通過操縱演示和更高階的轉換,這些簡單的選擇和引導原始函數可以組合成更大的新策略。如果訓練集非常大(例如,jtrainj = 100; 000),我們可以使用 knn 找到最接近的 k = 16 個示例,并只對這些示例進行注釋,從而實現一個實時增量學習的系統。如果訓練集適中(例如,jtrainj = 1000),我們可以進行交叉驗證,并在每個訓練示例上緩存它評估的所有提示的性能。在測試時,我們可以使用 knn 找到與測試輸入最相似的 k = 50 個示例,并選擇在這些 k 個示例上表現最佳的提示,產生一個適應性系統,該系統根據其管道在不同類型示例上的質量進行調整。

2.4 搜索

????????SEARCH 階段收集段落來支持由 LM 執行的轉換。我們假設有一個大型知識語料庫——例如,網頁、維基百科或 arXiv 的片段——被劃分為文本段落。向 LM 提供段落有助于提供事實性響應,允許在不重新訓練的情況下更新知識庫,并提出了一個透明度契約:當有疑問時,用戶可以檢查系統是否忠實地使用了一個可靠來源來做出預測。

????????在最簡單的場景中,SEARCH 可以直接查詢 RM,請求與輸入問題匹配的前 k 個段落(來自預定義的索引)。這種 SEARCH 的基本實現模擬了大多數開放域問答系統中檢索的實現,它們實現了一個“檢索-然后-閱讀”的流水線,如 Lee 等人(2019 年)、Khattab 等人(2021b 年)、Lazaridou 等人(2022 年)以及許多其他人。

????????SEARCH 策略 在許多場景中,任務的復雜性要求更復雜的 SEARCH 策略,以使檢索模型(RM)能夠找到相關的段落。我們正在運行的示例(圖 2)就是這樣一個場景,我們懷疑示例很可能需要特定的多跳推理。其他設置,例如,提出對話挑戰,在這種情況下,用戶表達的信息需求只能通過考慮對話中的前幾輪來解決,或者需要更廣泛的規劃(Zhong 等人,2022 年)。

????????在檢索增強 NLP 的文獻中,多跳搜索(Xiong 等人,2020 年;Khattab 等人,2021a 年)和對話搜索(Del Tredici 等人,2021 年;Raposo 等人,2022 年)流水線受到了廣泛關注。這些系統通常需要經過許多手工標記的查詢“重寫”(Anantha 等人,2020 年)、“分解”(Geva 等人,2021 年;Min 等人,2019 年)或目標跳轉(Yang 等人,2018 年;Jiang 等人,2020 年)的微調。在 DEMONSTRATE 提供的自動注釋的支持下,SEARCH 階段允許我們模擬許多這樣的策略以及許多其他策略,這些策略涉及到在 RM 和 LM 之間傳遞查詢、段落和演示。更重要的是,SEARCH 促進了我們對于高級策略的愿景,即 LM 和 RM 合作逐步規劃研究路徑,其中 RM 收集信息,而 LM 確定下一步。

????????案例研究 讓我們在我們的多跳示例基礎上進行更深入的研究。我們可以定義 multihop_search_v2(在我們的核心程序中的第 4 行),這是圖 2 中 SEARCH 轉換的一個略微更高級的版本。這個轉換模擬了像 IRRR(Qi 等人,2020 年)這樣的微調檢索增強系統的迭代檢索組件,后者在每次跳轉時閱讀檢索到的段落并生成一個搜索查詢(或一個停止跳轉的條件),以及像 Baleen(Khattab 等人,2021a 年)這樣的系統,后者在每次跳轉時總結許多段落的信息,以包括在后續跳轉中。

????????在 multihop_search_v2 中,第 7 行調用了 generate 原始函數,該函數調用了 LM 生成每個檢索跳轉的查詢。LM 基于一個使用 hop_template 模板準備的提示進行條件化。(我們將在第 2.5 節討論提示模板和 generate 原始函數。)在這里,這個模板可能被設計為生成一個具有以下格式的提示(例如,對于第二次跳轉)。

????????如圖所示,LM 被指示閱讀早期跳轉中檢索到的上下文和一個復雜的問題。然后它被提示編寫:(i)提供的上下文的摘要;(ii)一個搜索查詢,用于收集回答那個問題的信息。生成的文本將被提取并分配給 multihop_search_v2 中的 summary 和 query 變量(第 7 行)。在第 10 行,如果查詢是“N/A”,則終止跳轉。否則,在第 12 行,使用查詢檢索 k = 5 個段落,并在第 13 行將后續跳轉(或 PREDICT)的上下文分配給變量,該變量包括所有先前跳轉的摘要以及到目前為止檢索到的最終跳轉中的段落。

????????與自問技術的比較 這可能很有啟發性,我們將這種多跳 DSP 程序與最近的“自問”(Press 等人,2022 年)提示技術進行對比,這在第 3 節中進行了比較。自問可以被看作是 DSP 的 SEARCH 階段的簡單實例。在其中,LM 提出一個或多個“后續問題”,這些問題被攔截并發送到搜索引擎。搜索引擎的答案被連接到提示中,并用于回答問題。這本質上是對 IRRR(Qi 等人,2020 年)的簡化模擬。

????????作為一般框架,DSP 可以表達自問等想法,以及我們在本節中討論的許多其他更復雜的管道。更重要的是,DSP 提供了一系列固有優勢,這些優勢導致顯著的實證收益:比自問高出 80%–290%。例如,DSP 程序具有深刻的模塊性,這意味著 DSP 程序將注釋并構建自己的演示。因此,它們可以在不標注任何中間轉換(例如,生成的查詢)的情況下開發。此外,DSP 構建的 LM 提示會自動更新,以與提供的訓練數據和檢索語料庫保持一致。相比之下,像自問這樣的方法依賴于手工編寫且硬編碼示例的提示。

????????此外,DSP 將控制流分配給一個顯式的程序,并促進了調用 LM(或 RM)進行小轉換的設計模式。這使我們能夠構建專門用于生成一個或多個檢索查詢、每個跳轉總結多個段落和回答問題的步驟。這些步驟比自問提示的步驟更簡單,但我們的多跳 DSP 程序故意組合它們來構建更豐富的管道,因此更加可靠。相比之下,自問將控制流委派給 LM 完成,在提示本身內保持狀態并攔截后續問題以執行搜索。我們發現這種范式導致了“自我分散”問題(第 3.5 節),而 DSP 程序可以避免。

????????融合檢索結果 為了提高召回率和健壯性,我們還可以融合多個生成查詢的檢索結果。融合在信息檢索領域有悠久的歷史(Fox & Shaw, 1994; Xue & Croft, 2013; Kurland & Culpepper, 2018),并且最近 Gao 等人(2022 年)探索了使用多個查詢按順序處理以追溯歸因于 LM 生成的文本。受這些工作的啟發,我們在 DSP 中包含了一個 fused_retrieval 原始函數,以提供一個與凍結檢索器交互的通用機制。它接受一個可選的融合函數,該函數將多個檢索列表映射為一個。默認情況下,DSP 使用 CombSUM(Fox & Shaw, 1994)的一個變體,為每個段落分配其在檢索列表中的概率之和。

????????為了說明這一點,下面的修改為轉換multihop_search_v2生成n = 10個查詢。

????????組合與擴展 為了說明一個簡單的組合,我們可以通過將一個查詢重寫步驟與多跳轉換結合起來,為聊天機器人裝備進行對話多跳搜索的能力,如下所示。

????????類似的方法也可以用于糾正拼寫錯誤或實現偽相關反饋(Cao 等人,2008 年;Wang 等人,2022a 年),其中檢索到的段落用于告知一個更好的搜索查詢,盡管據我們所知,這還沒有嘗試過與預訓練的 LM 結合使用。

2.5?預測

????????PREDICT 階段使用演示(例如,在 x.demos)和段落(例如,在 x.context)來生成系統輸出。PREDICT 挑戰可靠地解決下游任務,這整合了上下文學習領域的許多工作。在 DSP 中,它還具有更專業的功能,即系統地匯總大量演示、段落和候選預測的信息。

????????生成候選項 通常,PREDICT 需要為最終任務生成一個或多個候選預測。為此,PREDICT 的基本原始函數是 generate,它接受一個模板和一個示例,并通過封裝(currying)查詢 LM 以產生一個或多個完成項,如第 2.4 節中之前所探索的。與此階段使用 RM 相對應的原始函數是 rank,它接受一個查詢和多個段落,并返回它們的關聯性評分。

????????模板是一個可以產生提示的對象,也就是說,將一個示例映射到一個字符串,并從補全中提取字段。例如,我們可以將包含問題和檢索段落的示例x映射到以下提示符:

????????如上圖所示,LM將被要求生成思想鏈原理(CoT;Wei et al . 2022;小島等人2022)和答案,生成的文本將被提取回每個完成的基本原理和答案鍵。

????????對LM的每次調用都可以對多個候選預測進行采樣。選擇“最佳”預測是解碼工作的主題(Wiher等人,2022;Li et al, 2022),但凍結的通用LM可能不支持自定義解碼修改。在這些限制條件下,我們提出了幾種高級策略,用于通過LM和RM在DSP中選擇預測和聚合信息。

????????在多個候選項中,我們可以簡單地提取最受歡迎的預測。當使用 CoT 到達答案時,這就是 Wang 等人(2022c)的自一致性方法,它尋求識別多個不同的推理到達的預測。

????????DSP 在兩個方面推廣了這一點。首先,我們可以在整個程序中采樣多個“轉換管道”(PoT),而不是在一個轉換中本地使用“思維鏈”(CoT)。這些鏈甚至可以調用程序中的不同路徑,如下所示。

????????在上面的代碼片段中,第 10 行調用了 branch 原始函數,該函數以高溫度(例如,t = 0:7)采樣 n 個不同的 PoT,并積累它們的中間和最終預測。在這個例子中,我們的管道調用了 multihop_search_v2(第 2.4 節),它根據生成的問題應用一個可變的檢索跳數,然后再進行 PREDICT。也就是說,PoT_program 可能會在分支中調用程序中的多個不同路徑(即每個路徑具有不同的多跳查詢和跳數)。然后它選擇多數答案。

????????DSP 以另一種方式推廣了自一致性。當我們采樣我們的 CoTs 或 PoTs 提供多個候選項時,我們可以選擇前 k 個(例如,前 4 個)預測,然后直接比較它們。例如,我們可以提示 LM 比較這些選擇作為多項選擇題(MCQ)的候選項,這是一個 DEMONSTRATE 可以自動準備的轉換。這實際上模擬了 Levine 等人(2022 年)的 LM 遞歸,盡管與他們的方法不同,它不需要大量訓練數據或更新任何(提示調優)權重。一個這樣的實現可以在下面的 openqa_predict 中看到。

????????作為另一種比較方法,我們可以通過 rank 調用 RM 來找到最基于檢索上下文的預測(即與檢索到的段落的串聯最相似),或者,如果 RM 能夠為完成項評分(Krishna 等人,2022 年),那么可以直接選擇給定提示下評分最高的預測。

????????匯總信息當只選擇少數演示或段落時,我們可以簡單地將它們全部連接到提示中。例如,GPT-3.5 text-davinci-002 有一個 4097 個令牌的上下文窗口,我們發現這個窗口對于容納幾個(例如,3-5 個)演示來說相當大,每個演示都包含自己的段落和推理。

????????處理更多演示或段落時,我們可以并行分支來處理單個子集的段落或演示,然后使用前面介紹的評分方法之一匯總單個答案。事實上,Lewis 等人(2020 年)和 Lazaridou 等人(2022 年)探索了邊緣化作為跨段落組合得分的方法,Le 等人(2022 年)則將提示跨演示進行集成,這可以用這種方式表達。

????????另一種匯總策略是依次在段落之間累積信息,而不是獨立地。這就是我們的多跳方法(第 2.4 節)實際工作的方式。這種策略也被 Gao 等人(2022 年)最近用于追溯歸因于 LM 生成的文本到引證。他們生成許多查詢,但不是融合(第 2.4 節),而是對每個查詢運行其管道,并使用其輸出來修改后續查詢的輸入。

3 評估

????????我們現在考慮如何為三個不同的知識密集型 NLP 任務實現 DSP 程序:開放域問答(QA)、多跳問答和對話問答。所有這些任務都是“開放域”的,這意味著系統被給予一個簡短的問題或參與多輪對話,而沒有被授予訪問回答這些問題的上下文。

????????我們為每個任務構建并評估了在第 2 節中探索的函數的直觀組合。我們展示出,盡管開發努力較低,但生成的 DSP 程序展現出強大的質量,并且在上下文學習中超過了基線和帶有上下文學習的標準檢索-閱讀流水線。

3.1 評估方法

????????在本報告中,我們為每個考慮的任務考慮了一個開發數據集,即開放域版本的 SQuAD(Rajpurkar 等人,2016 年;Lee 等人,2019 年)、多跳 HotPotQA(Yang 等人,2018 年)數據集在開放域“fullwiki”設置中,以及用于開發 DSP 抽象的對話問答 QReCC(Anantha 等人,2020 年;Vakulenko 等人,2022 年)數據集。我們在所有三個數據集上報告驗證集的準確率,并在第 3.5 節中詳細討論。

????????除非另有說明,系統可以訪問 16-shot 訓練示例,即每個 DSP 程序可以使用(最多)16 個問題——或者對話,如果適用——從各自的訓練集中隨機抽取。我們將驗證集和測試集下采樣到 1000 個問題(或者在適用的情況下 400 個對話),并在五個種子中報告平均質量,每個種子固定一個單一的 k-shot 訓練集示例。為了控制語言模型 API 的支出預算,每個種子處理評估示例的五分之一(例如,每個種子 200 個問題,總共 1000 個唯一問題)。

????????我們還預留了測試數據集(例如,OpenNaturalQuestions;Kwiatkowski 等人,2019 年)和測試任務(例如,FEVER 中的主張驗證;Thorne 等人,2018 年),我們只用這些數據集和任務來評估預定義的 DSP 程序,而不是用于開發。我們將在報告的下一個版本中包括這些結果。

3.2 預訓練模塊

????????RM 我們使用 ColBERTv2(Santhanam 等人,2022b),這是一個基于晚期交互的先進檢索器(Khattab & Zaharia,2020 年)。我們選擇 ColBERTv2 是因為它的零樣本搜索質量和高效的搜索(Santhanam 等人,2022a)。然而,我們的 DSP 程序對于檢索器如何表示示例或評分段落是無關緊要的,所以基本上可以使用任何檢索器。

????????此外,通過將檢索作為一個一等構造,DSP 允許我們隨著時間的推移改變或更新搜索索引。我們在實驗中通過將每個數據集與 Chen 等人(2017 年)的 2016 年 12 月維基百科數據、Yang 等人(2018 年)的 2017 年 11 月維基百科“摘要”數據以及 Karpukhin 等人(2020 年)的 2018 年 12 月維基百科數據進行對齊來模擬這一點。

????????LM 我們使用 GPT-3.5(text-davinci-002;Brown 等人,2020 年;Ouyang 等人,2022 年)語言模型。除非另有說明,我們在生成 n = 1 的預測時使用貪婪解碼。當 n > 1 時,我們使用溫度 t = 0:7 進行采樣,就像相關工作(Wang 等人,2022c 年)一樣。

3.3 基線

????????基線 LM? 這些基線代表了 Brown 等人(2020 年)使用的少量示例上下文學習范式。開放域 QA 和多跳 QA 的基線從訓練集中隨機采樣 16 個演示(即每個程序在評估中可用的所有示例),并不對這些演示進行增強。同樣,對話 QA 的基線也采樣了四個對話。基線 LM 不會搜索與輸入查詢相關的段落。

????????檢索-閱讀? “檢索-閱讀”基線使用 RM 在提交提示給 LM 之前,為每個示例提供可能相關的段落支持。這模仿了用于最新開放域問答系統的流水線(Khattab 等人,2021b;Izacard & Grave,2020;Hofst?tter 等人,2022)。在對話 QA 中,我們將第一輪和最終問題連接起來,我們發現這種方法比簡單地使用最終問題要好得多。對于多跳 QA,我們為每個問題檢索并連接兩個段落。

????????自問 我們也與自問(Press 等人,2022 年)進行了比較,這是一種同時期的流水線,可以被視為 DSP 的 SEARCH 階段的特定實例,后面跟著一個簡單的 PREDICT 步驟。為了與我們的方法直接比較,我們修改了自問的控制流,使其查詢我們 DSP 實驗中使用的相同 ColBERTv2 索引,而不是 Google 搜索。我們評估了兩種自問配置。第一種使用原始自問提示模板,其中包含四個手工寫的演示。在第二種配置中,我們修改了提示模板,應用了我們發現對 HotPotQA 有用的幾個變化。

3.4 提出的 DSP 程序

????????我們基于第 2 節中提出的轉換。我們為所有三個任務構建的程序具有以下結構,以開放域 QA 為例進行說明。

????????例外的是,對話 QA 程序 convqa_program 接受輪次(即一系列字符串,代表對話歷史),而不是單個問題。除非另有說明,我們的程序在 DEMONSTRATE 階段默認使用貪婪解碼。

????????對于 SEARCH,我們的開放域 QA 程序直接使用問題來檢索 k = 7 個段落,并將這些段落與 CoT 連接到我們的 QA 提示中。對于 PREDICT,它生成 n = 20 個推理鏈,并使用自一致性(SC;Wang 等人,2022c)來選擇其最終預測。對于 DEMONSTRATE,我們的開放域 QA 程序使用以下方法,為了演示而略有簡化。在這個方法中,向 annotate 請求傳遞的參數 k = 3,只注釋三個演示,這些演示將然后用于提示中。

????????我們的多跳程序在 DEMONSTRATE 和 PREDICT 方面采用了非常相似的方法。對于 SEARCH,它使用了第 2.4 節中描述的方法,并進行以下調整。它使用跨 n = 10 個查詢每跳的結果融合,并在 n 個預測中使用對應于最大平均對數概率的摘要。對于 HotPotQA,它使用固定的跳數,即兩跳。在每個提示(即每個跳和 QA)中,它將所有前跳(即從 hop 1 開始)的摘要連接起來,并總共使用 k = 5 個段落,這些段落分布在跳之間(即從第一個跳使用五個段落或從第一個跳使用兩個段落,從第二個跳使用三個段落)。

????????對于對話 QA,我們使用一個簡單的 PREDICT,它使用貪婪解碼生成一個響應,該響應取決于所有先前對話的輪次和五個檢索到的段落。對于 SEARCH,我們的對話 QA 流水線生成 n = 10 個重寫的查詢(并也使用簡單的查詢作為檢索和閱讀基線;第 3.3 節),并將它們融合,就像在第 2.4 節中描述的那樣。我們實現 DEMONSTRATE 與 openqa_demonstrate 類似,但只采樣四個示例(即四個對話輪次;而不是開放域 QA 中的 16 個問題)來演示任務,以用于更高階的轉換 convqa_attempt,該轉換傳遞給 annotate(由于簡潔,未在此處展示)。

3.5 開發的數據集和結果

????????Open-SQuAD 我們在 Chen 等人(2017 年)處理的維基百科 2016 語料庫上進行開放域版本的 SQuAD,如 Khattab 等人(2021b 年)所處理。我們使用與 Karpukhin 等人(2020 年)和 Khattab 等人(2021b 年)相同的訓練/驗證/測試劃分。

????????表 1 報告了答案的 EM 和 F1。任務感知的 DSP 程序實現了 36.6% 的 EM,比基線 LM 提高了 126% 的 EM 相對收益。這表明將 LM 的預測建立在檢索上非常重要,并且表明像 ColBERTv2 這樣的最新檢索器具有實現這一目標的能力。提出的 DSP 程序在 EM 中相對收益提高了 8%,在 F1 中相對收益提高了 6%,超過了檢索-然后-閱讀流水線,這突出了通過我們使用自一致性方式聚合多個檢索到的段落信息可以獲得非平凡的收益。

表 1. 開發結果比較,包括一個任務感知的 DSP 程序與基線 LM、檢索-然后-閱讀 LM 以及近期和同時代的上下文學習方法(帶檢索和不帶檢索)。我們所有的運行都使用了 GPT-3.5,檢索基礎的行使用了 ColBERTv2。標記為 { } 的結果收集自截至 2022 年 12 月中旬的相關工作,并在正文中歸因于各自的來源。正如我們在正文中所討論的,標記的結果通常不是直接的比較,因為它們跨越了各種評估設置。盡管如此,我們在這里報告它們作為定性參考點。

????????這些上下文學習結果與許多流行的微調系統相競爭。例如,在 Open-SQuAD 測試集上,DPR 實現了 29.8% 的 EM,遠低于我們的 16-shot DSP 程序。在 Open-SQuAD 開發集上,當調用五個檢索到的段落時,強大的 Fusion-in-Decoder(Izacard & Grave,2020)“基礎”方法實現了大約 36%(即與我們的系統質量非常相似)。盡管如此,他們的系統在默認設置下閱讀 100 個段落時,在這個評估中達到了 48% 的 EM。這可能表明,如果 PREDICT 階段被調整為聚合更多信息,我們的 DSP 程序也可能實現類似的收益。

????????為了比較,我們還評估了自問流水線,其實現了 9.3% 的 EM,這表明其固定的流水線在其默認的多跳設置之外是無效的。研究其幾個錯誤示例揭示了它經常以不相關的方式分解問題并回答這些問題。我們將 LM 的這種行為稱為“自我分散”,并認為這增加了對我們 DSP 中設計決策的支持。為了說明自我分散,當自問被提示“The Kidnapping of Edgardo Mortara 何時發生?”時,它問道“The Kidnapping of Edgardo Mortara 是什么?”然后問它何時出版,這是一個不相關的問題。因此,自問回答“1997”,而不是 The Kidnapping of Edgardo Mortara 發生的時間(1858)。

????????作為參考,表 1 還報告了 Si 等人(2022 年)使用 code-davinci-002 的同時上下文學習結果(No-retrieval LM SoTA),他們在不檢索的情況下實現了 20.2% 的 EM,在檢索的情況下實現了 34.0% 的 EM,盡管是在 SQuAD 數據的另一個樣本和劃分上。總體而言,他們的方法與我們實現的基線(基線 LM 和檢索-然后-閱讀)非常相似,盡管他們的檢索增強方法檢索(并將 10 個段落拼接到提示中)了維基百科的數據。

????????HotPotQA 我們使用 HotPotQA 的開放域“fullwiki”設置,使用其官方的 2017 年“摘要”語料庫。HotPotQA 測試集是隱藏的,所以我們保留官方的驗證集用于我們的測試。我們將訓練集劃分為 90%/10% 的訓練/驗證劃分。在訓練(以及因此的驗證)劃分中,我們只保留原始數據集中標記為“hard”的示例,這與官方驗證和測試集的指定相匹配。

????????我們在表 1 中報告了最終答案的 EM 和 F1。在 HotPotQA 上,任務感知的 DSP 程序在所有基線和現有工作中表現最佳,EM 分別比基線 LM、檢索-然后-閱讀基線和自問流水線高出 82%、39% 和 80%。這突出了構建更復雜的程序以協調 LM 和 RM 的 SEARCH 步驟的有效性。
????????這些結果可以與同期論文中對 HotPotQA 的評估進行比較。我們首先與非檢索方法進行比較,盡管我們的比較必須保持謹慎,因為評估方法存在差異。Si 等人(2022 年)使用 CoT 提示實現了 25.2% 的 EM。使用 PaLM-62B 的“背誦-然后-回答”技術,Sun 等人(2022 年)實現了26.5% 的 EM。當為 PaLM-540B 應用自一致性提示時,Wang 等人(2022b 年)實現了 33.8% 的 EM 和 44.6 F1。接下來,我們與同時代的基于檢索的方法進行比較:Yao 等人(2022 年)使用能夠使用 Wikipedia API 進行搜索的系統實現了 35.1% 的 EM。所有這些方法都遠遠落后于我們的任務感知的 DSP 程序,該程序實現了 51.4% 的 EM。

????????QReCC? 我們在 Wikipedia 2018 的開放域設置中使用 QReCC(Anantha 等人,2020 年)。QReCC 沒有官方的開發集,所以我們從訓練集中劃分為 90%/10% 的訓練/驗證劃分。對于每個對話中的第一個問題,我們使用重寫的查詢作為原始查詢,因為原始查詢通常假設訪問了真實文檔。我們還從 QReCC 中過濾低質量的示例。

????????我們以自回歸方式進行 QReCC 對話。對于特定對話的第 t > 1 輪,系統看到它對之前對話輪次的響應(即不是真實響應)。我們報告新穎-F1 指標(nF1;Paranjape 等人,2022 年),該指標計算系統響應與真實響應之間的 F1 重疊,同時折扣常見停用詞和問題(或之前的問題)中出現的術語。結果在表 1 中顯示,并遵循與 SQuAD 和 HotPotQA 相同的一般模式。

4 結論

????????長期以來,AI 中構建模型的主導范式一直圍繞著張量表示的乘積,在深度學習時代,這導致了高度模塊化(逐層)的設計,這使得快速開發和廣泛探索成為可能。然而,這些設計范式需要廣泛的領域專業知識,即使是專家在將不同的預訓練組件組合成更大的系統時也面臨重大挑戰。上下文學習的承諾是,我們可以僅使用自然語言作為向系統提供指令的媒介來構建復雜的系統,并且,正如我們所論證的,允許組件之間相互通信。在這種新范式中,構建塊是預訓練模型,核心操作是自然語言指令和操作自然語言文本。如果我們能夠實現這一潛力,那么我們就可以擴大參與 AI 系統開發的人數,快速為新的領域原型系統,并最大化專業預訓練組件的價值。
????????在本論文中,我們介紹了用于檢索增強式上下文學習的 DEMONSTRATE–SEARCH–PREDICT (DSP) 框架。DSP 包含了一系列簡單、可組合的函數,用于實現上下文學習系統作為深思熟慮的程序——而不是端任務提示——以解決知識密集型任務。我們以 Python 庫的形式實現了 DSP 并使用它來編寫 Open-SQuAD、HotPotQA 和 QReCC 的程序。這些程序相對于以前的上下文學習方法取得了顯著的進步。然而,超越任何特定的性能數字,我們主張 DSP 的核心貢獻在于幫助揭示上下文學習在一般概念上的廣闊可能性空間。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42634.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ARM/Linux嵌入式面經(十一):地平線嵌入式實習

地平線嵌入式實習面經 1.自我介紹 等著,在給大哥們準備了。 2.spi與iic協議可以連接多個設備嗎?最多多少個?通訊時序。 這是幾個問題,在回答的時候。不要一問就開口,花幾秒鐘沉吟思考整理一下自己的思路。 這個問題問了幾個點?每個點的回答步驟。 是我的話,我會采用以…

# Sharding-JDBC 從入門到精通(9)- 綜合案例(二)添加商品

Sharding-JDBC 從入門到精通(9)- 綜合案例(二)添加商品 一、Sharding-JDBC 綜合案例-添加商品-dao 1、在 shopping 子工程(子模塊)中,創建 dao 接口類 ProductDao.java /*** dbsharding\sh…

基于深度學習LightWeight的人體姿態之行為識別系統源碼

一. LightWeight概述 light weight openpose是openpose的簡化版本,使用了openpose的大體流程。 Light weight openpose和openpose的區別是: a 前者使用的是Mobilenet V1(到conv5_5),后者使用的是Vgg19(前10…

哈希表——C語言

哈希表(Hash Table)是一種高效的數據結構,能夠在平均情況下實現常數時間的查找、插入和刪除操作。 哈希表的核心是哈希函數,哈希函數是一個將輸入數據(通常稱為“鍵”或“key”)轉換為固定長度的整數的函數…

Efficient Contrastive Learning for Fast and Accurate Inference on Graphs

發表于:ICML24 推薦指數: #paper/??? 創新點一顆星,證明三顆星(證明的不錯,值得借鑒,但是思路只能說還行吧) 如圖, 本文采取的創新點就是MLP用原始節點,GCN用鄰居節點的對比學習.這樣,可以加快運算速度 L E C L ? 1 ∣ V ∣ ∑ v ∈ V 1 ∣ N ( v ) ∣ ∑ u ∈ N ( v )…

一篇文章Scala語言入門

Scala是一種現代編程語言,它結合了面向對象編程和函數式編程的特性,使得編寫簡潔、可擴展和高效的代碼成為可能。 1. 什么是Scala? Scala(Scalable Language)是一種面向對象和函數式編程語言。它運行在JVM&#xff0…

k8s 部署 springboot 項目內存持續增長問題分析解決

寫在前面 工作中遇到,請教公司前輩解決,簡單整理記憶博文內容涉及一次 GC 問題的分析以及解決理解不足小伙伴幫忙指正 😃,生活加油 99%的焦慮都來自于虛度時間和沒有好好做事,所以唯一的解決辦法就是行動起來,認真做完…

語音識別FBank特征提取學習筆記

語音識別就是把一段語音信號轉換成對應的文本信息,這一過程包括四個大的模塊,分別是:特征提取、聲學模型、語言模型、字典與解碼。 本篇就來梳理一下特征提取模塊的實現思路和方法。 常用的語音特征有: 梅爾頻率倒譜系數&#x…

學生管理系統(通過順序表,獲取連續堆區空間實現)

將學生的信息,以順序表的方式存儲(堆區),并且實現封裝函數 : 1】順序表的創建, 2】判滿、 3】判空、 4】往順序表里增加學生信息、 5】遍歷學生信息 6】任意位置插入學生信息 7】任意位置刪除學生信…

0301STM32GPIO外設輸出

STM32GPIO外設輸出 STM32內部的GPIO外設GPIO簡介基本結構GPIO位結構輸入部分:輸出部分: GPIO八種工作模式浮空/上拉/下拉輸入模擬輸入開漏/推挽輸出復用開漏/推挽輸出 手冊寄存器描述GPIO功能描述外設的GPIO配置GPIO寄存器描述端口輸入數據寄存器端口輸出…

QT入門筆記-自定義控件封裝 30

具體代碼如下: QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 …

并查集(還有反集也在)

一.定義 定義: 并查集是一種樹型的數據結構,用于處理一些不相交集合的合并及查詢問題(即所謂的并、查)。比如說,我們可以用并查集來判斷一個森林中有幾棵樹、某個節點是否屬于某棵樹等。 主要構成: 并查集…

PHP-實例-文件上傳

1 需求 2 basename 在 PHP 中,basename() 函數用于返回路徑中的文件名部分。如果路徑中包含了文件擴展名,則該函數也會返回它。如果路徑的結尾有斜杠(/)或反斜杠(\),則 basename() 函數會返回空…

Android計算器界面的設計——表格布局TableLayout實操

目錄 任務目標任務分析任務實施 任務目標 使用TextView、Button等實現一個計算器界面,界面如圖1所示。 圖1 計算器界面效果圖 任務分析 界面整體使用表格布局,第一行使用一個TextView控件,橫跨4列,中間4行4列,最后一…

Laravel HTTP客戶端:網絡請求的瑞士軍刀

標題:Laravel HTTP客戶端:網絡請求的瑞士軍刀 Laravel的HTTP客戶端是一個功能強大的工具,它提供了一種簡潔、直觀的方式來發送HTTP請求。無論是與外部API集成,還是進行網絡數據抓取,Laravel的HTTP客戶端都能滿足你的需…

小紅書選品中心商家采集 小紅書商家電話采集軟件

可采集名稱銷量評分聯系方式等 需要有1000粉絲以上已實名認證過的小紅書達人才可以使用 以下是一個示例程序,可以用于批量獲取小紅書選品中心商家的信息: import requestsdef get_merchants(page_num):url f"https://www.xiaohongshu.com/selec…

git 添加本地分支, clean

//以develop為源創建本地分支fromdevelop git checkout -b fromdevelop git add . git commit -m "local" git checkout -b local/dev //切換到遠程分支. git checkout dev git clean_git clean -f -d-CSDN博客 git clean -f -d #刪除當前目錄下沒有被track…

RAC spfile 坑 +data INSTANCE_NUMBER thread x is mounted by another instance

RAC相關三個參數 thread reset 就可以默認 instance_number 需要單獨設置 sid‘SIDX’ cluster_database boolean TRUE SQL> alter system reset instance_number sid* scopespfile; alter system reset instance_number sid* scopespfile …

解析Torch中`Transformer`

解析torch官方代碼腳本文件:transformer.py。版本:1.9.1cu111。 首先查看《Torch中多頭注意力MultiheadAttention的中文注釋》解析; 最后查看下方transformer解析。 話不多說,看代碼吧! import copy from typing imp…

Vue的學習之class與style綁定

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>Vue的學習</title><script src"vue.js" type"text/javascript" charset"utf-8"></script></head><body><…