1. 數據獲取方法
掌握公開數據集的使用、數據質量評估指標、了解常見的網絡爬蟲技術
🧩 一、公開數據集的使用
? 常見平臺(一定要熟)
平臺 | 簡介 | 示例數據集 |
---|---|---|
Hugging Face Datasets | 專注 NLP、CV 領域的大模型訓練數據集庫 | IMDB、SQuAD、Common Crawl、wikitext |
Kaggle | 各類競賽+高質量數據集 | 泰坦尼克號、生物醫學、情感分析等 |
UCI 數據庫 | 經典機器學習數據集 | Iris、成人收入預測 |
Google Dataset Search | 谷歌開放數據搜索引擎 | 全球各類開放數據 |
OpenAI, Meta, Google AI | 提供 LLM 訓練的部分公開數據說明 | WebText、C4、The Pile 等(間接獲取) |
? 如何使用 Hugging Face 數據集?
from datasets import load_datasetdataset = load_dataset("imdb") # 電影評論情感分析數據
print(dataset["train"][0])
? 數據集自動緩存下載,內置分詞、預處理功能,適合訓練 Transformer 類模型!
? 面試押題:
Q:你如何選擇用于訓練大模型的數據集?
A:我會優先考慮數據規模、質量、語料多樣性和開放協議,比如使用 Hugging Face 上的 C4、The Pile 數據集,同時避免版權風險。
🧪 二、數據質量評估指標
為了訓練高質量模型,數據本身也要“干凈、全面、有代表性”:
維度 | 評估指標 | 說明 |
---|---|---|
完整性 | 缺失值率、字段覆蓋率 | 是否有字段缺失或樣本丟失 |
一致性 | 重復樣本率、一致編碼 | 同一類型樣本是否標準化 |
準確性 | 噪音率、標簽準確度 | 標簽是否正確,是否有錯別字等 |
多樣性 | 詞匯豐富度、類別平衡 | 是否只集中在少量領域或話題 |
偏差性 | 來源是否單一、過擬合語料 | 檢查是否存在訓練偏差 |
? 可視化檢查方法
- 分析 label 分布(條形圖)
- 檢查文本長度分布
- 去重、清洗、分詞分析
- 使用 TF-IDF/Embedding 評估內容多樣性
? 面試押題:
Q:你怎么評估一個 NLP 數據集的質量?
A:
- 分析標簽分布是否平衡
- 檢查是否有重復或亂碼數據
- 看語料是否覆蓋目標領域或任務
🕸? 三、網絡爬蟲技術(實戰 + 原理)
如果找不到合適的數據集,可以自己爬!
? 爬蟲常用庫
使用 Python 的 requests 庫等發送 HTTP 請求獲取網頁內容,然后通過解析庫如 BeautifulSoup 或 lxml 來解析 HTML 頁面,提取所需的數據。這種方法簡單靈活,適用于大多數網頁的爬取。
工具 | 用途 |
---|---|
requests | 發送 HTTP 請求獲取網頁源碼 |
BeautifulSoup | 解析 HTML 頁面,提取文本 |
Selenium | 控制瀏覽器,適合動態加載網頁 |
Scrapy 死磕rai皮 | 強大的爬蟲框架,適合大型項目 |
playwright | 新一代瀏覽器自動化,效率高 |
? 簡單示例:爬百度百科某個詞條
import requests
from bs4 import BeautifulSoupurl = "https://baike.baidu.com/item/人工智能"
headers = {"User-Agent": "Mozilla/5.0"}
html = requests.get(url, headers=headers).text
soup = BeautifulSoup(html, "html.parser")content = soup.find_all("div", {"class": "lemma-summary"})
print(content[0].text.strip())
? 面試押題:
Q:你如何獲取訓練語料?是否使用過爬蟲?
答:
- 如果沒有現成數據,我會用 requests + BeautifulSoup 爬取新聞、百科等
- 對于需要登錄或動態加載的頁面,會使用 Selenium 或 Playwright
? 總結:三大能力表格
能力 | 工具 | 是否面試重點 |
---|---|---|
公共數據獲取 | HuggingFace、Kaggle、UCI | ??? |
數據質量評估 | 可視化分析、分布檢查、清洗 | ?? |
網絡爬蟲 | requests、Selenium、Scrapy | ?? |
2. 數據清洗技術
熟悉常見的文本去重算法原理、如 MinHash,了解常見訓練數據配比策略,如代碼、數學、通用知識問答等各種占比多少比較合理
🧹 第一部分:文本去重算法原理
🔍 為什么需要文本去重?
- 減少重復內容帶來的 模型偏置
- 降低訓練成本,提高 數據多樣性
- 提升模型在真實應用場景下的泛化能力
🚀 常見去重算法對比
(1) Exact Match(精確匹配)
- 原理:精確匹配是一種最簡單的文本匹配方法,它直接比較兩個文本是否完全相同。在這種方法中,只有當兩個文本的每個字符都完全一致時,才認為它們是匹配的。
- 優點
- 代碼實現簡單:不需要復雜的算法和模型,只需要進行字符串的直接比較,代碼實現簡單易懂。
- 結果明確:匹配結果清晰,不存在模糊性,能夠準確判斷兩個文本是否完全相同。
- 缺點
- 缺乏靈活性:對文本的變化非常敏感,即使兩個文本在語義上非常相似,但只要存在一個字符的差異,就會被判定為不匹配。
- 適用范圍有限:在實際應用中,由于文本的表達方式多樣,很難出現完全相同的文本,因此精確匹配的應用場景受到很大限制。
- 適用場景:適用于對文本準確性要求極高,且文本表達方式相對固定的場景,如數據庫中的主鍵匹配、文件的哈希值比對等。
2. Jaccard 相似度
- 原理:Jaccard 相似度用于衡量兩個集合之間的相似程度,其計算公式為 (J(A,B)=\frac{|A\cap B|}{|A\cup B|}),其中 (A) 和 (B) 是兩個集合,(|A\cap B|) 表示兩個集合的交集元素個數,(|A\cup B|) 表示兩個集合的并集元素個數。對于文本數據,通常將文本轉換為詞集合或 n - 元組集合來計算 Jaccard 相似度。
- 優點
- 簡單直觀:基于集合的交集和并集計算相似度,概念簡單,容易理解和實現。
- 對文本長度不敏感:Jaccard 相似度只關注集合中元素的共同性,不依賴于文本的長度,因此在處理不同長度的文本時具有較好的穩定性。
- 缺點
- 忽略詞序:將文本轉換為集合后,會忽略詞的順序信息,導致一些語義相近但詞序不同的文本可能被判定為相似度較低。
- 對停用詞敏感:如果文本中包含大量的停用詞(如“的”“是”“在”等),這些停用詞會影響集合的交集和并集計算,從而降低相似度計算的準確性。
- 適用場景:適用于對詞序不太敏感,更關注文本中詞匯共同性的場景,如文檔分類、網頁去重等。
3. MinHash
- 原理:MinHash 算法基于 Jaccard 相似度,用于快速估算兩個集合之間的 Jaccard 相似度。具體步驟如下:
- 將文本分割成若干個小塊,形成一個集合。
- 使用多個不同的哈希函數對集合中的每個元素進行哈希計算,對于每個哈希函數,記錄集合中元素的最小值哈希值,這些最小值構成了該集合的 MinHash 簽名。
- 通過比較兩個集合的 MinHash 簽名中相同元素的比例,來近似估算它們的 Jaccard 相似度。
- 優點
- 計算效率高:MinHash 算法可以在不計算集合交集和并集的情況下,快速估算 Jaccard 相似度,尤其適用于大規模數據的處理。
- 節省存儲空間:只需要存儲 MinHash 簽名,而不需要存儲完整的文本集合,大大節省了存儲空間。
- 缺點
- 近似計算存在誤差:MinHash 是一種近似算法,估算的 Jaccard 相似度可能與真實值存在一定的誤差。
- 哈希函數選擇和數量影響準確性:哈希函數的選擇和數量會影響 MinHash 簽名的質量和相似度計算的準確性。
- 適用場景:適用于大規模文本數據的去重、聚類等任務,在處理海量數據時能夠顯著提高效率。
4. SimHash
- 原理:SimHash 是一種用于快速計算文本相似度的局部敏感哈希(Locality-Sensitive Hashing, LSH)算法。 其核心思想是將高維特征向量映射為低維的固定長度指紋(fingerprint),并通過比較指紋的海明距離(Hamming Distance)來衡量文本之間的相似性。主要用于處理大規模文本的近似去重。具體步驟如下:
- 特征提取:將文本分詞,并為每個詞計算一個特征向量(通常使用詞的哈希值)。
- 加權:根據詞的重要性(如 TF - IDF 值)為每個特征向量賦予權重。
- 合并特征向量:將所有加權后的特征向量相加,得到一個綜合的特征向量。
- 二值化:將綜合特征向量的每個維度根據正負值轉換為 0 或 1,得到 SimHash 值。
- 相似度計算:通過比較兩個文本的 SimHash 值的漢明距離(即兩個二進制串中不同位的數量)來判斷它們的相似度,漢明距離越小,文本越相似。
- 優點
- 高效性:SimHash 算法的計算復雜度較低,能夠快速計算文本的哈希值,適用于大規模文本數據的處理。
- 對局部修改有一定的魯棒性:文本的局部修改對 SimHash 值的影響較小,能夠在一定程度上識別出語義相近的文本。
- 缺點
- 對語義理解不足:SimHash 主要基于文本的詞法特征,對語義信息的捕捉能力有限,可能會將一些語義不同但詞法相似的文本判定為相似。
- 漢明距離閾值難以確定:選擇合適的漢明距離閾值來判斷文本是否相似是一個挑戰,不同的數據集和應用場景可能需要不同的閾值。
- 適用場景:適用于大規模文本的近似去重,如網頁去重、新聞文章去重等。
5. BERT Embedding + 相似度閾值
- 原理:
- 文本編碼:使用預訓練的 BERT 模型將文本轉換為固定長度的向量表示(即 BERT Embedding)。BERT 模型能夠學習到文本的語義信息,將文本映射到一個低維的向量空間中。
- 相似度計算:計算兩個文本 BERT Embedding 之間的相似度,常用的相似度度量方法有余弦相似度、歐氏距離等。
- 閾值判斷:設定一個相似度閾值,當兩個文本的相似度超過該閾值時,認為它們是相似的。
- 優點
- 語義理解能力強:BERT 模型能夠捕捉文本的語義信息,對語義相近但表達方式不同的文本有較好的識別能力。
- 通用性好:適用于各種類型的文本匹配任務,不需要針對特定的領域進行復雜的特征工程。
- 缺點
- 計算成本高:BERT 模型是一個大型的深度學習模型,計算 BERT Embedding 需要較高的計算資源和時間成本。
- 閾值選擇困難:相似度閾值的選擇需要根據具體的數據集和應用場景進行調整,不同的閾值可能會導致不同的匹配結果。
- 適用場景:適用于對語義理解要求較高的文本匹配任務,如語義搜索、問答系統等。
算法 原理簡述 特點 場景適用 Exact Match 哈希后全匹配 快,但只對完全重復有效 小規模清洗 Jaccard 相似度 比較詞集合的交集/并集 簡單直觀,但計算慢 精確清洗 MinHash 快速估算 Jaccard 相似度 高效、可擴展、用于大規模數據 大模型文本去重首選 SimHash 把文本映射為指紋向量 快速近似查重(局部敏感哈希) 適合短文本(如微博) BERT Embedding + 相似度閾值 用 BERT 提取語義,再計算余弦相似度 語義去重,但耗時大 高質量語料過濾
? 面試押題:
Q:大模型訓練前,你如何對大規模語料做去重?
答:
- 小數據量用 exact match 或 Jaccard;
- 大規模語料我會用 MinHash 或 SimHash 實現高效去重;
- 對于語義層的重復,我會用 BERT + 向量檢索方式做精細化清洗。
🧪 第二部分:大模型訓練數據的配比策略
大模型的訓練效果,很大程度取決于不同類型數據的配比策略。以下是常見的訓練數據構成比例(以語言模型訓練為主):
數據類型 | 內容示例 | 推薦占比 | 說明 |
---|---|---|---|
網頁語料 | Common Crawl, Wikipedia, Reddit | 30%~40% | 多樣性強、通用性廣 |
書籍/論文類 | Books3, arXiv, PubMed | 10%~15% | 提升專業表達能力 |
問答類數據 | SQuAD, NaturalQuestions | 5%~10% | 優化 QA 能力 |
對話類語料 | OpenSubtitles, ShareGPT | 10%~20% | 提升對話能力 |
代碼語料 | GitHub, CodeSearchNet | 5%~10% | 提升代碼生成/理解 |
數學/邏輯類 | MATH, GSM8K, ProofPilot | 5%~8% | 提升推理能力 |
多語言語料 | CC100, mC4 | 5%~15% | 提升多語種能力(如訓練 GPT4) |
不同模型(如 GPT vs. 專用模型)會微調配比。
🎯 舉個例子:LLaMA 訓練數據比例(Meta)
LLaMA 用了 Common Crawl、C4、Books、ArXiv 等數據,強調多語種 + 高質量書面語,書籍語料占比更高,用于提升文本生成質量。
? 面試押題:
Q:你如何設計大模型訓練數據的配比策略?
答:
- 我會參考現有模型(如 LLaMA、Bloom)的經驗,構建多元數據池
- 保證語料覆蓋常識、問答、代碼、對話、數學等多場景
- 同時考慮 token 分布平衡,避免某類數據主導模型行為
📌 總結一句話
文本去重要選對算法(MinHash 精準又高效),數據配比要“廣+精+多樣”,讓模型具備語言理解、推理、生成等多項能力。