假設性文檔嵌入 HyDE:大模型 + 對比學習,從關鍵詞相似度搜索到語義搜索

假設性文檔嵌入 HyDE:大模型 + 對比學習,從關鍵詞相似度搜索到語義搜索

    • 提出背景
    • 流程圖
    • 解法拆解
      • 類比
        • 1. 單一文檔嵌入空間的搜索
        • 2. 指令跟隨型語言模型(InstructLM)的引入
        • 3. 生成文檔的嵌入編碼

?


提出背景

論文:https://arxiv.org/pdf/2212.10496

代碼:https://github.com/texttron/hyde

HyDE 特別適合,當需要捕獲廣泛的語義內容并減少對關鍵詞直接依賴時。

比如醫學一個概念有很多術語,比如用戶搜索感冒,數據庫是風熱流感,這倆的相似度很低,相似度匹配解決不了,只能語義匹配。

相似度搜索工作原理

  • 相似度搜索依賴于直接比較查詢詞與數據庫中文檔的關鍵詞的匹配度。
  • 使用如TF-IDF(詞頻-逆文檔頻率)或余弦相似度等算法來評估查詢與每個文檔的相似度。
  • 最終的輸出是根據相似度分數排序的文檔列表,分數最高的文檔最相關。

應用場景

  • 醫生輸入查詢:“膝關節炎治療方法”。
  • 檢索系統在醫學文檔數據庫中查找包含“膝關節炎”和“治療方法”這些關鍵詞的文檔。
  • 返回的結果直接反映了關鍵詞的出現頻率和文檔中的分布情況。

HyDE工作原理

  • HyDE首先通過一個生成性語言模型根據輸入的查詢“膝關節炎治療方法”生成一個內容豐富的、假設性的答案或文檔,這個文檔詳細描述了可能的治療方法,如藥物治療、物理治療、手術選項等,即使這樣的文檔在實際數據庫中并不存在。
  • 然后,這個生成的假設文檔被轉換成嵌入向量,使用對比編碼器進行編碼。
  • 系統使用這個向量與數據庫中文檔的向量進行相似度比較,尋找與假設文檔內容相似的實際文檔。

應用場景

  • 通過假設性文檔生成和后續的向量比較,HyDE能夠捕捉查詢的深層意圖和復雜內容,不僅限于關鍵詞匹配。
  • 這使得即使醫生的查詢用詞非常專業或非常通俗,系統也能理解并返回最相關的、專業的醫療建議和研究成果。

相似度搜索比作使用地圖找到特定地址,而HyDE則像是先繪制一個詳盡的旅行指南,然后再在地圖上尋找與之最匹配的路徑。

相似度搜索直接依賴于現有的、明確的標記和路徑,而HyDE通過創造性地解釋和拓展查詢內容,提供更深層次的匹配和理解。

通過這種方式,HyDE不僅提高了檢索的相關性和準確性,還能處理更復雜和多樣化的查詢,特別適用于需要高度解釋性和語義理解的領域,如醫療、法律和科研文獻檢索。

流程圖

在這里插入圖片描述
這張圖是對Hypothetical Document Embeddings (HyDE) 模型的說明。

這個模型通過以下步驟來處理和檢索信息:

  1. 輸入指令和查詢:HyDE接收一個查詢指令,例如“寫一個段落來回答這個問題”。

    這個查詢可以涵蓋各種主題,如圖中示例所示,包括“智齒拔除需要多長時間”,“COVID-19大流行如何影響心理健康?”,以及“??? ?? ?? ??????”(人類何時開始使用血液?)。

  2. 生成文檔:根據查詢指令,一個基于GPT的語言模型生成一個假設的文檔。

    這個文檔不是真實的,但它旨在模擬相關文檔的內容。

    例如,對于智齒拔除的查詢,生成的文檔可能會說“通常需要30分鐘到兩小時來拔除智齒”。

  3. 文檔編碼與檢索:生成的文檔被送入一個對比學習的編碼器(如圖中的Contriever),該編碼器將文檔轉換成嵌入向量。

    然后,這個向量被用來在語料庫中查找最相似的真實文檔。

  4. 返回結果:模型根據生成的文檔與真實文檔之間的語義相似性返回查詢結果。

    例如,關于智齒拔除的查詢可能返回一些解釋智齒拔除過程的真實文檔。

