3 大語言模型預訓練數據-3.2 數據處理-3.2.2 冗余去除——3.后綴數組(Suffix Array)在大模型數據去重中的原理與實戰

后綴數組(Suffix Array)在大模型數據去重中的原理與實戰

        • 一、后綴數組的核心原理與數據結構
        • 二、后綴數組去重的核心流程
          • 1. **文檔預處理與合并**
          • 2. **構建后綴數組**
          • 3. **計算最長公共前綴(LCP)數組**
          • 4. **基于LCP檢測重復文檔**
        • 三、具體案例:后綴數組去重實戰
          • 1. **簡化文檔示例**
          • 2. **生成后綴并排序(簡化版)**
          • 3. **計算LCP數組(關鍵步驟)**
          • 4. **重復檢測與去重**
        • 四、工程化實現與優化(Python簡化代碼)
        • 五、后綴數組在大模型數據處理中的優勢與局限
        • 六、與SimHash算法的對比應用場景

一、后綴數組的核心原理與數據結構

后綴數組是一種高效處理字符串的數據結構,本質是將字符串的所有后綴排序后存儲索引的數組。其核心能力在于:

  1. 高效定位重復子串:通過計算相鄰后綴的最長公共前綴(LCP),快速識別重復或高度相似的文本片段;
  2. 時間復雜度優勢:構建后綴數組的時間復雜度可優化至O(n)(n為文本長度),LCP計算為O(n),適合大規模文本處理。
二、后綴數組去重的核心流程

以兩篇相似文檔去重為例,步驟如下:

1. 文檔預處理與合并
  • 文檔A:“機器學習模型在NLP任務中表現優異,尤其是大模型訓練技術。”
  • 文檔B:“大模型訓練技術在機器學習模型的NLP任務中至關重要。”
  • 合并文檔:為區分來源,添加分隔符后合并為"文檔A內容<SEP>文檔B內容"
2. 構建后綴數組
  • 生成所有后綴:合并文檔的每個位置i從i開始的子串(后綴),例如:
    • 位置0后綴:“機器學習模型在NLP任務中表現優異,尤其是大模型訓練技術。大模型訓練技術在機器學習模型的NLP任務中至關重要。”
    • 位置5后綴:“習模型在NLP任務中表現優異,尤其是大模型訓練技術。大模型訓練技術在機器學習模型的NLP任務中至關重要。”
    • …(直到最后一個字符的后綴)
  • 排序后綴:按字典序對所有后綴排序,得到后綴數組SA,其中SA[i]表示第i小的后綴在原字符串中的起始位置。
3. 計算最長公共前綴(LCP)數組
  • LCP數組記錄排序后相鄰后綴的最長公共前綴長度,例如:
    • 假設排序后相鄰的兩個后綴分別來自文檔A和文檔B的重復段落,則它們的LCP值會很大(如超過預設閾值)。
4. 基于LCP檢測重復文檔
  • 設定重復閾值(如LCP長度>100字符),當相鄰后綴的LCP超過閾值且來自不同文檔時,判定文檔存在大量重復內容。
三、具體案例:后綴數組去重實戰
1. 簡化文檔示例
  • 文檔X:“ABCDEFGABCXYZ”
  • 文檔Y:“XYZABCDEFGAB”
  • 合并字符串:“ABCDEFGABCXYZXYZABCDEFGAB”(長度n=23)
2. 生成后綴并排序(簡化版)
后綴起始位置后綴內容排序后順序(SA數組)
0ABCDEFGABCXYZ…1
9ABCXYZXYZABC…3
12XYZXYZABC…5
15YZABCDEFGAB6
16ZABCDEFGAB7
2BCDEFGABCXYZ…2
3. 計算LCP數組(關鍵步驟)
  • 對排序后的相鄰后綴計算LCP,例如:
    • 后綴SA[1](起始位置0)與SA[2](起始位置2)的LCP為0(前綴無公共部分);
    • 后綴SA[3](起始位置9,內容"ABCXYZ…“)與SA[4](假設起始位置15,內容"YZABCDEFGAB”)的LCP為0;
    • 重點:后綴SA[i](來自文檔X)與SA[i+1](來自文檔Y)的LCP可能高達6(如"ABCDEF"重復)。
4. 重復檢測與去重
  • 當LCP值≥預設閾值(如5)且后綴來自不同文檔時,判定文檔X和Y存在重復內容(實際案例中,文檔X和Y的公共子串為"ABCDEFGAB",長度9)。
