当前位置: 首页 > ds >正文

2.1 数据处理

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 相似度。具体步骤如下:
    1. 将文本分割成若干个小块,形成一个集合。
    2. 使用多个不同的哈希函数对集合中的每个元素进行哈希计算,对于每个哈希函数,记录集合中元素的最小值哈希值这些最小值构成了该集合的 MinHash 签名
    3. 通过比较两个集合的 MinHash 签名中相同元素的比例,来近似估算它们的 Jaccard 相似度
  • 优点
    • 计算效率高:MinHash 算法可以在不计算集合交集和并集的情况下,快速估算 Jaccard 相似度,尤其适用于大规模数据的处理。
    • 节省存储空间:只需要存储 MinHash 签名,而不需要存储完整的文本集合,大大节省了存储空间。
  • 缺点
    • 近似计算存在误差:MinHash 是一种近似算法,估算的 Jaccard 相似度可能与真实值存在一定的误差。
    • 哈希函数选择和数量影响准确性:哈希函数的选择和数量会影响 MinHash 签名的质量和相似度计算的准确性。
  • 适用场景:适用于大规模文本数据的去重、聚类等任务,在处理海量数据时能够显著提高效率。

4. SimHash

  • 原理:SimHash 是一种用于快速计算文本相似度的局部敏感哈希(Locality-Sensitive Hashing, LSH)算法。 其核心思想是将高维特征向量映射为低维的固定长度指纹(fingerprint),并通过比较指纹的海明距离(Hamming Distance)来衡量文本之间的相似性。主要用于处理大规模文本的近似去重。具体步骤如下:
    1. 特征提取:将文本分词,并为每个词计算一个特征向量(通常使用词的哈希值)。
    2. 加权:根据词的重要性(如 TF - IDF 值)为每个特征向量赋予权重。
    3. 合并特征向量:将所有加权后的特征向量相加,得到一个综合的特征向量。
    4. 二值化:将综合特征向量的每个维度根据正负值转换为 0 或 1,得到 SimHash 值。
    5. 相似度计算:通过比较两个文本的 SimHash 值的汉明距离(即两个二进制串中不同位的数量)来判断它们的相似度,汉明距离越小,文本越相似。
  • 优点
    • 高效性:SimHash 算法的计算复杂度较低,能够快速计算文本的哈希值,适用于大规模文本数据的处理。
    • 对局部修改有一定的鲁棒性:文本的局部修改对 SimHash 值的影响较小,能够在一定程度上识别出语义相近的文本。
  • 缺点
    • 对语义理解不足:SimHash 主要基于文本的词法特征对语义信息的捕捉能力有限,可能会将一些语义不同但词法相似的文本判定为相似。
    • 汉明距离阈值难以确定:选择合适的汉明距离阈值来判断文本是否相似是一个挑战,不同的数据集和应用场景可能需要不同的阈值。
  • 适用场景:适用于大规模文本的近似去重,如网页去重、新闻文章去重等。

5. BERT Embedding + 相似度阈值

  • 原理
    1. 文本编码使用预训练的 BERT 模型将文本转换为固定长度的向量表示(即 BERT Embedding)。BERT 模型能够学习到文本的语义信息,将文本映射到一个低维的向量空间中。
    2. 相似度计算计算两个文本 BERT Embedding 之间的相似度,常用的相似度度量方法有余弦相似度、欧氏距离等
    3. 阈值判断:设定一个相似度阈值,当两个文本的相似度超过该阈值时,认为它们是相似的
  • 优点
    • 语义理解能力强:BERT 模型能够捕捉文本的语义信息,对语义相近但表达方式不同的文本有较好的识别能力。
    • 通用性好:适用于各种类型的文本匹配任务,不需要针对特定的领域进行复杂的特征工程。
  • 缺点
    • 计算成本高:BERT 模型是一个大型的深度学习模型,计算 BERT Embedding 需要较高的计算资源和时间成本。
    • 阈值选择困难:相似度阈值的选择需要根据具体的数据集和应用场景进行调整,不同的阈值可能会导致不同的匹配结果。
  • 适用场景:适用于对语义理解要求较高的文本匹配任务,如语义搜索、问答系统等。
    算法原理简述特点场景适用
    Exact Match哈希后全匹配快,但只对完全重复有效小规模清洗
    Jaccard 相似度比较词集合的交集/并集简单直观,但计算慢精确清洗
    MinHash快速估算 Jaccard 相似度高效、可扩展、用于大规模数据大模型文本去重首选
    SimHash把文本映射为指纹向量快速近似查重(局部敏感哈希)适合短文本(如微博)
    BERT Embedding + 相似度阈值用 BERT 提取语义,再计算余弦相似度语义去重,但耗时大高质量语料过滤