這個模型的特點是它不直接計算查詢與文檔之間的相似度,而是通過生成文檔和編碼這兩個步驟間接地處理查詢,使得系統能夠以零樣本的方式工作,即不依賴于具體的相關性標簽進行訓練。

這使得HyDE模型能夠適應多種語言和任務,即使在沒有明確訓練數據的情況下也能進行有效的文檔檢索。

解法拆解

目的:解決零樣本密集檢索的問題,這是因為在沒有相關性判斷或評分的情況下,傳統的密集檢索模型難以學習查詢和文檔的嵌入表示。

解法:HyDE模型設計

  1. 子解法1:單一文檔嵌入空間的搜索

    • 特征:只需學習文檔之間的相似性,無需處理查詢的嵌入。
    • 原因:這通過使用無監督的對比學習來實現,可以簡化學習過程,因為它不依賴于外部的相關性標簽。

    ?
    例如,通過Izacard等人的研究(2021),已經證明無監督對比學習在沒有明確監督的情況下有效地學習文檔特征。

  2. 子解法2:指令跟隨型語言模型(InstructLM)的引入

    • 特征:通過生成“假設文檔”來間接捕獲查詢的相關性。

    • 原因:InstructLM能根據給定的指令生成內容,這種方法將查詢相關性的建模負擔從傳統的表示學習轉移到了更容易泛化的自然語言生成模型上。

      ?
      這使得模型即使在缺乏明確相關性數據的情況下也能有效工作。

    例如,如果指令是“寫一個回答問題的段落”,InstructLM生成的文檔雖然不是真實的,但能夠反映出與查詢相關的內容模式。

  3. 子解法3:生成文檔的嵌入編碼

    • 特征:通過文檔編碼器將生成的“假設文檔”轉化為嵌入向量,再進行相似性搜索。

    • 原因:使用文檔編碼器f作為損失壓縮器,可以過濾掉生成文檔中的冗余細節,只保留與查詢相關的核心內容,從而實現高效的文檔檢索。

      ?
      這種方法利用了文檔之間的相似性嵌入,進一步將假設向量與實際語料庫中的真實文檔對齊。

邏輯鏈:這些子解法形成一個線性邏輯鏈,每個步驟都是為了解決零樣本密集檢索中遇到的具體問題。

首先通過無監督學習建立文檔嵌入,然后利用指令跟隨模型生成與查詢相關的假設文檔,最后通過文檔編碼器壓縮和過濾信息,執行有效的檢索。

這個過程通過結合無監督學習和自然語言生成技術,創新性地解決了無法直接從標注數據學習的難題。

?

類比

想象一下你正在組裝一套復雜的家具,但你沒有明確的說明書,只有一些基本的工具和一些不標記的零件。

這就是傳統密集檢索系統在沒有相關性標簽時面臨的挑戰:它們需要準確地匹配查詢和文檔,但缺乏直接指導他們如何完成任務的明確指示。

HyDE模型的設計就像是給你一個能夠生成使用說明的智能工具,同時也提供了檢測哪些工具和零件最適合當前步驟的能力。

1. 單一文檔嵌入空間的搜索

類比:這就像使用一個高級的金屬探測器在沙灘上尋找金屬物體。

探測器不需要知道每個物體具體是什么,只需要識別出哪些地方有金屬物體。

在HyDE模型中,這個過程相當于用對比學習探測文檔庫中的文檔,識別它們之間的相似性,而不是直接尋找與特定查詢完全匹配的文檔。

2. 指令跟隨型語言模型(InstructLM)的引入

類比:想象你有一個能夠根據你描述的需要自動生成建議方案的智能助手。

比如你說:“我需要一個可以放雜志的小桌子。”

即使你沒有直接說明要用木頭制作,智能助手也能生成一個包括材料和設計的建議方案。

在HyDE中,InstructLM正是這樣一個智能助手,它能根據查詢生成一個假設性的“方案”(即文檔),捕捉查詢的核心需求。