四、工程化實現與優化(Python簡化代碼)
import numpy as npclass SuffixArray:def __init__(self, text):self.text = text + '\0'  # 終止符self.n = len(self.text)self.sa = self._build_suffix_array()self.lcp = self._build_lcp()def _build_suffix_array(self):# 簡化版后綴數組構建(倍增法)sa = np.arange(self.n)rank = np.array([ord(c) for c in self.text], dtype=np.int32)temp = np.zeros(self.n, dtype=np.int32)k = 1while k < self.n:# 按第二關鍵字排序sa = sa[np.argsort(rank[sa + k] if sa + k < self.n else -1)]# 按第一關鍵字排序sa = sa[np.argsort(rank[sa])]# 更新排名temp[sa[0]] = 0for i in range(1, self.n):if (rank[sa[i]] != rank[sa[i-1]] or rank[sa[i]+k] != rank[sa[i-1]+k]):temp[sa[i]] = temp[sa[i-1]] + 1else:temp[sa[i]] = temp[sa[i-1]]rank, temp = temp, rankif rank[sa[-1]] == self.n - 1:breakk <<= 1return sadef _build_lcp(self):# 構建LCP數組(Kasai算法)lcp = np.zeros(self.n, dtype=np.int32)rank = np.zeros(self.n, dtype=np.int32)for i in range(self.n):rank[self.sa[i]] = ih = 0for i in range(self.n):if rank[i] == 0:continuej = self.sa[rank[i] - 1]while i + h < self.n and j + h < self.n and self.text[i+h] == self.text[j+h]:h += 1lcp[rank[i]] = hif h > 0:h -= 1return lcp# 去重案例
def deduplicate_docs(doc1, doc2, threshold=5):# 合并文檔并標記分隔符merged = f"{doc1}<SEP>{doc2}"sa = SuffixArray(merged)# 查找跨分隔符的高LCP值sep_pos = merged.index('<SEP>')max_lcp = 0for i in range(1, len(sa.sa)):# 檢查相鄰后綴是否來自不同文檔suffix1_doc = 0 if sa.sa[i-1] < sep_pos else 1suffix2_doc = 0 if sa.sa[i] < sep_pos else 1if suffix1_doc != suffix2_doc and sa.lcp[i] > max_lcp:max_lcp = sa.lcp[i]# 判斷是否重復is_duplicate = max_lcp >= thresholdreturn is_duplicate, max_lcp# 測試
doc_x = "機器學習大模型訓練技術在NLP任務中表現優異"
doc_y = "NLP任務中機器學習大模型訓練技術至關重要"
is_dup, lcp_len = deduplicate_docs(doc_x, doc_y, threshold=10)
print(f"文檔重復判定:{'是' if is_dup else '否'},最大LCP長度:{lcp_len}")
# 輸出:文檔重復判定:是,最大LCP長度:12(公共子串"機器學習大模型訓練技術")
五、后綴數組在大模型數據處理中的優勢與局限
  1. 核心優勢

    • 精確匹配能力:能定位到文檔中完全重復的子串,適合檢測拷貝、轉載類重復文檔;
    • 長文本效率:相比逐字符比對,后綴數組+LCP的時間復雜度更低,支持TB級文檔處理;
    • 多文檔批量處理:可合并多個文檔構建統一后綴數組,一次性檢測所有文檔間的重復。
  2. 應用局限

    • 無法處理語義重復:對“同義替換”“語序調整”等非精確重復不敏感(需結合詞向量補充);
    • 內存消耗:構建后綴數組需O(n)內存,對超大型文檔(如單文檔>1GB)需分塊處理;
    • 閾值依賴:LCP閾值需根據數據特性調整,閾值過高可能漏判,過低可能誤判。
  3. 優化方向

    • 結合倒排索引:對高頻子串建立索引,快速定位潛在重復文檔;
    • 分層處理:先通過SimHash過濾語義重復,再用后綴數組處理精確重復,降低計算量。
六、與SimHash算法的對比應用場景
維度SimHash算法后綴數組+LCP
重復類型語義相似(如改寫、翻譯文檔)精確重復(如拷貝、轉載文檔)
時間復雜度O(n)(哈希計算)O(n log n)(構建后綴數組)
空間復雜度O(1)(存儲固定長度哈希值)O(n)(存儲后綴數組和LCP)
大模型場景訓練數據去重(過濾語義冗余)原始語料清洗(刪除拷貝數據)

