LangChain手記 Question Answer 問答系統

整理并翻譯自DeepLearning.AI×LangChain的官方課程:Question Answer(源代碼可見)

本節介紹使用LangChian構建文檔上的問答系統,可以實現給定一個PDF文檔,詢問關于文檔上出現過的某個信息點,LLM可以給出關于該信息點的詳情信息。這種使用方式比較靈活,因為并沒有使用PDF上的文本對模型進行訓練就可以實現文檔上的信息點問答。本節介紹的Chain也比較常用,它涉及到了嵌入(embedding)和向量存儲(vector store)。

(筆者注:embedding指的是將一個實體映射到高維空間,以高維向量的形式存儲,以最大限度地capture其信息,自然語言處理使用embedding方式表示單詞,即詞向量。自然語言處理語境下,embedding都指的是word embedding詞嵌入)

首先是一個簡單的例子:
在這里插入圖片描述
在這里插入圖片描述
下面解釋了一下底層原理:

LLM‘s on Documents 文檔上的大語言模型

在這里插入圖片描述
由于最大token數限制,LLM最多只能一次性處理幾千個token。因而如果有一個文檔級別的信息(遠大于幾千token),LLM沒辦法直接處理,因而引入詞嵌入(embedding)和向量存儲(vector store)來解決這個問題

在這里插入圖片描述

Embedding 詞嵌入

  • 嵌入向量捕捉上下文/含義
  • 相似(指語義相似)內容地文本對應相似的向量

如下圖:句子1)和2)語義相似,因而它們的表示向量也相似。
在這里插入圖片描述
因而我們可以使用表示向量的相似程度來判定兩句話的相似程度,在回答文檔上的問題時,先找出和提問相似的信息,作為輸入喂給LLM,期望LLM能根據相似信息做出解答。

(筆者注:事實上,LLM內部就是將文本轉化為詞向量(tokenizer)來處理的,直接以向量形式存儲節省了文本到向量的轉化步驟。)

Vecotor Database 向量數據庫

在這里插入圖片描述
在這里插入圖片描述
當一個查詢輸入時,先將其向量化,然后跟向量數據庫里面的所有項對比,找出最相似的n項。
在這里插入圖片描述
查詢結果放入輸入的上下文中喂給LLM,得到回復。

下面分步解釋過程:
在這里插入圖片描述
使用CSVLoader對象loader加載一個csv文件,里面存放了戶外服裝相關信息,打印第一行信息如上圖。

因為文本量比較少,不需要分塊,因而可以直接創建embedding,查看一個embedding(其實是一組詞向量):
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
上述過程可以使用RetrievalQA chain輕松實現:
在這里插入圖片描述
在這里插入圖片描述

Stuff method 原材料方法

在這里插入圖片描述
原材料是最簡單的方法,只需要將所有的原始數據放到prompt中作為上下文喂給語言模型。
優點:只需調用一次LLM。LLM可以一次性訪問所有數據。
缺點:LLM有上下文長度,對于大型文檔或者多個文檔超過上下文長度時無法生效。

additional methods 額外方法

在這里插入圖片描述
Map_reduce:將文檔每一個塊和提問一起輸入一個LLM中,匯總所有LLM結果,再使用一個LLM處理拿到最終答案。
(很有效,可以處理任意數量的文檔,還可以并行,但很貴,且獨立對待每一個文檔,即忽略了文檔之間的關聯性)

在這里插入圖片描述
Refine:從一個塊和LLM中得到回復之后,再把結果作為下一輪的輸出,不斷優化到最后一個塊,得到最終結果。
(好處時考慮了文檔之間的關聯性,和map_reduce代價相同)

在這里插入圖片描述
Map_rank:處理所有塊,給每一個塊和LLM的結果打分,選一個分最高的作為最終結果。
(需要LLM有能力給結果打分,和map_reduce代價相同,也沒有考慮文檔之間的關聯性)

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

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

