国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) Python教學 如何使用免費的法學碩士模型和知識庫創(chuàng)建您自己的 RAG

如何使用免費的法學碩士模型和知識庫創(chuàng)建您自己的 RAG

Dec 28, 2024 am 08:49 AM

本文探討了結合現(xiàn)代基於變壓器的模型的簡單而有效的問答系統(tǒng)的實現(xiàn)。該系統(tǒng)使用 T5(文字到文字傳輸轉換器)進行答案生成,並使用句子轉換器進行語義相似度匹配。

在上一篇文章中,我解釋瞭如何使用免費的基礎 LLM 模型建立帶有 Web 介面的簡單翻譯 API。這次,讓我們深入探討使用基於免費 Transformer 的 LLM 模型和知識庫來建立檢索增強生成 (RAG) 系統(tǒng)。

RAG(檢索增強生成)是一種結合了兩個關鍵組件的技術:

檢索:首先,它會搜尋知識庫(如文件、資料庫等)以尋找給定查詢的相關資訊。這通常涉及:

  • 將文字轉換為嵌入(表示意義的數(shù)值向量)
  • 使用相似度量(如餘弦相似度)找出相似內容
  • 選擇最相關的資訊

產生: 然後它使用語言模型(如我們程式碼中的 T5)透過以下方式產生回應:

將檢索到的資訊與原始問題結合

根據(jù)上下文建立自然語言回應

程式碼中:

  • SentenceTransformer 透過建立嵌入來處理檢索部分
  • T5 模型透過建立答案來處理產生部分

RAG 的好處:

  • 更準確的回答,因為它們是基於特定知識
  • 與純粹的法學碩士反應相比,幻覺減少
  • 能夠存取最新或特定領域的資訊
  • 比純生成更可控、更透明

系統(tǒng)架構概述

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

實作由一個 SimpleQASystem 類別組成,該類別協(xié)調兩個主要元件:

  • 使用句子轉換器的語意搜尋系統(tǒng)
  • 使用 T5 的答案產生系統(tǒng)

您可以在這裡下載最新版本的原始碼:https://github.com/alexander-uspenskiy/rag_project

系統(tǒng)圖

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

RAG 專案設定指南

本指南將協(xié)助您在 macOS 和 Windows 上設定檢索增強產生 (RAG) 專案。

先決條件

對於 macOS:

安裝 Homebrew(如果尚未安裝):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
使用 Homebrew 安裝 Python 3.8
釀造安裝python@3.10
對於 Windows:
從 python.org 下載並安裝 Python 3.8
安裝時請務必勾選「Add Python to PATH」

項目設定

步驟1:建立專案目錄

macOS:

mkdir RAG_project
cd RAG_project
Windows:

mkdir RAG_project
cd RAG_project

第 2 步:設定虛擬環(huán)境

macOS:

python3 -m venv venv
源 venv/bin/activate

Windows:

python -m venv venv
venvScriptsactivate

**核心組件

  1. 初始化**
def __init__(self):
    self.model_name = 't5-small'
    self.tokenizer = T5Tokenizer.from_pretrained(self.model_name)
    self.model = T5ForConditionalGeneration.from_pretrained(self.model_name)
    self.encoder = SentenceTransformer('paraphrase-MiniLM-L6-v2')

系統(tǒng)使用兩個主要模型初始化:

T5-small:用於產生答案的 T5 模型的較小版本
paraphrase-MiniLM-L6-v2:用於將文字編碼為有意義的向量的句子轉換器模型

2。資料集準備

def prepare_dataset(self, data: List[Dict[str, str]]):
    self.answers = [item['answer'] for item in data]
    self.answer_embeddings = []
    for answer in self.answers:
        embedding = self.encoder.encode(answer, convert_to_tensor=True)
        self.answer_embeddings.append(embedding)

資料集準備階段:

  • 從輸入資料中擷取答案
  • 使用句子轉換器為每個答案建立嵌入
  • 儲存答案及其嵌入以便快速擷取

系統(tǒng)如何運作

1。問題處理

當使用者提交問題時,系統(tǒng)會執(zhí)行以下步驟:

嵌入生成:使用與答案相同的句子轉換器模型將問題轉換為向量表示。

語意搜尋:系統(tǒng)透過以下方式找到最相關的儲存答案:

  • 計算問題嵌入與所有答案嵌入之間的餘弦相似度
  • 選出相似度得分最高的答案 情境形成:所選答案成為 T5 產生最終回應的脈絡。

2。答案生成

