NLP-迁移学习
下面是我提出的各个 NLP 核心概念和工具的系统化详细介绍,包括 FastText 工具、文本分类、词向量训练、迁移学习基本概念与实践、预训练模型、Transformers 库的使用以及标准数据集。
一、迁移学习概念
迁移学习(Transfer Learning)是在源任务上训练好的模型,将其知识迁移到目标任务中,特别适用于目标任务样本较少、标注成本高的场景。迁移学习是现代 NLP 的核心范式之一。
常见类型:
特征迁移:将预训练模型作为特征提取器,只使用其编码后的向量作为输入。
微调(Fine-tuning):在下游任务上进一步训练预训练模型所有参数。
冷启动迁移:在极少样本或零样本情况下直接使用预训练模型推理。
多任务迁移:多个任务共享模型参数,如 T5、MT-DNN。
二、FastText 工具介绍
FastText 是 Facebook Research 发布的一个轻量级、高效的 NLP 工具库,用于训练词向量和文本分类任务。其核心优势在于速度快、性能好、资源占用低。
主要功能:
词向量训练(支持子词建模)
文本分类(支持多分类与多标签)
支持 OOV 词建模(通过子词拼接)
可导出压缩后的模型用于线上部署
FastText 是一种浅层神经网络结构,采用 n-gram 特征和层次 softmax 技术,使得训练与推理速度非常快。
三、FastText 文本分类
FastText 将文本分类建模为一个监督学习问题。其结构如下:
每个文档由词和词 n-gram 表示
将词向量平均后通过全连接层预测类别
使用负采样或层次 softmax 提升训练效率
训练命令示例(命令行):
./fasttext supervised -input train.txt -output model -epoch 25 -lr 0.5 -wordNgrams 2
其中 train.txt
格式为:
__label__positive this movie is amazing
__label__negative i do not like this film
推理:
__label__positive this movie is amazing
__label__negative i do not like this film
四、FastText 训练词向量
FastText 提供类似 Word2Vec 的词向量训练能力,区别在于支持子词建模,因此对 OOV 词(未登录词)表现更好。
训练示例:
./fasttext skipgram -input corpus.txt -output model
模型训练后会生成:
model.vec
:文本格式的词向量(可用于加载)model.bin
:二进制模型(可用于推理)
五、NLP 中的常用预训练模型
现代 NLP 的大多数任务都基于大规模预训练语言模型,以下是最常用的几类:
1. BERT(Bidirectional Encoder Representations from Transformers)
採用 Masked LM 和 Next Sentence Prediction
适合分类、抽取类任务
开放权重丰富(中文:BERT-Base-Chinese)
2. RoBERTa
对 BERT 改进训练策略(更长训练、去掉 NSP)
性能更稳定
3. GPT(Generative Pre-trained Transformer)
单向语言建模,擅长生成任务
GPT-2、GPT-3、GPT-4 是其迭代版本
4. T5(Text-to-Text Transfer Transformer)
将所有 NLP 任务统一为“文本到文本”格式
可用于翻译、摘要、问答、分类等
5. XLNet、ERNIE、ALBERT、DeBERTa 等
各有优化目标:参数压缩、建模能力增强、多任务预训练等
六、Transformers 库使用(Hugging Face)
Hugging Face 的 transformers
库提供了统一的接口来加载、使用和训练各种预训练模型。
安装:
pip install transformers(这里强调一下,最好下载4.33版本的transformers)
示例用法:
from transformers import AutoTokenizer, AutoModeltokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")inputs = tokenizer("Hello world", return_tensors="pt")
outputs = model(**inputs)
应用场景:
文本分类(Text Classification)
命名实体识别(NER)
文本生成(Text Generation)
机器翻译(Translation)
问答系统(Question Answering)
此外,Transformers 库还支持 Pipelines API、Trainer API、量化、蒸馏、多 GPU 训练等功能。
七、迁移学习实践(结合 FastText 和 Transformers)
FastText 风格:
适合数据量较大,要求快速训练和部署的场景(如边缘设备部署)
Transformers 风格:
适合任务复杂、要求高精度的场景,推荐 fine-tuning 预训练模型
实践建议:
先使用预训练模型提取向量,进行特征分析或分类
数据量足够时,fine-tune 整个模型以达到最优效果
数据量较小时,考虑冻结部分参数,仅微调 top 层
使用框架如 PEFT、LoRA 进行参数高效微调
八、NLP 中的标准数据集
以下是常用于模型训练与评估的经典数据集:
任务类型 | 数据集名称 | 描述 |
---|---|---|
文本分类 | AG News, DBPedia, Yahoo, THUCNews | 多类新闻分类 |
情感分析 | SST-2, IMDB, ChnSentiCorp | 单句/多句情感标注 |
NLI 推理 | SNLI, MNLI, OCNLI | 判断句子之间的逻辑关系 |
问答系统 | SQuAD, CMRC2018 | 抽取式问答数据集 |
命名实体识别 | CoNLL2003, MSRA-NER | BIO 标注数据集 |
语言建模 | WikiText, OpenWebText | 预训练阶段常用数据 |
句子匹配 | QuoraQP, LCQMC | 两句子是否为语义重复 |
翻译 | WMT, CWMT | 多语言翻译对 |
大多数数据集可通过 datasets
库快速下载和使用:
from datasets import load_dataset
dataset = load_dataset("ag_news")
总结
模块 | 工具或概念 | 核心作用 |
---|---|---|
FastText | 词向量、文本分类工具 | 快速高效,无需深度模型 |
Transformers 库 | 模型统一使用接口 | 提供丰富模型与训练接口 |
预训练模型 | BERT、GPT、T5 等 | 提供语言理解能力的基础 |
迁移学习实践 | 特征提取 + 微调 | 在下游任务中高效使用大模型 |
NLP标准数据集 | 多任务 benchmark | 训练与评估模型的基础 |