3. 生成文檔的嵌入編碼

類比:這就像把一份詳細的設計圖紙轉換成一個更簡潔的部件清單。

在建造時,你不需要再次查看復雜的圖紙,只需根據這個清單挑選正確的材料和工具即可。

HyDE模型中的編碼器就是這樣一個工具,它將生成的文檔轉換為核心特征的集合(即向量),使得檢索系統能夠快速有效地找到與這些特征匹配的真實文檔。

通過這種方式,HyDE模型有效地解決了傳統密集檢索在無標注數據情況下的局限,通過創新的方法優化了信息檢索過程,使其更加智能和適應性強。

這種模型不僅適用于學術和科研領域,也可以廣泛應用于醫療、法律、商業等信息密集型行業,提高檢索的準確性和效率。

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

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

相關文章

python怎么樣將一段程序無效掉

1、python中可以用注釋屏蔽一段語句,具體方法如下,首先打開一段python的示例程序: 2、然后單行注釋的方法是在語句前面加上#,程序運行后添加注釋的地方的語句會被自動跳過,這里可以看到將打印變量a的語句添加注釋就沒有…

vue處理重復請求

處理方法記錄第一次的請求時間-后面的請求時間,判斷間隔時間提示請求重復 // 登錄方法 定義repeatSubmit屬性控制是否重復請求 export function login(username, password, code, uuid) {const data {username,password,code,uuid}return request({url: /login,he…

前端css性能優化

前端css性能優化 1. 減少樣式表數量和壓縮文件大小: 通過合并多個樣式表、刪除未使用的樣式、壓縮樣式表等方式來減少樣式表數量和大小,從而減少網絡請求和提高加載速度。 通常來說,樣式文件會被瀏覽器緩存,進入到其他頁面樣式文件…

在 C++中,如何實現高效的多線程并發編程以處理大規模數據計算,同時避免常見的競態條件和死鎖問題?

在 C 中,可以使用以下幾種方法來實現高效的多線程并發編程以處理大規模數據計算,并避免常見的競態條件和死鎖問題: 使用互斥鎖:使用 std::mutex 類型的互斥鎖來保護共享數據的訪問。在訪問共享數據之前,線程先要獲取互…

二叉樹 Leetcode 101 對稱二叉樹