def get_answer(self, question: str) -> str:
    # ... semantic search logic ...
    input_text = f"Given the context, what is the answer to the question: {question} Context: {context}"
    input_ids = self.tokenizer(input_text, max_length=512, truncation=True, 
                             padding='max_length', return_tensors='pt').input_ids
    outputs = self.model.generate(input_ids, max_length=50, num_beams=4, 
                                early_stopping=True, no_repeat_ngram_size=2

答案產生過程:

  • 將問題和上下文組合成 T5 的提示
  • 對輸入文字進行標記,最大長度為 512 個標記
  • 使用波束搜尋和以下參數(shù)產生答案:
  • max_length=50:限制答案長度
  • num_beams=4:使用 4 個光束的光束搜尋
  • early_stopping=True:當所有光束到達結束標記時停止產生
  • no_repeat_ngram_size=2:防止二元組重複

3。回答清潔

def __init__(self):
    self.model_name = 't5-small'
    self.tokenizer = T5Tokenizer.from_pretrained(self.model_name)
    self.model = T5ForConditionalGeneration.from_pretrained(self.model_name)
    self.encoder = SentenceTransformer('paraphrase-MiniLM-L6-v2')
  • 刪除重複的連續(xù)單字(不區(qū)分大小寫)
  • 答案的第一個字母大寫
  • 刪除多餘的空格

完整原始碼

您可以在這裡下載最新版本的原始碼:https://github.com/alexander-uspenskiy/rag_project

def prepare_dataset(self, data: List[Dict[str, str]]):
    self.answers = [item['answer'] for item in data]
    self.answer_embeddings = []
    for answer in self.answers:
        embedding = self.encoder.encode(answer, convert_to_tensor=True)
        self.answer_embeddings.append(embedding)

記憶體管理:

系統(tǒng)明確使用CPU來避免記憶體問題
需要時嵌入會轉換為 CPU 張量
輸入長度限制為 512 個標記

錯誤處理:

  • 整個程式碼中全面的 try- except 區(qū)塊
  • 有意義的偵錯錯誤訊息
  • 未初始化組件的驗證檢查

使用範例

def get_answer(self, question: str) -> str:
    # ... semantic search logic ...
    input_text = f"Given the context, what is the answer to the question: {question} Context: {context}"
    input_ids = self.tokenizer(input_text, max_length=512, truncation=True, 
                             padding='max_length', return_tensors='pt').input_ids
    outputs = self.model.generate(input_ids, max_length=50, num_beams=4, 
                                early_stopping=True, no_repeat_ngram_size=2

在終端機中運作

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

限制和潛在的改進

可擴充性:

目前實作將所有嵌入保留在記憶體中
可以使用向量資料庫來改進大規(guī)模應用程式

回答品質:

嚴重依賴所提供答案資料集的品質
受限於T5-small的上下文視窗
可以從答案驗證或置信度評分中受益

表現(xiàn):

  • 對於大型應用程序,僅使用 CPU 可能會比較慢
  • 可以透過批次進行最佳化
  • 可以對常見問題實現(xiàn)快取

結論

此實作結合了語意搜尋和基於轉換器的文字產生的優(yōu)勢,為問答系統(tǒng)提供了堅實的基礎。請隨意使用模型參數(shù)(如 max_length、num_beams、early_stopping、no_repeat_ngram_size 等),找到更好的方法來獲得更連貫和穩(wěn)定的答案。雖然還有改進的空間,但目前的實現(xiàn)在複雜性和功能之間提供了良好的平衡,使其適合教育目的和中小型應用。

編碼愉快!

以上是如何使用免費的法學碩士模型和知識庫創(chuàng)建您自己的 RAG的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python的UNITDEST或PYTEST框架如何促進自動測試? Python的UNITDEST或PYTEST框架如何促進自動測試? Jun 19, 2025 am 01:10 AM

Python的unittest和pytest是兩種廣泛使用的測試框架,它們都簡化了自動化測試的編寫、組織和運行。 1.二者均支持自動發(fā)現(xiàn)測試用例並提供清晰的測試結構:unittest通過繼承TestCase類並以test\_開頭的方法定義測試;pytest則更為簡潔,只需以test\_開頭的函數(shù)即可。 2.它們都內置斷言支持:unittest提供assertEqual、assertTrue等方法,而pytest使用增強版的assert語句,能自動顯示失敗詳情。 3.均具備處理測試準備與清理的機制:un

如何將Python用於數(shù)據(jù)分析和與Numpy和Pandas等文庫進行操作? 如何將Python用於數(shù)據(jù)分析和與Numpy和Pandas等文庫進行操作? Jun 19, 2025 am 01:04 AM

pythonisidealfordataanalysisionduetonumpyandpandas.1)numpyExccelSatnumericalComputationswithFast,多dimensionalArraysAndRaysAndOrsAndOrsAndOffectorizedOperationsLikenp.sqrt()

什麼是動態(tài)編程技術,如何在Python中使用它們? 什麼是動態(tài)編程技術,如何在Python中使用它們? Jun 20, 2025 am 12:57 AM

動態(tài)規(guī)劃(DP)通過將復雜問題分解為更簡單的子問題並存儲其結果以避免重複計算,來優(yōu)化求解過程。主要方法有兩種:1.自頂向下(記憶化):遞歸分解問題,使用緩存存儲中間結果;2.自底向上(表格化):從基礎情況開始迭代構建解決方案。適用於需要最大/最小值、最優(yōu)解或存在重疊子問題的場景,如斐波那契數(shù)列、背包問題等。在Python中,可通過裝飾器或數(shù)組實現(xiàn),並應注意識別遞推關係、定義基準情況及優(yōu)化空間複雜度。

如何使用__ITER__和__NEXT __在Python中實現(xiàn)自定義迭代器? 如何使用__ITER__和__NEXT __在Python中實現(xiàn)自定義迭代器? Jun 19, 2025 am 01:12 AM

要實現(xiàn)自定義迭代器,需在類中定義__iter__和__next__方法。 ①__iter__方法返回迭代器對象自身,通常為self,以兼容for循環(huán)等迭代環(huán)境;②__next__方法控制每次迭代的值,返回序列中的下一個元素,當無更多項時應拋出StopIteration異常;③需正確跟蹤狀態(tài)並設置終止條件,避免無限循環(huán);④可封裝複雜邏輯如文件行過濾,同時注意資源清理與內存管理;⑤對簡單邏輯可考慮使用生成器函數(shù)yield替代,但需結合具體場景選擇合適方式。

Python編程語言及其生態(tài)系統(tǒng)的新興趨勢或未來方向是什麼? Python編程語言及其生態(tài)系統(tǒng)的新興趨勢或未來方向是什麼? Jun 19, 2025 am 01:09 AM

Python的未來趨勢包括性能優(yōu)化、更強的類型提示、替代運行時的興起及AI/ML領域的持續(xù)增長。首先,CPython持續(xù)優(yōu)化,通過更快的啟動時間、函數(shù)調用優(yōu)化及擬議中的整數(shù)操作改進提升性能;其次,類型提示深度集成至語言與工具鏈,增強代碼安全性與開發(fā)體驗;第三,PyScript、Nuitka等替代運行時提供新功能與性能優(yōu)勢;最後,AI與數(shù)據(jù)科學領域持續(xù)擴張,新興庫推動更高效的開發(fā)與集成。這些趨勢表明Python正不斷適應技術變化,保持其領先地位。

如何使用插座在Python中執(zhí)行網絡編程? 如何使用插座在Python中執(zhí)行網絡編程? Jun 20, 2025 am 12:56 AM

Python的socket模塊是網絡編程的基礎,提供低級網絡通信功能,適用於構建客戶端和服務器應用。要設置基本TCP服務器,需使用socket.socket()創(chuàng)建對象,綁定地址和端口,調用.listen()監(jiān)聽連接,並通過.accept()接受客戶端連接。構建TCP客戶端需創(chuàng)建socket對像後調用.connect()連接服務器,再使用.sendall()發(fā)送數(shù)據(jù)和??.recv()接收響應。處理多個客戶端可通過1.線程:每次連接啟動新線程;2.異步I/O:如asyncio庫實現(xiàn)無阻塞通信。注意事

如何在Python中切片列表? 如何在Python中切片列表? Jun 20, 2025 am 12:51 AM

Python列表切片的核心答案是掌握[start:end:step]語法並理解其行為。 1.列表切片的基本格式為list[start:end:step],其中start是起始索引(包含)、end是結束索引(不包含)、step是步長;2.省略start默認從0開始,省略end默認到末尾,省略step默認為1;3.獲取前n項用my_list[:n],獲取後n項用my_list[-n:];4.使用step可跳過元素,如my_list[::2]取偶數(shù)位,負step值可反轉列表;5.常見誤區(qū)包括end索引不

Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向對象編程中的核心概念,指“一種接口,多種實現(xiàn)”,允許統(tǒng)一處理不同類型的對象。 1.多態(tài)通過方法重寫實現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實現(xiàn)。 2.多態(tài)的實際用途包括簡化代碼結構、增強可擴展性,例如圖形繪製程序中統(tǒng)一調用draw()方法,或遊戲開發(fā)中處理不同角色的共同行為。 3.Python實現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫該方法,但不要求繼承同一父類,只要對象實現(xiàn)相同方法即可,這稱為“鴨子類型”。 4.注意事項包括保持方

See all articles