通過后綴數組與SimHash的結合使用,可在大模型數據處理中實現“語義去重+精確去重”的雙層過濾,提升數據質量。

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

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

相關文章

數據庫外連接詳解:方式、差異與關鍵注意事項

&#x1f504; 數據庫外連接詳解&#xff1a;方式、差異與關鍵注意事項 外連接用于保留至少一個表的全部行&#xff0c;即使另一表無匹配記錄。以下是三種外連接方式的深度解析&#xff1a; &#x1f50d; 一、外連接的三種類型 1. 左外連接 (LEFT OUTER JOIN) 作用&#xf…

vscode把less文件生成css文件配置,設置生成自定義文件名稱和路徑

1.下載less插件 在插件市場搜索 less 2.設置生成配置 3.修改out屬性 "less.compile": {"compress": false, // 是否刪除多余空白字符 一行顯示[壓縮]"sourceMap": false, // 是否創建文件目錄樹&#xff0c;true的話會自動生成一個 .css.map …

探索相機成像的奧秘 - 齊次坐標、徑向失真和圖像傳感器傾斜

引言 大家好&#xff01;今天我們將一起探索相機成像背后的一些關鍵技術概念&#xff1a;齊次坐標、徑向失真和圖像傳感器傾斜。這些概念對于理解相機如何捕捉和處理圖像至關重要。我們將通過簡單易懂的語言和嚴謹的公式來詳細解釋這些概念。 齊次坐標&#xff08;Homogeneou…

校企協同育人,智慧養老實訓基地助力人才就業無憂

隨著我國人口老齡化程度不斷加深&#xff0c;智慧養老產業蓬勃發展&#xff0c;對專業人才的需求日益迫切。校企協同打造智慧養老實訓基地&#xff0c;成為解決人才供需矛盾、提升人才培養質量的重要途徑。通過科學的建設方案&#xff0c;智慧養老實訓基地能夠為學生提供實踐平…

從需求到落地:一個AI訓練平臺的售前全流程復盤

目錄 一、項目背景:客戶要建自己的AI訓練平臺 二、需求梳理三板斧:并發量、存儲帶寬、模型種類 1. 并發訓練量 2. 存儲帶寬需求 3. 模型類型與參數規模 三、解決方案設計:GPU選型 + 高速網絡 + 存儲架構 ? GPU服務器選型 ? 網絡與通信架構 ? 存儲與數據緩存 四…

織夢DedeCMS轉WordPress

最近&#xff0c;有個用戶找模板兔遷移網站&#xff0c;源站用的dede&#xff0c;需要轉成wp&#xff0c;文章數量大概7000-8000篇&#xff0c;其中有個需求是保證舊文章的鏈接有效&#xff0c;在wp上的新文章與舊文章的鏈接類型不一樣&#xff0c;所以這涉及到偽靜態來處理跳轉…

installGo.sh

#!/bin/bash # 檢查是否以root用戶運行 if [ "$(id -u)" -ne 0 ]; then echo "請使用root權限運行此腳本" exit 1 fi # 檢查是否安裝了必要的工具 for cmd in curl wget tar; do if ! command -v $cmd &> /dev/null; then echo…

【技術難題】el-table的全局數據排序實現示例,不受分頁影響,以及異步請求帶來的頁面渲染問題

參考鏈接:https://blog.csdn.net/qq_35770559/article/details/131183121 問題代碼 編輯頁面detail.vue <el-form title="列表信息" name="detail"><el-form><el-form-item><el-buttontype="cyan"icon="el-icon-p…

非功能測試

非功能測試范疇&#xff1a;界面測試&#xff0c;易用性測試&#xff0c;兼容性測試&#xff0c;文檔測試&#xff0c;安裝/卸載測試等等 界面測試 1.窗體界面測試 1.窗體定義&#xff1a;指整個軟件窗口&#xff0c;也可稱為窗口&#xff0c;是界面測試的基本單位 2.控件分…

一起endpoint迷路的問題排查總結

今天上班&#xff0c;一到工位上&#xff0c;就有同事和我說有客戶反映自己的容器的一些指標在監控平臺不上報了&#xff0c;我當時一看機器所在的監控&#xff0c;發現確實是這樣 確實存在某個點開始數據就沒了&#xff0c;主要這個點當時也沒有任何的操作變更&#xff0c;于…

官方 Linker Scripts 語法和規則解析(2)

系列文章目錄 官方 Linker Scripts 語法和規則解析&#xff08;1&#xff09; 官方 Linker Scripts 語法和規則解析&#xff08;2&#xff09; 官方 Linker Scripts 語法和規則解析&#xff08;3&#xff09; 鏈接腳本(Linker Scripts)語法和規則解析(自官方手冊) 7.9. 鏈接腳…

CentOS 7 通過YUM安裝MySQL 8.0完整指南

一、準備工作&#xff1a;更新系統與YUM源 # 1. 更換阿里云鏡像源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 2. 清理并重建緩存 yum clean all yum makecache# 3. 升級系統所有包 yum -y update 二、安裝MySQL 8.0 1. 下載…

qq郵箱 新版 怎么去掉個性簽名?

qq郵箱 新版 怎么去掉個性簽名&#xff1f; 新版的qq郵箱&#xff0c;用著還不錯&#xff0c;特別是搜索&#xff0c;比以前好多&#xff0c;以前加載的時候&#xff0c;搜索框里有一行字&#xff0c;加載不完&#xff0c;就沒法搜索&#xff0c;特別菜。現在好多了。 不過現在…

C++:string類(1)

一.初步了解STL STL是Standard Template Library的縮寫&#xff0c;中文譯為標準模板庫&#xff0c;是C標準庫的重要組成部分。它本質上是一套基于模板的通用編程工具&#xff0c;通過模板技術實現了數據結構和算法的抽象與復用&#xff0c;讓開發者無需重復編寫基礎功能&…

如何避免靜態變量初始化中的異常

確保初始化表達式的安全性 基本數據類型初始化 對于基本數據類型&#xff08;如int、double、boolean等&#xff09;的靜態變量初始化&#xff0c;要確保賦值的表達式是合法的。例如&#xff0c;在初始化一個int類型的靜態變量時&#xff0c;避免出現除數為零的情況。 class Sa…

【151】基于Springboot+Vue實現的校園訂餐管理系統小程序(有文檔+PPT+視頻)

系統介紹 視頻演示 基于SpringbootVue實現的校園訂餐管理系統小程序&#xff08;有文檔PPT視頻&#xff09; 基于SpringbootVue實現的校園訂餐管理系統小程序采用前后端分離的架構方式&#xff0c;系統設計了管理員、商家、用戶三種角色&#xff0c;系統分為管理端、小程序端&…

從 0 到 1:基于 Qwen3 Embedding 的 RAG 智能問答系統搭建指南

RAGFlow 是一個基于深度文檔理解的開源 RAG&#xff08;檢索增強生成&#xff09;引擎。 與 LLM 集成后&#xff0c;它能夠提供真實的問答功能&#xff0c;并以來自各種復雜格式數據的可靠引用為支撐。 教程鏈接&#xff1a;OpenBayes 控制臺 使用云平臺:OpenBayes signup -…

Prompt Distillation for Efficient LLM-based Recommendation

題目 基于LLM的高效推薦的快速蒸餾 論文地址&#xff1a;https://dl.acm.org/doi/10.1145/3583780.3615017 摘要 大語言模型&#xff08;LLM&#xff09;在各種任務上表現出了無與倫比的建模能力&#xff0c;例如多步推理&#xff0c;但是這些模型的輸入大部分僅限于純文本&am…

JDBC 工具類:1.0到3.0版本

一、引言 在 Java 開發中&#xff0c;與數據庫的交互是一項常見且重要的任務。JDBC&#xff08;Java Database Connectivity&#xff09;作為 Java 語言訪問數據庫的標準 API&#xff0c;為我們提供了統一的接口來操作各種數據庫。然而&#xff0c;每次進行數據庫操作都編寫大…

實驗室建設案例 | 洛陽職業技術學院—人工智能實驗室

院校簡介 洛陽職業技術學院位于千年古都、牡丹花城、絲路起點洛陽&#xff0c;是一所由洛陽市政府舉辦的公辦高職院校&#xff0c;成立于2011年&#xff0c;辦學歷史可追溯到1945年的豫西公學。學校全面貫徹黨的教育方針&#xff0c;圍繞落實立德樹人根本任務&#xff0c;秉承“…