人工智能之语言领域 自然语言处理 第二十章 数据处理工具

人工智能之语言领域

第二十章 数据处理工具


文章目录

  • 人工智能之语言领域
  • [前言 数据处理工具](#前言 数据处理工具)
    • [20.1 数据采集工具](#20.1 数据采集工具)
      • [20.1.1 网络爬虫:Requests、Scrapy](#20.1.1 网络爬虫:Requests、Scrapy)
      • [20.1.2 公开数据集平台](#20.1.2 公开数据集平台)
        • [(1)Hugging Face Datasets](#(1)Hugging Face Datasets)
        • (2)Kaggle
    • [20.2 数据标注工具](#20.2 数据标注工具)
      • [20.2.1 轻量级标注:Label Studio、Brat](#20.2.1 轻量级标注:Label Studio、Brat)
        • [(1)Label Studio](#(1)Label Studio)
        • (2)Brat
      • [20.2.2 批量标注与协作工具:Doccano](#20.2.2 批量标注与协作工具:Doccano)
    • [20.3 数据存储与管理](#20.3 数据存储与管理)
      • [20.3.1 文本数据存储格式对比](#20.3.1 文本数据存储格式对比)
        • [Parquet 使用示例(高效存储)](#Parquet 使用示例(高效存储))
      • [20.3.2 大规模数据集管理:DVC(数据版本控制)](#20.3.2 大规模数据集管理:DVC(数据版本控制))
    • [20.4 实战:NLP项目全流程数据处理流水线搭建](#20.4 实战:NLP项目全流程数据处理流水线搭建)
      • 完整代码与配置
        • [Step 1: Scrapy 爬虫(ecomment/spiders/comment.py)](#Step 1: Scrapy 爬虫(ecomment/spiders/comment.py))
        • [Step 2: 转换为 Parquet](#Step 2: 转换为 Parquet)
        • [Step 3: DVC 版本控制](#Step 3: DVC 版本控制)
        • [Step 4: 导入 Doccano 标注](#Step 4: 导入 Doccano 标注)
        • [Step 5: 构建训练集](#Step 5: 构建训练集)
        • [Step 6: Hugging Face Datasets 加载](#Step 6: Hugging Face Datasets 加载)
    • 数据质量保障最佳实践
    • 小结
  • 资料

前言 数据处理工具

在自然语言处理(NLP)项目中,"数据决定上限,模型决定下限" 。高质量、大规模、标注精准的数据是构建高性能 NLP 系统的前提。本章将系统介绍 NLP 项目全生命周期中的关键数据工具:从数据采集 (爬虫、公开数据集)、数据标注 (轻量级与协作平台)、数据存储 (格式选择、版本控制),到最终搭建一个端到端的数据处理流水线,助你高效构建可靠的数据基础。


20.1 数据采集工具

20.1.1 网络爬虫:Requests、Scrapy

(1)Requests:轻量级 HTTP 请求库

适合简单页面抓取或 API 调用。

python 复制代码
import requests
from bs4 import BeautifulSoup

# 抓取新闻标题(示例)
url = "https://example-news.com"
headers = {"User-Agent": "Mozilla/5.0"}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

titles = [h2.get_text().strip() for h2 in soup.find_all('h2', class_='title')]
print(titles[:5])

适用场景 :单页数据、RESTful API、小规模采集

⚠️ 注意 :遵守 robots.txt,设置合理请求间隔(time.sleep


(2)Scrapy:专业级爬虫框架

支持并发、自动重试、中间件、管道(Pipeline)等企业级功能。
新链接
Start URLs
Downloader
Spider

(解析HTML)
Item Pipeline

(清洗/存储)

项目结构示例

bash 复制代码
news_spider/
├── scrapy.cfg
└── news_spider/
    ├── __init__.py
    ├── items.py        # 定义数据结构
    ├── pipelines.py    # 存储逻辑
    ├── settings.py     # 配置(UA、延迟等)
    └── spiders/
        └── news.py     # 爬虫逻辑

核心代码(spiders/news.py)

python 复制代码
import scrapy

class NewsSpider(scrapy.Spider):
    name = 'news'
    start_urls = ['https://example-news.com']

    def parse(self, response):
        for article in response.css('div.article'):
            yield {
                'title': article.css('h2::text').get(),
                'url': article.css('a::attr(href)').get(),
                'date': article.css('.date::text').get()
            }
        
        # 翻页
        next_page = response.css('a.next::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)

运行与导出

bash 复制代码
scrapy crawl news -o news.json  # 输出 JSON 文件

优势 :高并发、自动去重、可扩展

📌 中文编码问题 :在 settings.py 中设置 FEED_EXPORT_ENCODING = 'utf-8'


20.1.2 公开数据集平台

(1)Hugging Face Datasets

提供 20,000+ 标准化 NLP 数据集,一键加载。

python 复制代码
from datasets import load_dataset

# 加载中文情感分析数据集
dataset = load_dataset("liukun95/sentiment_chinese")  # 示例ID

train_data = dataset["train"]
print(train_data[0])  # {'text': '这个电影太棒了!', 'label': 1}

# 直接转为 PyTorch DataLoader
dataloader = torch.utils.data.DataLoader(
    train_data.with_format("torch"),
    batch_size=8
)

🔍 搜索技巧 :在 Hugging Face Datasets Hub 按语言(Chinese)、任务(Text Classification)筛选


(2)Kaggle

竞赛平台,含大量高质量标注数据(如 Chinese Text Multi-classification)。

  • 下载方式:

    bash 复制代码
    kaggle datasets download -d user/dataset-name
    unzip dataset-name.zip
  • 优势:常附带 baseline 代码、讨论区经验


20.2 数据标注工具

20.2.1 轻量级标注:Label Studio、Brat

(1)Label Studio

开源、支持多模态(文本、图像、音频)、Web 界面友好。

安装与启动

bash 复制代码
pip install label-studio
label-studio start

文本分类配置示例(config.xml)

xml 复制代码
<View>
  <Text name="text" value="$text"/>
  <Choices name="sentiment" toName="text">
    <Choice value="positive"/>
    <Choice value="negative"/>
    <Choice value="neutral"/>
  </Choices>
</View>

导入数据(JSONL 格式)

json 复制代码
{"text": "服务态度很好!"}
{"text": "物流太慢了。"}

优势:支持主动学习、模型预标注、多人协作(企业版)


(2)Brat

专为序列标注(NER、关系抽取)设计的轻量工具。

  • 基于 Web,无需数据库
  • 输出标准 standoff format(.ann 文件)

标注界面示例

复制代码
文本: 马云是阿里巴巴的创始人。
标注: T1 Person 0 2 马云
     T2 Organization 3 6 阿里巴巴
     R1 Founder Arg1:T1 Arg2:T2

📌 适用场景:学术研究、小规模 NER 项目


20.2.2 批量标注与协作工具:Doccano

Doccano 是开源的文本标注平台,支持:

  • 文本分类
  • 序列标注(NER)
  • 序列到序列(翻译、摘要)

Docker 一键部署

bash 复制代码
docker pull doccano/doccano
docker run -d --name doccano -p 8000:8000 doccano/doccano

访问 http://localhost:8000,创建项目、上传数据、分配标注员。

数据导入格式(JSONL)

json 复制代码
{"text": "北京是中国的首都。"}
{"text": "苹果发布了新款 iPhone。"}

导出格式

  • 分类:CSV(text, label)
  • NER:spaCy 格式、CoNLL-U

优势:支持团队协作、进度跟踪、API 接口


20.3 数据存储与管理

20.3.1 文本数据存储格式对比

格式 优点 缺点 适用场景
CSV Excel 可读、简单 不支持嵌套、编码问题 表格型数据(分类标签)
JSON 结构灵活、嵌套支持 文件大、无压缩 小规模标注数据
JSONL 流式读取、一行一记录 无 Schema 校验 大规模日志、爬虫输出
Parquet 列式存储、高压缩、快查询 需要额外库(pyarrow) TB 级数据仓库
Parquet 使用示例(高效存储)
python 复制代码
import pandas as pd

# 保存为 Parquet
df = pd.DataFrame({"text": ["你好", "世界"], "label": [1, 0]})
df.to_parquet("data.parquet", engine='pyarrow')

# 读取(比 CSV 快 5-10 倍)
df = pd.read_parquet("data.parquet")

💡 建议

  • 小项目 → CSV/JSONL
  • 大数据 → Parquet + Apache Arrow

20.3.2 大规模数据集管理:DVC(数据版本控制)

DVC(Data Version Control) 将数据/模型纳入 Git 工作流,解决:

  • "数据太大无法提交 Git"
  • "无法追踪数据变更"
核心原理
  • Git 存储 元数据指针(.dvc 文件)
  • 数据文件存储在 本地/云存储(如 S3、GCS)

dvc add
原始数据

raw_data.csv
raw_data.csv.dvc

(Git 跟踪)
.gitignore

忽略 raw_data.csv
DVC Remote

(S3/GCS/本地目录)

使用流程
bash 复制代码
# 初始化 DVC
dvc init

# 添加数据文件
dvc add data/raw_data.csv

# 提交元数据
git add data/raw_data.csv.dvc .gitignore
git commit -m "Add raw data"

# 推送数据到远程存储(如 AWS S3)
dvc remote add -d myremote s3://mybucket/dvcstore
dvc push

优势

  • 与 Git 协同工作
  • 支持数据流水线(dvc run
  • 团队共享数据版本

20.4 实战:NLP项目全流程数据处理流水线搭建

我们将构建一个中文情感分析项目的数据流水线:

  1. 采集:爬取电商评论(Scrapy)
  2. 存储:保存为 Parquet
  3. 标注:用 Doccano 标注情感(正/负)
  4. 版本控制:DVC 管理标注后数据
  5. 加载:Hugging Face Datasets 读入训练

完整代码与配置

Step 1: Scrapy 爬虫(ecomment/spiders/comment.py)
python 复制代码
import scrapy

class CommentSpider(scrapy.Spider):
    name = 'jd_comment'
    start_urls = ['https://item.jd.com/123456.html']  # 示例商品

    def parse(self, response):
        for comment in response.css('.comment-item'):
            yield {
                'text': comment.css('.comment-content::text').get(),
                'user': comment.css('.user-info::text').get()
            }

运行并导出:

bash 复制代码
scrapy crawl jd_comment -o comments.jsonl
Step 2: 转换为 Parquet
python 复制代码
import pandas as pd

df = pd.read_json("comments.jsonl", lines=True)
df = df.dropna(subset=["text"])
df.to_parquet("data/raw/comments.parquet", index=False)
Step 3: DVC 版本控制
bash 复制代码
dvc init
dvc add data/raw/comments.parquet
git add data/raw/comments.parquet.dvc
git commit -m "Add raw comments"
Step 4: 导入 Doccano 标注
  • 启动 Doccano:doccano start
  • 创建"情感分析"项目(文本分类)
  • 上传 comments.jsonl(仅保留 text 字段)
  • 标注后导出为 labeled.jsonl
Step 5: 构建训练集
python 复制代码
# convert_to_csv.py
import json

with open("labeled.jsonl") as f, open("train.csv", "w") as out:
    out.write("text,label\n")
    for line in f:
        data = json.loads(line)
        # Doccano 输出: {"text": "...", "label": ["positive"]}
        label = 1 if "positive" in data["label"] else 0
        out.write(f'"{data["text"]}",{label}\n')
Step 6: Hugging Face Datasets 加载
python 复制代码
from datasets import load_dataset

dataset = load_dataset("csv", data_files="train.csv")
dataset = dataset["train"].train_test_split(test_size=0.2)

# 直接用于 Trainer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
def tokenize(batch):
    return tokenizer(batch["text"], padding=True, truncation=True)

dataset = dataset.map(tokenize, batched=True)

数据质量保障最佳实践

环节 工具/方法
去重 datasketch(MinHash)、Pandas drop_duplicates
清洗 正则表达式、ftfy(修复乱码)
平衡 imblearn(过采样/欠采样)
验证 自定义 Schema(pydantic)、人工抽样检查

小结

NLP 项目的成功始于高质量数据。本章覆盖了从采集(Scrapy)、标注(Doccano)、存储(Parquet)到版本控制(DVC)的完整工具链:

  • 小规模项目:Requests + Label Studio + CSV
  • 工业级项目:Scrapy + Doccano + Parquet + DVC

掌握这些工具,你就能构建可复现、可协作、可扩展的 NLP 数据基础设施,为模型训练打下坚实基础。


资料

咚咚王

《Python 编程:从入门到实践》

《利用 Python 进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第 3 版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow 机器学习实战指南》

《Sklearn 与 TensorFlow 机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python 深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习 +(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第 2 版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨 +&+ 张孜铭

《AIGC 原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战 AI 大模型》

《AI 3.0》

相关推荐
Agent产品评测局1 小时前
2026 年企业自动化路线图:如何通过 LLM+RPA 实现全流程闭环?深度解析智能体架构与落地路径
人工智能·ai·chatgpt·架构·自动化·rpa
迅易科技2 小时前
企业级 OpenClaw 安全检查实践:构建 AI 智能体的三道安全防线
人工智能·安全威胁分析·安全性测试
软件开发技术深度爱好者2 小时前
深入浅出解析AI中的Tokens
人工智能·科普向未来
AC赳赳老秦2 小时前
OpenClaw办公文档处理技能:批量转换PDF/Excel,提取数据高效办公
大数据·人工智能·python·django·去中心化·deepseek·openclaw
听风吹等浪起2 小时前
ResNet模型进阶改进方案完整集合——计算机视觉从业者的结构化性能增强工具箱
人工智能·计算机视觉
环小保2 小时前
半导体制造的绿色“隐形”战场:废气治理如何“精准狙击”?
大数据·人工智能
珠海西格2 小时前
1MW光伏项目“四可”装置数据采集类设备具体配置详解
服务器·网络·人工智能·分布式·安全
Chen三变2 小时前
Pytorch和Tensorflow两大架构如何安装?想在自己的电脑上跑神经网络?如何找到部署自己电脑版本的神经网络工具?人工智能专业的学生集合!!
人工智能·pytorch·tensorflow
爱打代码的小林2 小时前
OpenCV 实战:基于 SIFT 特征匹配的图像认证系统
人工智能·opencv·计算机视觉