想飞的鱼 Java Dev Engineer

【AI学习路线 04】NLP基础 - 从词向量到Transformer

2026-04-10

学习顺序说明:本文是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预训练任务

  1. 掩码语言模型(MLM): 随机掩盖15%的词,预测被掩盖的词
  2. 下一句预测(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文档


学习资源汇总

官方资源

课程推荐

经典论文


上一篇03 深度学习基础 - 神经网络理论与实践

下一篇05 Transformer进阶 - 深入理解注意力机制

最后更新: 2026年4月10日

本文参考了 Hugging Face文档CS224N课程 整理


Similar Posts

Comments