二叉樹 Leetcode 101 對稱二叉樹 Leetcode 101 要點:1.比較的是左右子樹是否相同,不是節點的左右孩子; 2.左子樹左右中遍歷,右子樹右左中遍歷; 3.靈活遞歸。 /*** Definition for a binary tree node.* struct Tree…

【實驗室精選】PFA反應瓶帶鼓泡球 高效氣體鼓泡 化學分析優選

PFA反應瓶帶鼓泡球是一種特殊設計的實驗室容器,它集成了鼓泡球和PFA(全氟烷氧基)材料的反應瓶,用于氣體的鼓泡和液體的混合。以下是它的一些特點和用途: 特點: 鼓泡球設計:鼓泡球周圍布滿小孔&…

安裝realsenseSDK2.0

1、創造工作空間并進入 mkdir ros_ws cd ros_ws/ 2、克隆librealsense git clone https://github.com/IntelRealSense/librealsense cd librealsense 3、安裝依賴項 sudo apt-get install libssl-dev sudo apt-get install libusb-1.0-0-dev sudo apt-get install libudev…

界面材料知識

界面材料是用于填充芯片和散熱器之間的空隙,將低導熱系數的空氣擠出,換成較高導熱系數的材料,以提高芯片散熱能力。參考下圖 圖片來源網上 熱阻是衡量界面材料性能最終的參數,其中與熱阻有關的有: 1、導熱系數&#x…

從零開始學習SLAM(三)

旋轉向量 #include <Eigen/Geometry> #include <Eigen/Core>AngleAxisd 類有幾種構造函數&#xff0c;其中最常用的是&#xff1a; Eigen::AngleAxisd(const Scalar& angle, const Axis& axis);angle 是旋轉的角度&#xff0c;通常以弧度表示。axis 是旋…

element-ui el-select選擇器組件下拉框增加自定義按鈕

element-ui el-select選擇器組件下拉框增加自定義按鈕 先看效果 原理&#xff1a;在el-select下添加禁用的el-option&#xff0c;將其value綁定為undefined&#xff0c;然后覆蓋el-option禁用狀態下的默認樣式即可 示例代碼如下&#xff1a; <template><div class…

【 VIPKID-注冊安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞 …

黑馬點評項目難點-動態代理,sychronized,@Transactional失效的情況

文章目錄 難點1&#xff1a;synchronizesynchronized 的底層實現鎖的具體操作舉例說明結論 難點2&#xff1a;動態代理和Transactional失效問題Transactional 工作原理關鍵點示例分析正確的使用方式結論建議 難點所在代碼塊 Overridepublic Result seckillVoucher(Long voucher…

AI胡言亂語

復合矢量場在多維時空折疊過程中生成了高維拓撲映射&#xff0c;使得納米級別的存儲單元能夠在低能耗狀態下實現高效數據交換。基于相位調制的光子流動控制確保了全息影像的即時重構&#xff0c;同時動態適應不同頻段的干擾信號&#xff0c;達到最佳信噪比。 異相態轉化算法在…

基于Istio的多網關運行時:配置、部署和應用

1. 引言 Istio是一個開源的服務網格&#xff0c;主要應用于簡化微服務架構中的服務間通信、提供強大的監控能力以及加強服務的安全管理。通過利用Sidecar模式部署的Envoy代理&#xff0c;Istio能夠在幾乎無需修改服務代碼的情況下&#xff0c;實現服務發現、負載均衡、加密通信…

【LinuxC語言】管理者線程函數

文章目錄 前言工作者工作流程函數實現實現原理函數代碼概況總結前言 在并發編程中,管理者線程函數是一個重要的組成部分,它負責管理和調度工作線程。在Linux C語言環境下,我們可以使用POSIX線程庫(pthread)來創建和控制管理者線程。管理者線程通常負責添加任務到任務隊列…

WRF學習——使用CMIP6數據驅動WRF/基于ncl與vdo的CMIP6數據處理

動力降尺度 國際耦合模式比較計劃&#xff08;CMIP&#xff09;為研究不同情景下的氣候變化提供了大量的模擬數據&#xff0c;而在實際研究中&#xff0c;全球氣候模式輸出的數據空間分辨率往往較低&#xff08;>100Km&#xff0c;缺乏區域氣候特征&#xff0c;為了更好地研…

有哪些在本地運行大模型的方法

前言 在本文中&#xff0c;我們將看到在本地運行任何 LLM 的不同方法 1/ LMStudio LM Studio 是一款桌面應用程序&#xff0c;用于在計算機上運行本地 LLM。鏈接&#xff1a;https://lmstudio.ai/ 2/ Ollama Ollama 是一款工具&#xff0c;可讓您在機器上本地運行開源大型語…

vue項目靜態圖片下載

正常情況下只需要傳入圖片路徑就可以進行下載 methods: {downs(path, name) {//必須同源才能下載var alink document.createElement("a");alink.href path;alink.download name; //圖片名alink.click();},}, 但是當我們downs方法中直接傳入"/assets/load/xx…

二、分布式軟總線是如何高效的傳輸數據和任務的

分布式軟總線在HarmonyOS中高效傳輸數據和任務主要依靠以下幾個關鍵技術點和設計原則: 設備快速發現與連接: 利用多種通信技術(如Wi-Fi、藍牙、有線連接等),結合廣播、多播及服務發現協議,實現設備間的快速發現與穩定連接。這包括設備的唯一標識管理、網絡條件自適應選擇…

【pytorch14】感知機

單層感知機模型 對于單層的感知機&#xff0c;它的激活函數是一個sigmoid 對于符號的定義做一個規范化&#xff0c;輸入層每一層進行一個編號 輸入是第0層&#xff0c;上標0表示屬于輸入層&#xff0c;下標0到n表示一共有n個節點(這里嚴格來說應該是0~n-1&#xff0c;為了書寫…