NLP 的核心挑战
自然语言处理(Natural Language Processing,NLP)是 AI 中最具挑战性的领域之一。人类语言充满歧义、依赖上下文、有无限的可能性组合,且蕴含文化背景和常识知识。
文本预处理
分词
将连续文本切分为有意义的单元。中文分词比英文复杂得多,因为词与词之间没有空格分隔。
常用工具:jieba(中文)、spaCy、NLTK。
import jieba
text = "人工智能正在改变世界"
tokens = list(jieba.cut(text))
print(tokens)
# 输出: ['人工智能', '正在', '改变', '世界']
其他预处理步骤
- 去除停用词 — 过滤”的”、“了”等高频无意义词
- 词干提取/词形还原 — 将单词还原为基本形式
- 文本清洗 — 去除 HTML 标签、特殊字符等噪声
词向量
机器无法直接理解词语,需要将词语映射为数值向量。
One-Hot 表示
最简单的方式,但维度高且无法表达词语间的语义关系。
分布式表示
- Word2Vec(2013) — 通过上下文预测目标词(CBOW)或通过目标词预测上下文(Skip-gram)
- GloVe(2014) — 利用词共现矩阵进行分解
- FastText(2016) — 引入子词信息,能处理未登录词
from gensim.models import Word2Vec
sentences = [["人工智能", "是", "未来"],
["深度学习", "改变", "世界"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
similarity = model.wv.similarity("人工智能", "深度学习")
print(f"相似度: {similarity:.3f}")
序列到序列模型
Seq2Seq 模型由编码器和解码器组成,用于处理输入输出长度不固定的任务。
- 编码器 — 将输入序列编码为上下文向量
- 解码器 — 从上下文向量逐步生成输出序列
注意力机制
注意力机制让解码器在生成每个输出时关注输入序列的不同位置,大幅提升了长序列的处理能力。Bahdanau Attention 和 Luong Attention 是两种经典实现。
# 简化的注意力计算
def compute_attention(decoder_hidden, encoder_outputs):
# decoder_hidden: [batch, d_model]
# encoder_outputs: [batch, seq_len, d_model]
scores = torch.matmul(encoder_outputs, decoder_hidden.unsqueeze(-1))
scores = scores.squeeze(-1) # [batch, seq_len]
weights = F.softmax(scores, dim=-1)
context = torch.matmul(weights.unsqueeze(1), encoder_outputs)
return context.squeeze(1)
预训练语言模型
BERT
BERT(Bidirectional Encoder Representations from Transformers)使用双向 Transformer 编码器,通过掩码语言模型(MLM)和下一句预测(NSP)两个任务进行预训练。
优势在于下游任务只需要在预训练模型上加一个简单的分类头,做少量微调即可取得优异效果。
from transformers import BertTokenizer, BertForSequenceClassification
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
model = BertForSequenceClassification.from_pretrained("bert-base-chinese")
text = "这部电影非常精彩"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
GPT
GPT(Generative Pre-trained Transformer)使用单向 Transformer 解码器,通过预测下一个词进行预训练。GPT 的核心能力在于文本生成,而 GPT-3 和 GPT-4 在此基础上展示了惊人的少样本学习和推理能力。
其他重要模型
- T5 — 将所有 NLP 任务统一为文本到文本的形式
- RoBERTa — BERT 的优化版本
- ChatGLM — 针对中文优化的对话模型
- LLaMA — Meta 开源的大语言模型
NLP 典型应用
- 文本分类(垃圾邮件检测、情感分析)
- 命名实体识别(提取人名、地名等)
- 机器翻译
- 自动摘要
- 问答系统
- 文本生成
从词向量到预训练大模型,NLP 在短短十年间经历了翻天覆地的变化,现在的大语言模型已经在许多任务上接近人类水平。