自然语言处理
从文本预处理到大语言模型,掌握 NLP 的核心技术与工程实践。
概述
自然语言处理(Natural Language Processing, NLP)是人工智能的重要分支,研究如何让计算机理解、处理和生成人类语言。从搜索引擎到智能助手,NLP 技术无处不在。
NLP 的主要挑战:
- 语言的歧义性:一词多义、句法歧义
- 上下文依赖:同一词语在不同语境中含义不同
- 文化差异:不同语言的语法和表达习惯
- 数据稀疏:词汇量巨大,组合无穷
文本预处理
文本预处理是 NLP 流水线的第一步,常见操作包括:
- 分词(Tokenization):将文本切分为词语或子词单元
- 清洗:去除 HTML 标签、特殊字符、多余空格
- 标准化:统一大小写、繁简转换
- 停用词过滤:移除「的」「是」「在」等高频低信息词
- 词干提取/词形还原:将词语还原为基本形式
💡 中文分词
中文没有天然的词边界,分词更具挑战性。常用工具包括 jieba、HanLP、LAC 等。现代大模型通常使用 BPE(字节对编码)进行子词分词。
词向量与文本表示
将文本转换为计算机可处理的数值表示,是 NLP 的基础。
Word2Vec
2013 年提出的经典词向量方法,基于「上下文相似的词,语义也相似」的假设:
- CBOW:用上下文预测中心词
- Skip-gram:用中心词预测上下文
现代表示方法
| 方法 | 特点 | 代表 |
|---|---|---|
| 静态词向量 | 一词一向量,无法处理多义 | Word2Vec, GloVe |
| 上下文词向量 | 根据上下文动态生成表示 | ELMo, BERT |
| 子词表示 | 处理未登录词,跨语言共享 | BPE, SentencePiece |
预训练语言模型
预训练 + 微调的范式已成为 NLP 的主流方法:
BERT(Encoder 模型)
双向 Transformer,通过掩码语言模型(MLM)预训练,擅长理解类任务:文本分类、命名实体识别、问答等。
GPT 系列(Decoder 模型)
自回归语言模型,通过预测下一个词预训练,擅长生成类任务:文本续写、对话、摘要等。
T5 / BART(Encoder-Decoder 模型)
将各类 NLP 任务统一为「文本到文本」格式,适合翻译、摘要等序列到序列任务。
大语言模型(LLM)
大语言模型是近年来 AI 领域最重要的突破,核心特点:
- 规模巨大:参数量从数十亿到数千亿
- 涌现能力:模型规模达到阈值后出现的新能力
- 上下文学习:通过 Prompt 中的示例学习新任务
- 指令跟随:理解并执行自然语言指令
Prompt Engineering
通过精心设计输入提示来引导模型输出,常用技巧:
- 零样本提示:直接描述任务,不提供示例
- 少样本提示:提供少量示例引导模型
- 思维链(CoT):引导模型逐步推理
- 角色设定:为模型设定专家角色
RAG(检索增强生成)
结合外部知识库检索与 LLM 生成,解决模型知识过时和幻觉问题:
- 将文档切分并建立向量索引
- 用户提问时检索相关文档片段
- 将检索结果作为上下文注入 Prompt
- LLM 基于检索内容生成回答
常见 NLP 任务
| 任务 | 描述 | 应用 |
|---|---|---|
| 文本分类 | 判断文本所属类别 | 情感分析、垃圾邮件检测 |
| 命名实体识别 | 识别人名、地名、机构名 | 信息抽取、知识图谱 |
| 机器翻译 | 将文本从一种语言翻译为另一种 | 跨语言交流 |
| 文本摘要 | 生成文本的简短概括 | 新闻摘要、会议纪要 |
| 问答系统 | 根据问题生成答案 | 智能客服、搜索引擎 |
| 对话系统 | 进行多轮自然对话 | 聊天机器人、虚拟助手 |
代码实战:情感分析
Python · Transformers
from transformers import pipeline
# 加载预训练情感分析模型
classifier = pipeline(
"sentiment-analysis",
model="uer/roberta-base-finetuned-jd-binary-chinese"
)
# 分析文本情感
texts = [
"这个产品非常好用,强烈推荐!",
"质量太差了,完全不值这个价格。",
"一般般吧,没有特别惊喜。"
]
for text in texts:
result = classifier(text)[0]
label = "正面" if result["label"] == "positive" else "负面"
print(f"文本: {text}")
print(f"情感: {label} (置信度: {result['score']:.2%})\n")