首页 > 其他分享 >机器学习——语言模型和数据集

机器学习——语言模型和数据集

时间:2023-11-10 22:11:06浏览次数:35  
标签:机器 语言 模型 batch 小批量 num steps 随机 序列

 

语言模型

 

马尔可夫模型和n元语法

 

自然语言统计

 

读取长序列数据

由于序列数据本质上是连续的,因此我们在处理数据时需要解决这个问题。 在 8.1节中我们以一种相当特别的方式做到了这一点: 当序列变得太长而不能被模型一次性全部处理时, 我们可能希望拆分这样的序列方便模型读取。

 

在介绍该模型之前,我们看一下总体策略。 假设我们将使用神经网络来训练语言模型, 模型中的网络一次处理具有预定义长度 (例如n个时间步)的一个小批量序列。 现在的问题是如何随机生成一个小批量数据的特征和标签以供读取。

 

首先,由于文本序列可以是任意长的, 例如整本《时光机器》(The Time Machine), 于是任意长的序列可以被我们划分为具有相同时间步数的子序列。 当训练我们的神经网络时,这样的小批量子序列将被输入到模型中。 假设网络一次只处理具有n个时间步的子序列。图8.3.1画出了从原始文本序列获得子序列的所有不同的方式, 其中n=5,并且每个时间步的词元对应于一个字符。 请注意,因为我们可以选择任意偏移量来指示初始位置,所以我们有相当大的自由度。

 因此,我们应该从 图8.3.1中选择哪一个呢? 事实上,他们都一样的好。 然而,如果我们只选择一个偏移量, 那么用于训练网络的、所有可能的子序列的覆盖范围将是有限的。 因此,我们可以从随机偏移量开始划分序列, 以同时获得覆盖性(coverage)和随机性(randomness)

随机采样 

在随机采样中,每个样本都是在原始的长序列上任意捕获的子序列。 在迭代过程中,来自两个相邻的、随机的、小批量中的子序列不一定在原始序列上相邻。 对于语言建模,目标是基于到目前为止我们看到的词元来预测下一个词元, 因此标签是移位了一个词元的原始序列。

下面的代码每次可以从数据中随机生成一个小批量。 在这里,参数batch_size指定了每个小批量中子序列样本的数目, 参数num_steps是每个子序列中预定义的时间步数。

def seq_data_iter_random(corpus, batch_size, num_steps):  #@save
    """使用随机抽样生成一个小批量子序列"""
    # 从随机偏移量开始对序列进行分区,随机范围包括num_steps-1
    corpus = corpus[random.randint(0, num_steps - 1):]
    # 减去1,是因为我们需要考虑标签
    num_subseqs = (len(corpus) - 1) // num_steps
    # 长度为num_steps的子序列的起始索引
    initial_indices = list(range(0, num_subseqs * num_steps, num_steps))
    # 在随机抽样的迭代过程中,
    # 来自两个相邻的、随机的、小批量中的子序列不一定在原始序列上相邻
    random.shuffle(initial_indices)

    def data(pos):
        # 返回从pos位置开始的长度为num_steps的序列
        return corpus[pos: pos + num_steps]

    num_batches = num_subseqs // batch_size
    for i in range(0, batch_size * num_batches, batch_size):
        # 在这里,initial_indices包含子序列的随机起始索引
        initial_indices_per_batch = initial_indices[i: i + batch_size]
        X = [data(j) for j in initial_indices_per_batch]
        Y = [data(j + 1) for j in initial_indices_per_batch]
        yield torch.tensor(X), torch.tensor(Y)

顺序分区 

 

总结 

  • 语言模型是自然语言处理的关键。

  • n元语法通过截断相关性,为处理长序列提供了一种实用的模型。

  • 长序列存在一个问题:它们很少出现或者从不出现。

  • 齐普夫定律支配着单词的分布,这个分布不仅适用于一元语法,还适用于其他n元语法。

  • 读取长序列的主要方式是随机采样和顺序分区。在迭代过程中,后者可以保证来自两个相邻的小批量中的子序列在原始序列上也是相邻的。

 

标签:机器,语言,模型,batch,小批量,num,steps,随机,序列
From: https://www.cnblogs.com/yccy/p/17825209.html

