什么是语言模型?
以一个符合语言规律的序列为输入,模型将利用序列间关系等特征,输出一个在所有词汇上的概率分布.这样的模型称为语言模型.
# 语言模型的训练语料一般来自于文章,对应的源文本和目标文本形如:
src1="Ican do",tgt1="can do it"
src2="can do it", tgt2="do it <eos>"
语言模型能解决哪些问题?
- 根据语言模型的定义,可以在它的基础上完成机器翻译,文本生成等任务,因为我们通过最后输出的概率分布来预测下一个词汇是什么.
- 语言模型可以判断输入的序列是否为一句完整的话,因为我们可以根据输出的概率分布查看最大概率是否落在句子结束符上,来判断完整性
- 语言模型本身的训练目标是预测下一个词,因为它的特征提取部分会抽象很多语言序列之间的关系,这些关系可能同样对其他语言类任务有效果.因此可以作为预训练模型进行迁移学习.
整个案例的实现可分为以下五个步骤
- 第一步: 导入必备的工具包
- 第二步:导入wikiText-2数据集并作基本处理。
- 第三步: 构建用于模型输入的批次化数据
- 第四步: 构建训练和评估函数
- 第五步: 进行训练和评估(包括验证以及测试)
torchtext
torchtext
是一个用于文本处理的库,专为PyTorch设计。它提供了处理文本数据的多种工具,旨在简化自然语言处理(NLP)任务的数据预处理过程,并且可以与PyTorch无缝配合。以下是 torchtext
的一些主要功能:
-
数据加载:
torchtext
包含了许多预加载的数据集(如IMDb电影评论、语言建模数据集等),这使得加载和处理这些数据集变得简单。 -
文本预处理:库包含预处理功能,如分词、词干提取、停用词过滤。
-
构建词汇表:可以自动根据文本数据构建词汇表,并将单词转换为整数索引。
-
文本编码:提供了一种将单词转换为整数或向量表示(比如通过Word Embeddings)的机制。
-
批处理:提供了便捷的批处理功能,例如,可以将单词替换为对应的整数索引,并自动填充或截断使得批内的样本具有相同的长度,这对于训练循环非常有用。
-
迭代器:
torchtext
提供了几种迭代器(如BucketIterator
)用于生成mini-batch,这些迭代器可以将长度相似的样本分到同一个批次中,以减少填充的数量,使训练更加高效。 -
集成学习词嵌入:可以轻松加载预训练的词向量,如GloVe或FastText,并将它们集成到模型中。
以下是一个使用torchtext
的基本流程示例,包括加载数据集、构建词汇表和创建数据加载器迭代器:
import torchtext
from torchtext.datasets import IMDB
from torchtext.data import Field, LabelField, BucketIterator
# 定义字段处理
TEXT = Field(tokenize="spacy", tokenizer_language="en_core_web_sm")
LABEL = LabelField(dtype=torch.float)
# 加载IMDB电影评论数据集
train_data, test_data = IMDB.splits(TEXT, LABEL)
# 构建词汇表
TEXT.build_vocab(train_data, max_size=25000, vectors="glove.6B.100d")
LABEL.build_vocab(train_data)
# 创建批处理迭代器
train_iterator, test_iterator = BucketIterator.splits(
(train_data, test_data),
batch_size=64,
device=device) # 'device' can be 'cpu' or 'cuda'
# 迭代数据
for batch in train_iterator:
text, labels = batch.text, batch.label
# 应用到模型训练...
主要有以下数据集:
Text Classification
AG_NEWS、AmazonReviewFull、AmazonReviewPolarity、CoLA、DBpedia、IMDb、MNLI、MRPC、QNLI、QQP、RTE、SogouNews、SST2、STSB、WNLI、YahooAnswers、YelpReviewFull、YelpReviewPolarity
Language Modeling
PennTreebank、WikiText-2、WikiText103
Machine Translation
IWSLT2016、IWSLT2017、Multi30k
Sequence Tagging
CoNLL2000Chunking、UDPOS
Question Answer
SQuAD 1.0、SQuAD 2.0
Unsupervised Learning
CC100、EnWik9
wikiText-2数据集的体量中等,训练集共有600篇短文,共208万左右的词汇,33278个不重复词汇,OvV(有多少正常英文词汇不在该数据集中的占比)为2.6%,数据集中的短文都是维基百科中对一些概念的介绍和描述.
具体做法我就不写了,大家去这个网站看:这个网站,还有这个可能需要翻墙软件