基于 Python 的自然語言處理系列(70):檢索增強生成(RAG)

1. 什么是 RAG?

????????在許多大模型(LLM)應用場景中,我們需要使用特定的用戶數據,而這些數據并未包含在模型的訓練集中。檢索增強生成(Retrieval Augmented Generation,RAG)是一種有效的解決方案,它通過從外部數據源檢索相關數據,并在生成回答時將其傳遞給 LLM,以提高回答的準確性和相關性。

????????LangChain 提供了一整套用于構建 RAG 應用的模塊,包括:

  • 文檔加載(Document loaders):從 HTML、PDF、代碼等多種格式的數據源加載文檔。

  • 文檔轉換(Document transformers):將大文檔拆分為更小的、相關的片段,以提升檢索效果。

  • 文本嵌入模型(Text embedding models):將文本轉換為向量,以便進行相似度搜索。

  • 向量存儲(Vector stores):用于存儲和檢索嵌入向量的數據庫。

  • 檢索器(Retrievers):從存儲的數據中獲取最相關的信息。

2. 文檔加載(Document Loaders)

????????LangChain 提供了多種文檔加載工具,例如 CSVLoader、PyPDFLoader 和 OnlinePDFLoader。

from langchain.document_loaders import PyPDFLoaderloader = PyPDFLoader("./docs/pdf/MachineLearning-Lecture01.pdf")
pages = loader.load_and_split()
print(len(pages))

3. 文檔轉換(Document Transformers)

????????在檢索過程中,將長文檔拆分為較小的塊有助于提高查詢效率。

from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(chunk_size=700, chunk_overlap=100
)
docs = text_splitter.split_documents(pages)
print(len(docs))

4. 文本嵌入(Text Embedding Models)

????????文本嵌入用于將文本轉換為向量,以便進行相似度計算。

from langchain.embeddings import HuggingFaceInstructEmbeddings
import torchembedding_model = HuggingFaceInstructEmbeddings(model_name='hkunlp/instructor-base',model_kwargs={'device': torch.device('cuda' if torch.cuda.is_available() else 'cpu')}
)

5. 向量存儲(Vector Stores)

????????我們可以使用 FAISS 進行向量存儲和檢索。

from langchain.vectorstores import FAISSvectordb = FAISS.from_documents(docs, embedding_model)
vectordb.save_local("./vectordb_path/ml-andrew-ng")

6. 檢索器(Retrievers)

????????檢索器用于從存儲的數據中提取最相關的片段。

retriever = vectordb.as_retriever(search_type="similarity")
query = "What is Linear Regression"
docs = retriever.get_relevant_documents(query)
print(docs)

7. 多查詢檢索(MultiQueryRetriever)

????????LangChain 允許自動生成多個查詢,以便獲取更全面的檢索結果。

from langchain.chat_models import ChatOpenAI
from langchain.retrievers.multi_query import MultiQueryRetrieverllm = ChatOpenAI(temperature=0)
retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectordb.as_retriever(), llm=llm
)
query = "What is the difference between Linear Regression and Logistic Regression?"
docs = retriever_from_llm.get_relevant_documents(query)
print(len(docs))

8. 向量存儲緩存(Caching)

????????緩存嵌入結果可以減少重復計算,提高檢索效率。

from langchain.embeddings import CacheBackedEmbeddings
from langchain.storage import LocalFileStorefs = LocalFileStore("./cache/")
cached_embedder = CacheBackedEmbeddings.from_bytes_store(embedding_model, fs, namespace=embedding_model.model_name
)

9. 結論

????????在本篇博文中,我們介紹了 RAG 在自然語言處理中的應用,涵蓋了文檔加載、文本嵌入、向量存儲和檢索等核心組件。使用 LangChain,可以輕松構建一個高效的檢索增強生成系統,以提升 LLM 的回答質量。


📌 參考鏈接

  • LangChain 文檔加載

  • LangChain 向量存儲

如果你覺得這篇博文對你有幫助,請點贊、收藏、關注我,并且可以打賞支持我!

歡迎關注我的后續博文,我將分享更多關于人工智能、自然語言處理和計算機視覺的精彩內容。

謝謝大家的支持!

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

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

相關文章

CAD插件實現:所有文字顯示到列表、縮放、編輯——CAD-c#二次開發

當圖中有大量文字,需要全部顯示到一個列表時并縮放到需要的文字時,可采用插件實現,效果如下: 附部分代碼如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…

Systemd構建自動化備份服務與外部存儲管理

實訓背景 你是一家數據公司的系統管理員,需設計一套自動化備份系統,滿足以下需求: 定期備份:每周日凌晨1點將 /data 目錄壓縮備份到 /backups。外部存儲掛載:插入USB設備時自動掛載到 /mnt/usb,并觸發增量…

PostgreSQL中根據另一表的值來更新一個字段

UPDATE table1 SET value t2.new_value FROM table2 t2 WHERE table1.id t2.reference_id; 解釋 UPDATE table1:指定要更新的表,不要用別名。 SET value t2.new_value:設置要更新的字段及其新值,這里新值來自 table2。也可更…

#SVA語法滴水穿石# (000)斷言基本概念和背景

一、前言 隨著數字電路規模越來越大、設計越來越復雜,使得對設計的功能驗證越來越重要。首先,我們要明白為什么要對設計進行驗證?驗證有什么作用?例如,在用FPGA進行設計時,我們并不能確保設計出來的東西沒有功能上的漏洞,因此在設計后我們都會對其進行驗證仿真。換句話說…

Git 從入門到精通(開源協作特別版)

🧠 Git 從入門到精通(開源協作特別版) ? 基礎命令 🧰 高級用法 🛠? 開源實戰技巧 🌍 GitHub 社區協作 適合:從0開始 → 熟練開發者 → 參與/維護開源項目 🔰 第1章:…