✅ 面试押题:

Q:大模型训练前,你如何对大规模语料做去重?

答:

  • 小数据量用 exact match 或 Jaccard;
  • 大规模语料我会用 MinHash 或 SimHash 实现高效去重;
  • 对于语义层的重复,我会用 BERT + 向量检索方式做精细化清洗。

🧪 第二部分:大模型训练数据的配比策略

大模型的训练效果,很大程度取决于不同类型数据的配比策略。以下是常见的训练数据构成比例(以语言模型训练为主):

数据类型内容示例推荐占比说明
网页语料Common Crawl, Wikipedia, Reddit30%~40%多样性强、通用性广
书籍/论文类Books3, arXiv, PubMed10%~15%提升专业表达能力
问答类数据SQuAD, NaturalQuestions5%~10%优化 QA 能力
对话类语料OpenSubtitles, ShareGPT10%~20%提升对话能力
代码语料GitHub, CodeSearchNet5%~10%提升代码生成/理解
数学/逻辑类MATH, GSM8K, ProofPilot5%~8%提升推理能力
多语言语料CC100, mC45%~15%提升多语种能力(如训练 GPT4)

不同模型(如 GPT vs. 专用模型)会微调配比。


🎯 举个例子:LLaMA 训练数据比例(Meta)

LLaMA 用了 Common Crawl、C4、Books、ArXiv 等数据,强调多语种 + 高质量书面语,书籍语料占比更高,用于提升文本生成质量。


✅ 面试押题:

Q:你如何设计大模型训练数据的配比策略?

答:

  • 我会参考现有模型(如 LLaMA、Bloom)的经验,构建多元数据池
  • 保证语料覆盖常识、问答、代码、对话、数学等多场景
  • 同时考虑 token 分布平衡,避免某类数据主导模型行为

📌 总结一句话

文本去重要选对算法(MinHash 精准又高效),数据配比要“广+精+多样”,让模型具备语言理解、推理、生成等多项能力。

http://www.xdnf.cn/news/261.html

相关文章:

  • 【 解决Cline插件无法激活及DeepSeek模型请求卡顿或者无法加载问题】
  • CMake使用教程
  • IO流(二)
  • 从 Transformer 到文本生成 (From Transformer to Text Generation)
  • STM32---GPIO
  • Linux——进程通信
  • Spring MVC 初体验~~
  • 自定义 el-menu
  • 【jenkins】首次配置jenkins
  • 合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全
  • 代码学习总结(五)
  • cmake 语法大纲
  • 研究生面试常见问题
  • 1.Linux基础指令
  • 卷积神经网络(CNN)与VGG16在图像识别中的实验设计与思路
  • docker镜像被覆盖了怎么办?通过sha256重新上传镜像
  • VueRouter笔记
  • 6. 实战(二):用Spring AI+OpenAI构建企业级智能客服
  • LeetCode19.删除链表的倒数第N个节点
  • OpenCV图像加密和解密
  • PGSql常用操作命令
  • OBS 日期时间.毫秒时间脚本 date-and-time.lua
  • 该文件没有与之关联的程序来执行此操作
  • 图像预处理-图像噪点消除
  • 【人工智能】DeepSeek 与 RAG 技术:构建知识增强型问答系统的实战
  • 前端 实现文字打字效果(仿AI)
  • JESD204B标准及其在高速AD采集系统中的应用详解
  • 计算机网络 - 在浏览器中输入 URL 地址到显示主页的过程?
  • polkitd服务无法启动导致docker无法启动问题解决
  • pytorch基本操作2