特征提取中的数据去重策略
在大模型训练过程中,数据去重是特征工程中不可忽视的重要环节。最近在处理一个大规模文本数据集时,我踩了一个典型的坑——简单使用哈希去重导致了严重的数据偏差。
问题复现
最初我采用了最简单的方案:
import hashlib
import pandas as pd
def get_hash(text):
return hashlib.md5(text.encode()).hexdigest()
df['hash'] = df['text'].apply(get_hash)
df_clean = df.drop_duplicates(subset=['hash'])
结果发现,虽然去重了,但模型效果反而变差了。
正确做法
经过调研和实验,我总结了以下策略:
- 基于内容的多维度去重
# 使用文本相似度判断
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
def remove_duplicates_by_similarity(df, text_col, threshold=0.95):
vectorizer = TfidfVectorizer(max_features=10000)
tfidf_matrix = vectorizer.fit_transform(df[text_col])
to_drop = set()
for i in range(len(tfidf_matrix)):
if i in to_drop:
continue
similarities = cosine_similarity([tfidf_matrix[i]], tfidf_matrix[i+1:]).flatten()
similar_indices = [j+i+1 for j, sim in enumerate(similarities) if sim > threshold]
to_drop.update(similar_indices)
return df.drop(to_drop)
- 分层去重策略 对于大模型数据,建议按以下顺序处理:先去除完全重复,再进行语义相似度去重。
总结
特征提取中的数据去重需要根据具体业务场景选择合适方法,避免简单哈希导致的误删问题。

讨论