前言:NLP是什么?
我们其实每天都在与NLP打交道:
-
用手机输入法打字时的联想词
-
邮件应用自动过滤的垃圾邮件
-
翻译软件帮你看懂的外文网站
在ChatGPT出现之前,NLP技术门槛很高——你需要了解分词、词性标注、句法分析、语义角色标注等一长串概念,还要手工设计特征,才能让机器"懂"一点语言。
今天,大语言模型让这一切变得简单,但理解NLP的技术脉络,能让你更透彻地理解为什么大模型能做到这些事,以及它的局限性在哪里。
本模块学习路径:词向量 → 预训练模型 → BERT/GPT/T5三大范式 → 下游任务(分类、NER、翻译、摘要)
一、预训练语言模型演进史
NLP的发展可以清晰地划分为几个阶段,每个阶段都有标志性的技术突破。
1.1 Word2Vec:词向量的革命
在2013年之前,计算机处理文字的方式很原始——独热编码(One-Hot Encoding):每个词对应一个超长向量,只有一个位置是1,其他都是0。
这种方式的问题:向量里没有语义信息,"猫"和"狗"的距离,跟"猫"和"桌子"一样远。
Word2Vec的核心思想:一个词的含义,由它周围的词来定义。
python
复制
下载
# 安装:pip install gensim
from gensim.models import Word2Vec
sentences = [
["我", "喜欢", "吃", "苹果"],
["我", "喜欢", "吃", "香蕉"],
["猫", "喜欢", "吃", "鱼"],
["狗", "喜欢", "吃", "肉"],
["苹果", "是", "一种", "水果"],
["香蕉", "是", "一种", "水果"],
["RUNOOB", "是", "一个", "编程", "网站"],
]
# 训练Word2Vec
model = Word2Vec(sentences, vector_size=50, window=3, min_count=1, epochs=100)
# 词向量运算:国王 – 男人 + 女人 ≈ 女王
print(f"'苹果'和'香蕉'的相似度:{model.wv.similarity('苹果', '香蕉'):.4f}")
print(f"与'猫'最相似的词:{model.wv.most_similar('猫', topn=3)}")
Word2Vec的局限:每个词只有一个固定向量,不管上下文。比如"打"在"打电话"和"打游戏"里意思不同,但向量相同。
1.2 ELMo:上下文相关词向量
2018年,ELMo解决了"一词多义"问题——看整个句子后再给词生成向量。同样是"打"字,在不同句子里是不同的向量。
1.3 GPT-1:单向预训练
2018年,OpenAI发布GPT-1:
-
使用Transformer解码器(不是LSTM)
-
单向:只看前面的词,预测下一个词
-
生成式:可以续写文本
1.4 BERT:双向预训练
2018年底,Google发布BERT,彻底改变NLP领域:
核心创新:
双向:同时看前后文
MLM(Masked Language Model):随机遮住15%的词,让模型预测
NSP(Next Sentence Prediction):判断两个句子是否连续
1.5 GPT-3到ChatGPT
2020年,GPT-3发布(1750亿参数),出现涌现能力——模型突然具备了小模型没有的能力(少样本学习、复杂推理)。
2022年底,ChatGPT通过RLHF(人类反馈强化学习)让AI真正走向大众。
1.6 演进总结
| 2013 | Word2Vec | 词周围的词定义含义 | 词向量革命 |
| 2018 | ELMo | 上下文相关词向量 | 一词多义表示 |
| 2018 | GPT-1 | Transformer解码器 | 证明Transformer潜力 |
| 2018 | BERT | 双向预训练 | NLP进入预训练时代 |
| 2020 | GPT-3 | 1750亿参数 | 展示大模型可能 |
| 2022 | ChatGPT | RLHF+对话 | AI走向大众 |
二、BERT深度解析
BERT是NLP发展史上的里程碑,值得深入理解。
2.1 MLM(掩码语言模型)
随机把句子中15%的词替换成[MASK],让模型预测原来的词。
这15%的词:80%换[MASK],10%换随机词,10%保持不变
这样模型不能确定某个词是否被替换,必须真正理解上下文才能预测。
2.2 NSP(下句预测)
给两个句子A和B,判断B是不是A后面真正的下一句。帮助模型理解句子间的关系。
2.3 微调BERT实战
python
复制
下载
# 安装:pip install transformers datasets torch
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
from datasets import Dataset
# 1. 准备数据
texts = ["这个产品很好用", "质量太差了", "RUNOOB教程很清晰"]
labels = [1, 0, 1] # 1=积极,0=消极
dataset = Dataset.from_dict({"text": texts, "label": labels})
# 2. 加载模型
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
model = BertForSequenceClassification.from_pretrained("bert-base-chinese", num_labels=2)
# 3. 预处理
def tokenize(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=64)
tokenized_dataset = dataset.map(tokenize, batched=True)
# 4. 训练
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=4,
learning_rate=2e-5,
)
trainer = Trainer(model=model, args=training_args, train_dataset=tokenized_dataset)
# trainer.train() # 需要GPU
三、三大范式对比
| 架构 | Encoder-only | Decoder-only | Encoder-Decoder |
| 注意力 | 双向(看前后) | 单向(只看前) | 编码器双向,解码器单向 |
| 预训练任务 | MLM(掩码预测) | 自回归语言建模 | Span Corruption |
| 擅长任务 | 理解类(分类、NER) | 生成类(对话、续写) | 转换类(翻译、摘要) |
| 代表模型 | BERT、RoBERTa | GPT系列、ChatGPT | T5、BART |
今天的大模型大多采用Decoder-only架构(GPT路线),因为生成能力强,且通过Scaling Law可持续提升。
四、文本分类
4.1 三种方案对比
| 传统ML+TF-IDF | 小数据集 | 可解释性强 | 泛化能力弱 |
| 微调BERT | 大数据集 | 效果好 | 需要GPU |
| 大模型Prompt | 快速验证 | 零样本/少样本 | 成本高 |
python
复制
下载
# 方案一:传统ML + TF-IDF
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
pipeline = Pipeline([
("tfidf", TfidfVectorizer()),
("classifier", MultinomialNB())
])
pipeline.fit(texts, labels)
# 方案二:大模型分类(少样本)
def classify_with_llm(text):
# prompt = f"请对以下文本分类:{text},类别:积极/消极"
# 调用LLM API…
pass
4.2 决策指南
| 数据量小(<1000条) | 大模型少样本学习 |
| 数据量大(>10000条) | 微调BERT |
| 快速验证 | 大模型API |
| 生产环境高吞吐 | 微调小模型+蒸馏 |
| 类别经常变化 | 大模型Prompt工程 |
五、命名实体识别(NER)
NER从文本中找出特定实体:人名、地名、组织机构等。
5.1 BIO标注格式
text
复制
下载
王 → B-PER (人名开始)
小 → I-PER (人名内部)
明 → I-PER
在 → O (非实体)
北 → B-LOC (地点开始)
京 → I-LOC
5.2 NER实战
python
复制
下载
# 使用Hugging Face NER pipeline
from transformers import pipeline
ner = pipeline("ner", model="dbmdz/bert-large-cased-finetuned-conll03-english", grouped_entities=True)
results = ner("John Smith works at Google in New York.")
for entity in results:
print(f"{entity['word']}: {entity['entity_group']} (置信度: {entity['score']:.2f})")
六、机器翻译
6.1 神经机器翻译(NMT)
采用Encoder-Decoder架构:
Encoder读取源语言,生成语义表示
Decoder根据语义表示,生成目标语言
Attention机制让Decoder在生成每个词时"关注"源语言不同位置
6.2 BLEU评估指标
BLEU衡量机器翻译与人工翻译的n-gram重合度:
| <0.1 | 基本不通 |
| 0.1-0.3 | 能看懂大概 |
| 0.3-0.5 | 翻译质量不错 |
| >0.5 | 接近人工翻译 |
6.3 大模型翻译优势
上下文理解更好:处理歧义、多义词
风格控制:指定语气、风格
术语一致性:给定术语表保证翻译一致
多语言能力:一个模型做几十上百种语言互译
七、文本摘要
7.1 两种摘要方式
| 抽取式 | 挑选原文重要句子 | 信息准确,不编造 | 不够流畅,有冗余 |
| 生成式 | 理解后自己写摘要 | 流畅简洁 | 可能"幻觉" |
python
复制
下载
# 抽取式摘要:基于词频选重要句子
def extractive_summary(text, num_sentences=2):
# 分句 → 算词频 → 句子打分 → 选TopK
pass
7.2 ROUGE评估指标
| ROUGE-1 | unigram匹配 |
| ROUGE-2 | bigram匹配 |
| ROUGE-L | 最长公共子序列 |
总结
| 词向量 | 语义向量化 | Word2Vec、GloVe | 语义计算基础 |
| 预训练 | 学习通用知识 | BERT、GPT | NLP范式的根基 |
| 文本分类 | 打标签 | BERT、LLM | 情感分析、垃圾过滤 |
| NER | 实体识别 | BERT、SpaCy | 信息抽取 |
| 机器翻译 | 语言转换 | T5、LLM | 跨语言沟通 |
| 文本摘要 | 内容压缩 | BART、LLM | 文档提炼 |



