transformer--使用transformer构建语言模型

news/2024/7/19 11:50:28 标签: transformer, 语言模型, 深度学习

什么是语言模型?

以一个符合语言规律的序列为输入,模型将利用序列间关系等特征,输出一个在所有词汇上的概率分布.这样的模型称为语言模型.

# 语言模型的训练语料一般来自于文章,对应的源文本和目标文本形如:
src1="Ican do",tgt1="can do it"
src2="can do it", tgt2="do it <eos>"

语言模型能解决哪些问题?

  1. 根据语言模型的定义,可以在它的基础上完成机器翻译,文本生成等任务,因为我们通过最后输出的概率分布来预测下一个词汇是什么.
  2. 语言模型可以判断输入的序列是否为一句完整的话,因为我们可以根据输出的概率分布查看最大概率是否落在句子结束符上,来判断完整性
  3. 语言模型本身的训练目标是预测下一个词,因为它的特征提取部分会抽象很多语言序列之间的关系,这些关系可能同样对其他语言类任务有效果.因此可以作为预训练模型进行迁移学习.

整个案例的实现可分为以下五个步骤

  1. 第一步: 导入必备的工具包
  2. 第二步:导入wikiText-2数据集并作基本处理。
  3. 第三步: 构建用于模型输入的批次化数据
  4. 第四步: 构建训练和评估函数
  5. 第五步: 进行训练和评估(包括验证以及测试) 

torchtext

torchtext 是一个用于文本处理的库,专为PyTorch设计。它提供了处理文本数据的多种工具,旨在简化自然语言处理(NLP)任务的数据预处理过程,并且可以与PyTorch无缝配合。以下是 torchtext 的一些主要功能:

  1. 数据加载torchtext 包含了许多预加载的数据集(如IMDb电影评论、语言建模数据集等),这使得加载和处理这些数据集变得简单。

  2. 文本预处理:库包含预处理功能,如分词、词干提取、停用词过滤。

  3. 构建词汇表:可以自动根据文本数据构建词汇表,并将单词转换为整数索引。

  4. 文本编码:提供了一种将单词转换为整数或向量表示(比如通过Word Embeddings)的机制。

  5. 批处理:提供了便捷的批处理功能,例如,可以将单词替换为对应的整数索引,并自动填充或截断使得批内的样本具有相同的长度,这对于训练循环非常有用。

  6. 迭代器torchtext 提供了几种迭代器(如BucketIterator)用于生成mini-batch,这些迭代器可以将长度相似的样本分到同一个批次中,以减少填充的数量,使训练更加高效。

  7. 集成学习词嵌入:可以轻松加载预训练的词向量,如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%,数据集中的短文都是维基百科中对一些概念的介绍和描述.

具体做法我就不写了,大家去这个网站看:这个网站,还有这个可能需要翻墙软件


http://www.niftyadmin.cn/n/5418063.html

相关文章

Day34-Linux网络管理4

Day34-Linux网络管理4 1. IP地址分类与子网划分基础1.1 什么是IP地址1.2 十进制与二进制的转换1.3 IP地址的分类1.4 私网地址和局域网地址 2. 通信类型3. 子网划分讲解3.1 为什么要划分子网&#xff1f;3.2 什么是子网划分&#xff1f;3.3 子网划分的作用&#xff1f;3.4 子网划…

python中def简介及用法

什么是def&#xff1f; def是python中的一个关键字&#xff0c;它用于定义一个函数。函数是一段具有特定功能的代码&#xff0c;可以被重复调用&#xff0c;从而提高代码的复用性和可读性。 如何使用def&#xff1f; def的基本语法如下&#xff1a; def 函数名(参数列表):#…

C++ 字符串的最长公共子序列问题

在计算机科学中&#xff0c;最长公共子序列&#xff08;Longest Common Subsequence, LCS&#xff09;问题是一个经典的算法问题。该问题要求找出两个或多个序列中长度最长、公共部分最多的子序列。例如&#xff0c;对于两个字符串"ABCD"和"ACDF"&#xff…

【UE5】游戏框架GamePlay

项目资源文末百度网盘自取 游戏框架 游戏 由 游戏模式(GameMode) 和 游戏状态(GameState) 所组成 加入游戏的 人类玩家 与 玩家控制器(PlayerController) 相关联 玩家控制器允许玩家在游戏中拥有 HUD&#xff0c;这样他们就能在关卡中拥有物理代表 玩家控制器还向玩家提供 …

数字化转型导师坚鹏:科技金融政策、案例及数字化营销

科技金融政策、案例及数字化营销 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融如何数字化营销&#xff1f; 课程特色&#xff1a; 以案例的方式解读原…

【Algorithms 4】算法(第4版)学习笔记 16 - 4.2 有向图

文章目录 前言参考目录学习笔记1&#xff1a;介绍1.1&#xff1a;有向图简介1.2&#xff1a;应用举例1.3&#xff1a;相关问题2&#xff1a;有向图 API2.1&#xff1a;有向图表示2.1.1&#xff1a;邻接表数组 Adjacency-list2.1.2&#xff1a;Java 实现&#xff1a;邻接表数组2…

​决定德拉瓦州地区版图的关键历史事件

决定德拉瓦州地区版图的关键历史事件&#xff1a; 1. 殖民时期&#xff1a; - 特拉华州所在的区域最初由多个印第安部落居住&#xff0c;包括著名的德拉瓦族&#xff08;Lenape&#xff09;。 - 1631年&#xff0c;荷兰人在现在的特拉华州 Lewes 地区建立了第一个殖民点&#…

Datawhale【Sora原理与技术实战】| 学习笔记2

这里写目录标题 一. 基于Transformers的架构的Diffusion模型二. Transformers技术解析1. 什么是ViT2. ViViT&#xff1a;视频ViT 一. 基于Transformers的架构的Diffusion模型 相当于融合了基于自回归方式的模型和基于扩散&#xff08;diffusion&#xff09;方式的模型 第一步&…