【RAGFlow代碼詳解-10】文本處理和查詢處理

概述

文本處理和查詢處理系統將自然語言查詢轉換為與 RAGFlow 的文檔存儲后端配合使用的優化搜索表達式。該系統支持中英文文本處理,具有專門的標記化、術語加權和查詢增強技術。

在這里插入圖片描述

核心組件

FulltextQueryer 類

FulltextQueryer 類是查詢處理和文本分析的主要接口。它協調標記化、術語加權和查詢構造。

元件目的關鍵方法
FulltextQueryer主查詢處理控制器question()、paragraph()、hybrid_similarity()
RagTokenizer文本標記化和分段tokenize()、fine_grained_tokenize()
Dealer術語加權和預處理權重()、 預代幣()、拆分()

系統使用預定義的查詢字段進行初始化,這些字段在搜索期間接收不同的提升權重:

query_fields = ["title_tks^10",      # Title tokens (highest boost)"title_sm_tks^5",    # Title small tokens  "important_kwd^30",  # Important keywords (highest boost)"important_tks^20",  # Important tokens"question_tks^20",   # Question tokens"content_ltks^2",    # Content large tokens"content_sm_ltks"    # Content small tokens (base weight)
]

代幣化系統

RagTokenizer 使用基于 trie 的方法進行中文文本分割,使用 NLTK 進行英文處理:

在這里插入圖片描述

術語權重和評分

Dealer 類使用 IDF 分數和語言特征實現復雜的術語加權:

加權因子公式目的
頻率 IDFlog10(10 + (N - s + 0.5) / (s + 0.5))懲罰常用術語
文檔頻率 IDF與文檔計數類似的公式上下文感知權重
NER 權重命名實體類型乘數提升重要實體
POS 重量基于詞性的評分語法重要性

最終權重結合了以下因素: (0.3 * freq_idf + 0.7 * df_idf) * ner_weight * pos_weight

查詢處理管道

問題處理

question() 方法將用戶查詢轉換為與 Elasticsearch 兼容的查詢表達式:

在這里插入圖片描述

文本預處理函數

該系統包括幾個文本預處理實用程序:

功能目的實現
subSpecialChar()轉義 Elasticsearch 特殊字符re.sub(r"([:{}/[]-*"()
isChinese()檢測中文文本優勢基于比率的性格分析
rmWWW()刪除疑問詞和停用詞基于正則表達式的多種語言過濾
add_space_between_eng_zh()在英文和中文之間添加空格基于正則表達式的文本規范化

相似性計算

混合相似性評分

hybrid_similarity() 方法將向量相似性與基于標記的相似性相結合:
在這里插入圖片描述
公式為: vector_sim * 0.7 + token_sim * 0.3

代幣相似度算法

代幣相似性使用加權術語匹配:

# Simplified version of the similarity calculation
def similarity(self, qtwt, dtwt):s = 1e-9  # Small constant to avoid division by zerofor k, v in qtwt.items():if k in dtwt:s += v  # Add query term weight if present in documentq = 1e-9  # Query normalization factor  for k, v in qtwt.items():q += v  # Sum all query term weightsreturn s/q  # Normalized similarity score

段落處理

paragraph() 方法通過從文本內容中提取和加權關鍵術語來生成基于內容的檢索查詢:

在這里插入圖片描述
該方法構造具有動態最小匹配要求的查詢:min(3, len(keywords) // 10)

與文檔存儲集成

查詢處理系統生成與 RAGFlow 的文檔存儲層集成的 MatchTextExpr 對象:

參數目的示例值
query_fields要使用權重搜索的字段[“title_tks^10”, “content_ltks^2”]
query_stringElasticsearch 查詢表達式(term1^1.5 OR synonyms^0.2)
boost總體查詢提升因子100
minimum_should_match最低匹配項0.6 或 3

配置和定制

系統使用多個可配置資源:

資源位置目的
字典rag/res/huqie.txt中文分割詞典
NER 數據rag/res/ner.json命名實體識別映射
術語頻率rag/res/term.freq文檔頻率統計
停用詞內置套裝要過濾的常用詞

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

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

相關文章

利用機器學習優化Backtrader策略原理與實踐

1. Backtrader框架概述 1.1 Backtrader簡介 Backtrader是一個功能強大且靈活的Python庫,專為量化交易策略的開發、測試和執行而設計。它提供了豐富的功能,包括數據獲取、策略開發、回測、優化和繪圖等。Backtrader的核心優勢在于其模塊化設計和高度可擴展…

CPTS-Pressed復現(XML-RPC)

該box主要是了解wordpress-XML-RPC 的使用 端口掃描只有80端口開啟 可以使用wpscan進行掃描發現bak文件得到憑證,嘗試登陸(這里是將原密碼的2021修改為2022嘗試登陸,該主機發布時間為2022年)發現有2FA,但是能夠濫用 xm…

【機器學習深度學習】Embedding 與 RAG:讓 AI 更“聰明”的秘密

目錄 前言 一、RAG 的兩大階段 1. 知識庫構建階段 2. 查詢檢索與生成階段 二、為什么 RAG 比單純大模型更靠譜? 四、Embedding 在 RAG 中的作用 五、Embedding 的優勢 六、Embedding 的挑戰 七、RAG 優勢與挑戰對比 八、應用場景舉例 總結 前言 在大模型…

python 轉偶數

目錄 python變量轉偶數 box轉偶數 python變量轉偶數 x1 int(x1) // 2 * 2 y1 int(y1) // 2 * 2 x2 int(x2) // 2 * 2 y2 int(y2) // 2 * 2 box轉偶數 def save_mp4(output_path,box_list,img_list,clip_start,clip_end):writer imageio.get_writer(output_path,fps30,c…

Linux - 中文顯示亂碼問題解決方法(編碼查看及轉換)- 學習/實踐

1.應用場景 主要用于Linux中文顯示亂碼問題解決(編碼查看及轉換) 2.學習/操作 1.文檔閱讀 Linux中文顯示亂碼問題解決方法(編碼查看及轉換) - 整合俠 - 博客園 截圖: 2.整理輸出 TBD 后續補充 ... 3.問題/補充 TBD 后續補充 ...…

網絡_協議

關鍵詞: OSI是Open System Interconnect的縮寫,意為開放式系統互聯。 RTT : Round-Trip time 往返時間 RTO:Retransmission Timeout超時重傳時間 MSL : OSI 七層模型和 TCP/IP 四層模型 OSI七層模型和TCP/IP五層模型&#…

vscode有的結構體不能補全,有的可以補全問題的解決.

定義了一個結構體,發現不能自動補全變量名稱.而另外一個結構體卻可以正常補全.經過研究發現是,新定義的結構體變量類型uint32_t,vscode認為其是錯誤類型導致的.暫時改為int型,后發現問題消失.可以正常補全了.由于工程使用cubeide生成,uint32_t定義在軟件安裝目錄,并沒有和項目文…

JavaScript 數組核心操作實戰:最值獲取與排序實現(從基礎到優化)

在JavaScript開發中,數組的“最值獲取”和“排序”是高頻需求。本文將基于你的原始代碼,系統解析數組最值獲取、升序/降序排序的實現邏輯,通過“問題分析→代碼優化→原理講解”的流程,幫助你掌握更靈活、高效的數組操作方法&…

driver.js實現前端頁面引導

1.安裝 npm install driver.js2.實現代碼示例 <template><div class"home-container"><!-- 頁面內容 --><LeftPanel id"guide-left-panel" /><button id"guide-file-upload">文件上傳</button><button i…

技術速遞|使用 AI 應用模板擴展創建一個 .NET AI 應用與自定義數據進行對話

在本快速入門中&#xff0c;你將學習如何使用 .NET AI 應用模板創建一個 .NET AI 應用&#xff0c;與自定義數據進行對話。該模板旨在簡化 .NET 構建 AI 應用的上手體驗&#xff0c;幫助你處理常見的設置任務和配置。 先決條件 .NET 9.0 SDK 以下任一 IDE&#xff08;可選&am…

使用Cloudflare的AI Gateway代理Google AI Studio

1、說明詳見&#xff1a;詳見&#xff1a;https://developers.cloudflare.com/ai-gateway/usage/providers/google-ai-studio在"Google AI Studio"創建"API key" 在"Cloudflare"創建"AI Gateway"、獲取"Account ID"2、在“G…

Scrapy 框架實戰:構建高效的快看漫畫分布式爬蟲

一、Scrapy框架概述 Scrapy是一個為了爬取網站數據&#xff0c;提取結構性數據而編寫的應用框架&#xff0c;它提供了強大的數據提取能力、靈活的擴展機制以及高效的異步處理性能。其核心架構包括&#xff1a; Engine&#xff1a;控制所有組件之間的數據流&#xff0c;當某個…

數據結構(C語言篇):(六)單鏈表算法題(下)

目錄 前言 一、鏈表的回文結構 二、相交鏈表 三、環形鏈表?編輯 四、環形鏈表II 總結 前言 本篇博客將繼續介紹單鏈表相關的算法題&#xff0c;包括了鏈表的回文結構、相交鏈表、環形鏈表等。現在就讓我們正式開始吧&#xff01; 一、鏈表的回文結構 題目鏈接&#xff1a…

【AI自動化】VSCode+Playwright+codegen+nodejs自動化腳本生成

VSCodePlaywrightnodejs&#xff0c;能完美實現UI自動化全流程腳本自動生成和回放&#xff0c;生成的腳本方便維護&#xff0c;回放執行快速&#xff1b; 概述 Playwright 是由Microsoft開發的一個開源的跨瀏覽器自動化測試庫&#xff0c;它支持Chromium、WebKit和Firefox瀏覽…

基于能量方法的納維-斯托克斯方程高階范數有界性理論推導-陳墨仙

寫在最前面&#xff0c;圈外人&#xff0c;沒有背書沒有教育郵箱&#xff0c;發不了預印本&#xff0c;我先發csdn。剛才首發沒復制完&#xff0c;抱歉&#xff0c;現在編輯下。基于能量方法的納維-斯托克斯方程高階范數有界性理論推導作者 陳墨仙郵件 2488888241qq.com摘要納維…

Labview邪修01:貪吃蛇

從博主很小的時候就在掌機上玩過這個貪吃蛇的小游戲&#xff0c;突然有一天心血來潮的想Labview是不是也可以編這個小游戲&#xff0c;回憶一下童年&#xff01;然后就又了下面的這個程序&#xff0c;執行結果如下圖所示。 基本功能&#xff1a; 1&#xff09;點擊開始按鈕&am…

將自己的jar包發布到maven中央倉庫(2025-08-29)

將自己的jar包發布到maven中央倉庫(2025-08-29) 一、注冊賬號 https://central.sonatype.com/ 二、新建命名空間 這里的命名空間需要填寫github的用戶名因為我的用戶名是daimao0,所以命名空間填io.github.daimao0 這里要求你建一個名為ubuxfc5q7r的公共項目&#xff0c;先創…

Spring CompositeCacheManager融合緩存

這是一個非常實用但容易被忽視的組件,它在特定的緩存場景下能提供極大的靈活性。 1. 核心概念:它是什么? ??CompositeCacheManager?? 是 Spring Framework 緩存抽象(spring-context模塊)的一部分。它的核心作用正如其名——??組合(Composite)??。 它本身并不…

無懈可擊的 TCP AIMD

不特指 TCP AIMD&#xff0c;而泛指控制范疇的所有 Additive Increase / Multiplicative Decrease 算法&#xff0c;繼 難以超越的 TCP AIMD 再敘。 “你永遠不能僅憑 BBR 的吞吐更高就說 BBR 比 CUBIC 更好” 這句話怎么總是沒人看&#xff0c;這句話是這一系列文章的前提論點…