相關文章

【vue】項目基礎環境搭建、css樣式重置與公用

nodejs環境 nodejs是當下前端工程化開發必不可少的環境, 使用 nodejs的 npm功能來管理依賴包 查看node 和 npm的版本 node -v #查看node版本npm -v #查看npm版本 git版本控制 git版本控制工具是目前最為流行的分布式版本管理工具,代碼的**提交, 檢出, 日志**, 都需要通過git完…

Matplotlib數據可視化(二)

目錄 1.rc參數設置 1.1 lines.linestype取值 1.2 lines.marker參數的取值 1.3 繪圖中文預設 1.4 示例 1.4.1 示例1 1.4.2 示例2 1.rc參數設置 利用matplotlib繪圖時為了讓繪制出的圖形更加好看,需要對參數進行設置rc參數設置。可以通過以下代碼查看matplotli…

C++11并發與多線程筆記(8) condition_variable、wait、notify_one、notify_all

C11并發與多線程筆記(8) condition_variable、wait、notify_one、notify_all 1、條件變量condition_variable、wait、notify_one、notify_all1.1 std::condition_variable1.2 wait()1.3 notify_one()1.4 notify_all() 2、深入思考 1、條件變量condition_…

JS內存泄漏

JS內存泄漏 1.意外的全局變量 全局變量的生命周期很長,直到頁面關閉,它都存活,所以全局變量上的內存一直都不會被回收 當全局變量使用不當,沒有及時回收(手動賦值null),或者拼寫錯誤等將某個變…

[Machine Learning] decision tree 決策樹