相关文章

  • 基于大模型的日程管理通知系统——数据库设计心得
    项目:基于大模型的日程管理通知系统指导老师:李友焕组名:PMA班级:软件21011.  前言上学期数据库系统的课程,让我们了解了数据库的基本操作和设计原则。我们认识到良好的数据库设计在工程项目中是至关重要的。它直接影响到项目的成功与否,对系统的性能、安全性、可维护性和用户体......
  • go语言命令行程序(CLI)开发工具小记
    Go语言领域,命令行程序占据比较重要的位置。因此,命令行程序的快速开发及工具选择就成为一个不可忽视的问题。本文简要总结使用Go语言开发命令行程序中常用的几个框架。一、CobraCobra是关于golang的一个命令行解析库,用它能够快速创建功能强大的cli应用程序和命令行工具。cobra......
  • 机器学习——文本预处理
    对于序列数据处理问题,我们在 8.1节中评估了所需的统计工具和预测时面临的挑战。这样的数据存在许多种形式,文本是最常见例子之一。例如,一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。本节中,我们将解析文本的常见预处理步骤。这些步骤通常包括:将文本作为字符串......
  • 基于 three.js 加载器分别加载模型
    点击查看代码/***参数:模型文件路径,成功回调函数**基于three.js加载器分别加载模型**全部加载后通过回调函数传出打印*/import{FBXLoader}from'three/examples/jsm/loaders/FBXLoader.js'import{GLTFLoader}from'three/examples/jsm/loaders/GLTF......
  • 机器学习——序列模型
    在本质上,音乐、语音、文本和视频都是连续的。如果它们的序列被我们重排,那么就会失去原有的意义。比如,一个文本标题“狗咬人”远没有“人咬狗”那么令人惊讶,尽管组成两句话的字完全相同。处理序列数据需要统计工具和新的深度神经网络架构。为了简单起见,我们以 图8.1.1所示的股......
  • C语言编程 C语言入门
    1.初识C语言(1){C语言程序设计教程笔记}1基础框架/*#include<stdio.h>//格式intmain()//输入{printf("helloworld\n");//打印system("pause");//显示return0;//返回}/2注释单行//整段/...*/或Ctrl+k+c注释Ctrl+k+u解除注释//char字符类型'W'字母int数字150float小数//%......
  • 去噪扩散概率模型
    DenoisingDiffusionProbabilisticModelsNeurlPS2020https://arxiv.org/pdf/2006.11239.pdfDALLE2https://openai.com/dall-e-2/Abstract​ 我们提出了使用扩散概率模型的高质量图像合成结果,这是一类受非平衡热力学启发的潜在变量模型。我们的最佳结果是通过在加权变异......
  • 一文带你玩转SQL中的DML(数据操作)语言:从概念到常见操作大解析!数据操作不再难!
    前面我们介绍了SQL语句中数据定义语言(DDL)的概念以及它的常用语句,那么DML又是什么呢?二者有什么区别呢?本篇文章将为你讲述。一、DML简介DML是指数据操作语言,英文全称是DataManipulationLanguage,用来对数据库中表的数据记录进行更新。它创建的模式(表)使用数据操作语言来填充。DDL......
  • 银行卡转账记录p图软件,建设邮政工商招商农业,易语言回执单生成开发!
    花了好长时间设计出来了这么一个软件,当然各个功能我都做了防范处理界面还有生成的图片都有对应的水印提示,做不了啥坏事,这里就是分享下原理和代码还有运行逻辑,仅此而已,软件加了一个画板,画面上面的图片资源会根据单选框的选择随之改变,实现了针对性替换模版图的效果,图片资源都加入到......
  • 一文带你玩转SQL中的DML(数据操作)语言:从概念到常见操作大解析!数据操作不再难!
    前面我们介绍了SQL语句中数据定义语言(DDL)的概念以及它的常用语句,那么DML又是什么呢?二者有什么区别呢?本篇文章将为你讲述。一、DML简介DML是指数据操作语言,英文全称是DataManipulationLanguage,用来对数据库中表的数据记录进行更新。它创建的模式(表)使用数据操作语言来填充。DD......