人工智能之语言领域 自然语言处理 第十八章 Python NLP生态

人工智能之语言领域

第十八章 Python NLP生态


文章目录

  • 人工智能之语言领域
  • [前言 Python NLP生态](#前言 Python NLP生态)
    • [18.1 核心数据处理库](#18.1 核心数据处理库)
      • [18.1.1 NumPy与Pandas:数值计算与数据框处理](#18.1.1 NumPy与Pandas:数值计算与数据框处理)
      • [18.1.2 spaCy:工业级NLP工具包](#18.1.2 spaCy:工业级NLP工具包)
      • [18.1.3 NLTK:学术研究常用工具包](#18.1.3 NLTK:学术研究常用工具包)
      • [18.1.4 HanLP:中文NLP专用工具包](#18.1.4 HanLP:中文NLP专用工具包)
    • [18.2 文本表示与模型工具](#18.2 文本表示与模型工具)
      • [18.2.1 Gensim:词嵌入与主题模型工具](#18.2.1 Gensim:词嵌入与主题模型工具)
      • [18.2.2 Sentence-BERT:句嵌入工具](#18.2.2 Sentence-BERT:句嵌入工具)
    • [18.3 预训练模型调用工具](#18.3 预训练模型调用工具)
      • [18.3.1 Hugging Face Transformers:一站式预训练模型库](#18.3.1 Hugging Face Transformers:一站式预训练模型库)
      • [18.3.2 Accelerate:模型训练加速工具](#18.3.2 Accelerate:模型训练加速工具)
      • [18.3.3 PEFT:高效微调工具包](#18.3.3 PEFT:高效微调工具包)
        • [LoRA 微调示例](#LoRA 微调示例)
    • [NLP 工程最佳实践工具链](#NLP 工程最佳实践工具链)
    • 小结
  • 资料

前言 Python NLP生态

自然语言处理(NLP)的工程落地离不开强大而丰富的 Python 生态系统 。从基础数据处理、文本清洗,到词向量训练、预训练模型微调,Python 提供了覆盖全流程的高质量工具库。本章将系统梳理 NLP 开发中的核心库,包括数据处理 (NumPy/Pandas)、传统 NLP 工具 (spaCy/NLTK/HanLP)、文本表示工具 (Gensim/Sentence-BERT)以及现代大模型工具链(Hugging Face/PEFT/Accelerate),并通过代码示例帮助你快速上手。


18.1 核心数据处理库

18.1.1 NumPy与Pandas:数值计算与数据框处理

虽然不专属于 NLP,但 NumPyPandas 是所有数据科学任务的基石。

  • NumPy:高效多维数组操作,支撑张量计算
  • Pandas:结构化数据处理(如 CSV、JSON),支持缺失值处理、分组、合并等
python 复制代码
import pandas as pd
import numpy as np

# 加载中文评论数据
df = pd.read_csv("chinese_reviews.csv")
print(df.head())

# 数据清洗示例
df["text"] = df["text"].str.replace(r"[^\u4e00-\u9fa5a-zA-Z0-9]", "", regex=True)  # 保留中英文数字
df = df.dropna(subset=["text"])  # 删除空文本

# 统计标签分布
print(df["label"].value_counts())

NLP 中典型用途

  • 构建训练/验证集划分
  • 文本长度分析(df["text"].apply(len)
  • 特征工程(TF-IDF 矩阵转 DataFrame)

18.1.2 spaCy:工业级NLP工具包

spaCy 是面向生产环境的高性能 NLP 库,支持 60+ 种语言,提供统一 API预训练模型

核心功能
  • 分词(Tokenization)
  • 词性标注(POS Tagging)
  • 命名实体识别(NER)
  • 依存句法分析(Dependency Parsing)
  • 向量化(Word/Doc Embeddings)

输入文本
分词
词性标注
命名实体识别
依存分析
向量化

代码示例(英文)
python 复制代码
import spacy

nlp = spacy.load("en_core_web_sm")  # 加载小型英文模型
doc = nlp("Apple is looking at buying U.K. startup for $1 billion.")

for token in doc:
    print(f"{token.text:<10} {token.pos_:<8} {token.dep_:<10}")

# 实体识别
for ent in doc.ents:
    print(ent.text, ent.label_)  # Apple ORG, U.K. GPE, $1 billion MONEY
中文支持

spaCy 官方不直接支持中文,但可通过 Jieba + spaCy 自定义 pipeline 实现:

python 复制代码
import spacy
from spacy.tokenizer import Tokenizer
import jieba

class JiebaTokenizer:
    def __init__(self, vocab):
        self.vocab = vocab

    def __call__(self, text):
        words = jieba.lcut(text)
        spaces = [True] * len(words)
        return Doc(self.vocab, words=words, spaces=spaces)

nlp = sparsity.blank("zh")
nlp.tokenizer = JiebaTokenizer(nlp.vocab)

优势 :速度快、内存效率高、支持 GPU

劣势:中文需额外配置,不如 HanLP 原生支持好


18.1.3 NLTK:学术研究常用工具包

NLTK(Natural Language Toolkit) 是 NLP 教学与研究的经典库,包含大量语料库和算法实现。

典型用途
  • 教学演示(分词、词干提取、n-gram)
  • 访问标准语料库(Brown, Reuters, WordNet)
  • 原型开发
python 复制代码
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer

# 下载资源(首次运行需执行)
nltk.download('punkt')
nltk.download('stopwords')

text = "Natural language processing is fascinating!"
tokens = word_tokenize(text.lower())
stop_words = set(stopwords.words('english'))
filtered = [w for w in tokens if w not in stop_words]

stemmer = PorterStemmer()
stems = [stemmer.stem(w) for w in filtered]
print(stems)  # ['natur', 'languag', 'process', 'fascin']

优势 :文档丰富、适合教学

劣势:速度慢、不适合生产环境


18.1.4 HanLP:中文NLP专用工具包

HanLP 由复旦大学开发,是最强大的中文 NLP 工具包之一,支持 130+ 项功能,包括:

  • 中文分词(支持细粒度、粗粒度)
  • 词性标注、命名实体识别
  • 依存句法、语义依存
  • 文本分类、关键词提取
  • 多语言支持(含少数民族语言)
安装与使用
bash 复制代码
pip install hanlp
python 复制代码
import hanlp

# 加载中文流水线模型
HanLP = hanlp.load(hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH)

text = "阿里巴巴集团在杭州成立,马云是创始人。"
result = HanLP(text)

print("分词:", result['tok/fine'])
print("NER:", result['ner/msra'])  # [('阿里巴巴集团', 'NT'), ('杭州', 'NS'), ('马云', 'NR')]
print("依存关系:", result['dep'])

优势

  • 中文原生支持极佳
  • 多任务联合模型(一个模型完成多项任务)
  • 支持 TensorFlow/PyTorch 后端

18.2 文本表示与模型工具

18.2.1 Gensim:词嵌入与主题模型工具

Gensim 专注于无监督主题建模词向量学习,高效处理大规模语料。

核心功能
  • Word2Vec、FastText、Doc2Vec
  • LDA(Latent Dirichlet Allocation)主题模型
  • 相似度计算(ANN 索引)
python 复制代码
from gensim.models import Word2Vec
from gensim.corpora import Dictionary
from gensim.models import LdaModel

# 准备分词后的语料 [[词1, 词2, ...], ...]
sentences = [["自然", "语言", "处理"], ["机器", "学习", "很", "有趣"]]

# 训练 Word2Vec
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
print(model.wv["自然"])  # 获取词向量

# 训练 LDA 主题模型
dictionary = Dictionary(sentences)
corpus = [dictionary.doc2bow(text) for text in sentences]
lda = LdaModel(corpus, num_topics=2, id2word=dictionary)
print(lda.print_topics())

优势 :内存友好、支持流式训练

📌 适用场景:词向量训练、文档聚类、推荐系统


18.2.2 Sentence-BERT:句嵌入工具

传统 BERT 生成的句向量不适合直接计算相似度 (因缺乏全局语义对齐)。Sentence-BERT(SBERT) 通过孪生网络结构解决此问题。

原理
  • 使用 [CLS] 向量或平均池化得到句子表示
  • 在 NLI(自然语言推断)数据上微调,使语义相近句子向量距离更近

句子1
BERT
句子2
BERT
Mean Pooling
Mean Pooling
向量 u
向量 v
余弦相似度

代码示例
python 复制代码
from sentence_transformers import SentenceTransformer

# 加载中文 SBERT 模型
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')  # 支持中文

sentences = ["今天天气真好", "阳光明媚,适合出游"]
embeddings = model.encode(sentences)

from sklearn.metrics.pairwise import cosine_similarity
sim = cosine_similarity([embeddings[0]], [embeddings[1]])
print(f"相似度: {sim[0][0]:.4f}")  # 输出: 0.75+

🇨🇳 中文推荐模型

  • WangZeJun/sentence-bert-base-chinese
  • shibing624/text2vec-base-chinese

18.3 预训练模型调用工具

18.3.1 Hugging Face Transformers:一站式预训练模型库

Transformers 是现代 NLP 的事实标准库,提供:

  • 200,000+ 预训练模型(BERT、GPT、T5、CLIP...)
  • 统一 API(AutoModel, AutoTokenizer
  • 支持 PyTorch/TensorFlow/JAX
核心组件

Hugging Face Hub
AutoTokenizer
AutoModel
文本 → input_ids
input_ids → logits/hidden states

代码示例:文本分类
python 复制代码
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

tokenizer = AutoTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")
model = AutoModelForSequenceClassification.from_pretrained("hfl/chinese-roberta-wwm-ext", num_labels=2)

inputs = tokenizer("这部电影太棒了!", return_tensors="pt")
with torch.no_grad():
    logits = model(**inputs).logits

pred = torch.argmax(logits, dim=-1)
print("预测标签:", pred.item())  # 0 或 1

优势:模型即服务、社区活跃、持续更新


18.3.2 Accelerate:模型训练加速工具

Accelerate 由 Hugging Face 开发,一行代码实现多 GPU/TPU/混合精度训练,无需修改模型代码。

使用方式
python 复制代码
from accelerate import Accelerator

accelerator = Accelerator()  # 自动检测硬件

model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)

for batch in dataloader:
    outputs = model(**batch)
    loss = outputs.loss
    accelerator.backward(loss)  # 替代 loss.backward()
    optimizer.step()

解决痛点

  • 分布式训练代码复杂
  • 混合精度(FP16)配置繁琐

18.3.3 PEFT:高效微调工具包

PEFT(Parameter-Efficient Fine-Tuning) 支持 LoRA、Adapter、Prefix Tuning 等方法,仅训练 0.1%~5% 参数

LoRA 微调示例
python 复制代码
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("THUDM/chatglm3-6b", load_in_4bit=True)

lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["query_key_value"],
    lora_dropout=0.1,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 例如: trainable params: 2,097,152 || all params: 6,258,304,000

优势

  • 显存占用低(可微调 7B+ 模型)
  • 多任务共享主干模型
  • 快速部署(仅保存 LoRA 权重)

NLP 工程最佳实践工具链

任务 推荐工具
中文分词/NER HanLP, LAC, LTP
文本向量化 Sentence-BERT, Gensim
预训练模型 Hugging Face Transformers
大模型微调 PEFT + Accelerate
可视化 Matplotlib, Seaborn, Weights & Biases
部署 FastAPI, ONNX Runtime, TensorRT

小结

Python NLP 生态已形成层次清晰、功能完备的工具链:

  • 基础层:NumPy/Pandas 处理数据
  • 传统 NLP 层:spaCy(工业)、NLTK(教学)、HanLP(中文)
  • 表示学习层:Gensim(词向量)、Sentence-BERT(句向量)
  • 大模型层:Transformers(模型调用)、Accelerate(训练加速)、PEFT(高效微调)

资料

咚咚王

《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》

相关推荐
chushiyunen1 小时前
python语法-继承、方法命名、单例等
开发语言·python
yeflx1 小时前
三维空间坐标转换早期笔记
人工智能·算法·机器学习
zzh940771 小时前
Gemini 3.1 Pro 2026年国内使用指南:技术解析与镜像站实测
人工智能
初学大模型1 小时前
基于三层架构的自动驾驶系统设计:环境建模、标准驾驶与风险调制
人工智能
码路飞1 小时前
AI 写的代码越来越多,但你敢直接上线吗?我的多模型交叉 Review 方案
python·openai
●VON1 小时前
半小时从零开发鸿蒙记事本应用:AI辅助开发实战
人工智能·华为·harmonyos
MgArcher2 小时前
Python 入门核心考点:数据类型与变量全解
python
特立独行的猫a2 小时前
ESP32小智AI的WebSocket 调试工具实现,小智AI后台交互过程揭秘(一、开篇介绍 )
人工智能·websocket·网络协议·esp32·小智ai
m0_662577972 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python