(為了節約時間,后面關于機器學習和有關內容哦就是用中文進行書寫了,如果有需要的話,我在目前手頭項目交工以后,用英文重寫一遍) (祝,本文同時用于比賽學習筆記和機器學習基礎課程&a…

【算法學習】兩數之和II - 輸入有序數組

題目描述 原題鏈接 給你一個下標從 1 開始的整數數組 numbers &#xff0c;該數組已按 非遞減順序排列 &#xff0c;請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] &#xff0c;則 1 < index1 < …

Springboot MultipartFile文件上傳與下載

yml文件配置是否可以上傳及上傳附件大小 servlet:multipart:# 允許文件上傳enabled: true# 單個文件大小max-file-size: 20MB# 設置總上傳的文件大小max-request-size: 50MB /*** param files* param request* Description 上傳文件* Throws* Return java.util.List* Date 202…

南大通用數據庫(Gbase 8s) 創建UDR外部函數

一、在使用 date_format、from_unixtime、to_days、yearweek 函數時&#xff0c;Gbase 8s 數據庫不支持&#xff0c;可以使用創建 UDR 外部函數來實現 二、登錄命令控制臺或者使用 navicat 連接 Gbase 數據庫 這里使用 navicat &#xff0c;點擊新增連接選擇 PostGreSql 驅動…

動手學深度學習—卷積神經網絡LeNet(代碼詳解)

1. LeNet LeNet由兩個部分組成&#xff1a; 卷積編碼器&#xff1a;由兩個卷積層組成&#xff1b;全連接層密集塊&#xff1a;由三個全連接層組成。 每個卷積塊中的基本單元是一個卷積層、一個sigmoid激活函數和平均匯聚層&#xff1b;每個卷積層使用55卷積核和一個sigmoid激…

LeetCode--HOT100題(35)

目錄 題目描述&#xff1a;23. 合并 K 個升序鏈表&#xff08;困難&#xff09;題目接口解題思路1代碼解題思路2代碼 PS: 題目描述&#xff1a;23. 合并 K 個升序鏈表&#xff08;困難&#xff09; 給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合…

UDP 的報文結構以及注意事項

UDP協議 1.UDP協議端格式 1.圖中的16位UDP長度,表示整個數據報(UDP首部UDP數據)的最大長度 2.若校驗和出錯,會直接丟棄 2.UDP的報文結構 UDP報文主體分為兩個部分:UDP報頭(占8個字節)UDP載荷/UDP數據 1.源端口號 16位,2個字節 2.目的端口號 16位,2個字節 3.包長度 指示了…

sd-webui安裝comfyui擴展

文章目錄 導讀ComfyUI 環境安裝1. 安裝相關組件2. 啟動sd-webui3. 訪問sd-webui 錯誤信息以及解決辦法 導讀 這篇文章主要給大家介紹如何在sd-webui中來安裝ComfyUI插件 ComfyUI ComfyUI是一個基于節點流程式的stable diffusion的繪圖工具&#xff0c;它集成了stable diffus…

兩個list如何根據一個list中的屬性去過濾掉另一個list中不包含這部分的屬性,用流實現

你可以使用Java 8的流來實現這個功能。假設你有兩個包含對象的List&#xff0c;每個對象有一個屬性&#xff0c;你想根據一個List中的屬性值來過濾掉另一個List中不包含這個屬性值的對象。下面是一種使用流的方式來實現這個功能 import java.util.ArrayList; import java.util…

什么是閉包(closure)?為什么它在JavaScript中很有用?

聚沙成塔每天進步一點點 ? 專欄簡介? 閉包&#xff08;Closure&#xff09;是什么&#xff1f;? 閉包的用處? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&…

IO流面試題

題目一&#xff1a; 在磁盤中新建一個文件(如果目錄結構不存在&#xff0c;則創建目錄) 文件名&#xff1a;data.txt 文件日錄&#xff1a;C:\demo\test\files (盤符不限) linux目錄~/demo/test/files 題二 在新建的data.txt中添加如下內容&#xff1a; 張三,測試,2019-02-18 …

windows10 安裝WSL2, Ubuntu,docker

AI- 通過docker開發調試部署ChatLLM 閱讀時長&#xff1a;10分鐘 本文內容&#xff1a; window上安裝ubuntu虛擬機&#xff0c;并在虛擬機中安裝docker&#xff0c;通過docker部署數字人模型&#xff0c;通過vscode鏈接到虛擬機進行開發調試.調試完成后&#xff0c;直接部署在云…

優漫動游零基礎如何學習好UI設計

智能時代的來臨&#xff0c;很多企業都越來越注重用戶體驗這一塊&#xff0c;想要有一個吸引用戶的好頁面&#xff0c;UI設計師崗位不可或缺&#xff0c;如今越來越多的人想要學習UI設計技術&#xff0c;那么對于零基礎小白如何學習好UI設計呢? 零基礎小白如何學習好UI設計…

變更通知在開源SpringBoot/SpringCloud微服務中的最佳實踐

目錄導讀 變更通知在開源SpringBoot/SpringCloud微服務中的最佳實踐1. 什么是變更通知2. 變更通知的場景分析3. 變更通知的技術方案3.1 變更通知的技術實現方案 4. 變更通知的最佳實踐總結5. 參考資料 變更通知在開源SpringBoot/SpringCloud微服務中的最佳實踐 1. 什么是變更通…

Ubuntu在自己的項目中使用pcl

1、建立一個文件夾&#xff0c;如pcl_demos&#xff0c;里面建立一個.cpp文件和一個cmake文件 2、打開終端并進入該文件夾下&#xff0c;建立一個build文件夾存放編譯的結果并進入該文件夾 3、對上一級進行編譯 cmake .. 4、生成可執行文件 make 5、運行該可執行文件 6、可視…

最強自動化測試框架Playwright(30)-JS句柄

在 Playwright 中&#xff0c;JSHandle 是一個表示瀏覽器中 JavaScript 對象的類。它提供了與網頁中的 JavaScript 對象進行交互和操作的方法。 可以通過調用 Playwright中的 evaluateHandle 或 evaluate 方法來獲取 JSHandle from playwright.sync_api import sync_playwrig…