【SQL】取消sql某一列的唯一值key值的方法

在插入數據到sql時,遇到了這個問題: Duplicate entry ‘XXX’ for key 起因是: 我之前設計表的時候,手動給product_title 這個列加了一個key, key 是這個字段的唯一鍵約束,就不能重復在這一列存入重復的數…

【小沐學Web3D】three.js 加載三維模型(React Three Fiber)

文章目錄 1、簡介1.1 Three.js1.2 React Three Fiber 2、測試2.1 初始化環境2.2 app.js修改(顯示內置立方體)2.3 app.js修改(顯示內置球體)2.4 app.js修改(顯示自定義立方體)2.5 app.js修改(顯示…

本地部署 Firecrawl 爬蟲讓 AI 知識庫更豐滿

https://www.firecrawl.dev/ firecrawl-logo-with-fire.png 什么是Firecrawl Firecrawl 是一款 可以將網站轉換為 便于AI處理的Markdown 格式的爬蟲工具 ,主要 提供 API 服務 ,無需站點地圖,只需要接收一個 URL 地址就可以爬取網站及網站下可…

純個人整理,藍橋杯使用的算法模板day2(0-1背包問題),手打個人理解注釋,超全面,且均已驗證成功(附帶詳細手寫“模擬流程圖”,全網首個

算法索引 01背包優化前空間優化版(使用一維數組)優化后的模擬流程圖為何優化后,j不能使用正序遍歷模擬流程圖 代碼對應實現案例 01背包 優化前 /*** 0-1背包問題解法(與下方代碼表格示例對應,已模擬驗證)*…

APang網聯科技項目報告【服務器篇】

APang網聯科技:連接未來,智能領航 公司簡介 APang網聯科技成立于 [2005年],總部位于 [廣東深圳],是一家集網絡技術研發、系統集成、項目實施與運維服務為一體的高新技術企業。我們致力于為客戶提供全方位、定制化的網絡部署解決…

Scade One - 將MBD技術從少數高安全領域向更廣泛的安全嵌入式軟件普及

Scade One是繼Scade Suite version 6自2008年起發展近20年后的首次主要改進版本。在Scade One發布的同時,Scade團隊發布了一系列介紹Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的內容中,將復述博客…

Word在生成PDF后,PDF左側導航書簽目錄錯誤顯示的解決方法

1、打開要轉換的word文件,點擊“開始”,“另存為” 2、保存在本地時,在“保存類型”的下拉列表中選擇“PDF(*.pdf)” 3、選擇完保存類型后,點擊“選項”按鈕 4、在彈出的“選項”框中,選擇“創建…

Windows系統服務器安裝Office Online Server

服務器配置 配置參數OSThe 64-bit edition of Windows Server 2016CPU4RAM8GNetwork開啟Hard disk80GPort80, 443, 809 執行命令 PowerShell中添加Windows服務: Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,…

【小沐學Web3D】three.js 加載三維模型(Angular)

文章目錄 1、簡介1.1 three.js1.2 angular.js 2、three.js Angular.js結語 1、簡介 1.1 three.js Three.js 是一款 webGL(3D繪圖標準)引擎,可以運行于所有支持 webGL 的瀏覽器。Three.js 封裝了 webGL 底層的 API ,為我們提供了…

簡單程序語言理論與編譯技術·22 實現一個從AST到RISCV的編譯器

本文是記錄專業課“程序語言理論與編譯技術”的部分筆記。 LECTURE 22(實現一個從AST到RISCV的編譯器) 一、問題分析 1、完整的編譯器(如LLVM)需先完成AST到IR的轉換,并進行代碼優化,再到匯編&#xff0…

JavaWeb 課堂筆記 —— 02 JavaScript

本系列為筆者學習JavaWeb的課堂筆記,視頻資源為B站黑馬程序員出品的《黑馬程序員JavaWeb開發教程,實現javaweb企業開發全流程(涵蓋SpringMyBatisSpringMVCSpringBoot等)》,章節分布參考視頻教程,為同樣學習…

Python 如何高效實現 PDF 內容差異對比

Python 如何高效實現 PDF 內容差異對比 1. 安裝 PyMuPDF 庫2. 獲取 PDF 內容通過文件路徑獲取通過 URL 獲取 3. 提取 PDF 每頁信息4. 內容對比metadata 差異文本對比可視化對比 5. 提升對比效率通過哈希值快速判斷頁面是否相同早停機制多進程機制 6. 其他 最近有接觸到 PDF 內容…

OpenGL學習筆記(簡介、三角形、著色器、紋理、坐標系統、攝像機)

目錄 簡介核心模式與立即渲染模式狀態機對象GLFW和GLAD Hello OpenGLTriangle 三角形頂點緩沖對象 VBO頂點數組對象 VAO元素緩沖對象 EBO/ 索引緩沖對象 IEO 著色器GLSL數據類型輸入輸出Uniform 紋理紋理過濾Mipmap 多級漸遠紋理實際使用方式紋理單元 坐標系統裁剪空間 攝像機自…

MIPI與DVP接口攝像頭:深度解析與應用指南

1、MIPI 1.1 MIPI簡介 MIPI是什么?MIPI:mobile industry processor interface移動行業處理器接口。它是一個由Intel、Motorola、Nokia、NXP、Samsung、ST(意法半導體)和TI(德州儀器)等公司發起的開放標準…

35信號和槽_信號槽小結

Qt 信號槽 1.信號槽是啥~~ 尤其是和 Linux 中的信號進行了對比(三要素) 1) 信號源 2) 信號的類型 3)信號的處理方式 2.信號槽 使用 connect 3.如何查閱文檔. 一個控件,內置了哪些信號,信號都是何時觸發 一…