学习顺序说明:本文是AI学习路线的第4篇,建议按顺序学习:
- 01 入门基础 → 02 机器学习 → 03 深度学习 → 04 NLP基础(本文)→ 05 Transformer进阶 → 06 大模型应用 → 07 RAG系统 → 08 AI工具链
自然语言处理(NLP)是人工智能中让计算机理解和生成人类语言的领域。本文将系统介绍NLP的核心技术和最新发展。
NLP发展历程
词袋模型(1950s) → 统计方法(1990s) → 神经网络(2010s) → Transformer(2017) → 大语言模型(2020+)
参考资源:Speech and Language Processing - Dan Jurafsky经典教材
第一部分:文本表示
1.1 词袋模型与TF-IDF
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
documents = [
"机器学习是人工智能的核心",
"深度学习是机器学习的分支",
"自然语言处理是深度学习的应用"
]
# 词袋模型
bow_vectorizer = CountVectorizer()
bow_matrix = bow_vectorizer.fit_transform(documents)
# TF-IDF
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
1.2 词向量 (Word Embeddings)
将词映射到低维稠密向量,捕捉语义关系。
from gensim.models import Word2Vec
# 训练Word2Vec模型
sentences = [
['机器学习', '是', '人工智能', '核心'],
['深度学习', '是', '机器学习', '分支'],
['自然语言处理', '是', '深度学习', '应用']
]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
# 获取词向量
vector = model.wv['机器学习']
# 找相似词
similar = model.wv.most_similar('机器学习', topn=3)
参考资源:Word2Vec论文 - Efficient Estimation of Word Representations
第二部分:注意力机制与Transformer
2.1 自注意力 (Self-Attention)
\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\]import torch
import torch.nn as nn
import torch.nn.functional as F
import math
class SelfAttention(nn.Module):
"""自注意力实现"""
def __init__(self, embed_size, heads):
super(SelfAttention, self).__init__()
self.embed_size = embed_size
self.heads = heads
self.head_dim = embed_size // heads
self.values = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.keys = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.queries = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.fc_out = nn.Linear(heads * self.head_dim, embed_size)
def forward(self, values, keys, query, mask):
N = query.shape[0]
value_len, key_len, query_len = values.shape[1], keys.shape[1], query.shape[1]
# 分割多头
values = values.reshape(N, value_len, self.heads, self.head_dim)
keys = keys.reshape(N, key_len, self.heads, self.head_dim)
queries = query.reshape(N, query_len, self.heads, self.head_dim)
# 注意力分数
energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys])
if mask is not None:
energy = energy.masked_fill(mask == 0, float("-1e20"))
attention = torch.softmax(energy / (self.embed_size ** 0.5), dim=3)
out = torch.einsum("nhql,nlhd->nqhd", [attention, values])
out = out.reshape(N, query_len, self.heads * self.head_dim)
return self.fc_out(out)
参考资源:The Illustrated Transformer - Jay Alammar的图解Transformer
2.2 Transformer架构
输入嵌入 → 位置编码 → [多头自注意力 → Add&Norm → 前馈网络 → Add&Norm] × N → 输出
关键组件:
| 组件 | 作用 |
|---|---|
| 位置编码 | 注入位置信息 |
| 多头注意力 | 并行计算多组注意力 |
| 层归一化 | 稳定训练 |
| 前馈网络 | 非线性变换 |
| 残差连接 | 缓解梯度消失 |
参考资源:Attention Is All You Need - Transformer原论文
第三部分:预训练语言模型
3.1 BERT
BERT是双向Transformer编码器,通过掩码语言模型预训练。
from transformers import BertTokenizer, BertModel, BertForSequenceClassification
# 加载预训练BERT
model_name = 'bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name)
# 文本编码
text = "自然语言处理是人工智能的重要领域"
inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True)
# 获取BERT输出
with torch.no_grad():
outputs = model(**inputs)
# [CLS] token的表示 (用于分类任务)
cls_embedding = outputs.last_hidden_state[:, 0, :]
BERT预训练任务:
- 掩码语言模型(MLM): 随机掩盖15%的词,预测被掩盖的词
- 下一句预测(NSP): 判断两个句子是否连续
参考资源:BERT论文
3.2 GPT
GPT是单向Transformer解码器,通过自回归语言模型预训练。
from transformers import GPT2LMHeadModel, GPT2Tokenizer
model_name = 'gpt2'
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
model = GPT2LMHeadModel.from_pretrained(model_name)
# 文本生成
input_text = "Natural language processing is"
input_ids = tokenizer.encode(input_text, return_tensors='pt')
output = model.generate(input_ids, max_length=50, temperature=0.7)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
GPT vs BERT对比:
| 特性 | BERT | GPT |
|---|---|---|
| 架构 | 编码器 | 解码器 |
| 方向 | 双向 | 单向 |
| 预训练 | MLM + NSP | 语言模型 |
| 适用任务 | 理解类 | 生成类 |
参考资源:GPT-3论文
3.3 使用Hugging Face Transformers
from transformers import pipeline
# 情感分析
sentiment_analyzer = pipeline("sentiment-analysis", model="bert-base-chinese")
result = sentiment_analyzer("这个产品非常好用!")
# 问答系统
qa_pipeline = pipeline("question-answering")
result = qa_pipeline(question="什么是机器学习?",
context="机器学习是人工智能的一个分支...")
# 命名实体识别
ner_pipeline = pipeline("ner", aggregation_strategy="simple")
result = ner_pipeline("比尔·盖茨是微软公司的创始人")
参考资源:Hugging Face文档
学习资源汇总
官方资源
- Hugging Face - 模型和数据集社区
- Papers with Code NLP - 论文+代码
课程推荐
- CS224N: NLP with Deep Learning - Stanford
- Hugging Face NLP Course - 免费课程
经典论文
- Attention Is All You Need - Transformer
- BERT - 预训练语言模型
- GPT-3 - 大语言模型
下一篇:05 Transformer进阶 - 深入理解注意力机制
最后更新: 2026年4月10日
本文参考了 Hugging Face文档 和 CS224N课程 整理