概述
文本處理和查詢處理系統將自然語言查詢轉換為與 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 分數和語言特征實現復雜的術語加權:
加權因子 | 公式 | 目的 |
---|---|---|
頻率 IDF | log10(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_string | Elasticsearch 查詢表達式 | (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 | 文檔頻率統計 |
停用詞 | 內置套裝 | 要過濾的常用詞 |