首页 > 编程语言 >基于python框架实现一个简化的trm

基于python框架实现一个简化的trm

时间:2024-09-28 10:49:59浏览次数:9  
标签:Transformer trm 训练 python 模型 单词 简化 反向 向量

基于py框架实现一个简化的trm?

目录

词向量

本部分特别致谢【自然语言处理】Word2Vec 词向量模型详解 + Python代码实战_word2vec模型-CSDN博客

A1回顾

cos∟=0,同向=1,反向180°=-1

image-20240729104212201

基于word2vec开发的gensim库:由图,词向量捕捉了相似度

image-20240729104514156

You shall know a word by the company it keeps. ——John Rupert Firth (1890-1960)

image-20240729104918102

"分布假说"

image-20240729105954178

A2引入

文本向量化,且向量的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖

image-20240729110412388

image-20240729110532447

如何描述词的特征?通常都是在词的层面上来构建特征。Word2Vec就是要把词转化为向量

假设我现在有一个训练好的词向量,是一个50维长度的向量,它在某个别的单独位置上(比如位置5、10、15处)的热度最高(+0.8);然后取“man”、“boy”、“water”三个单词来对比,发现“man”和“boy”的热度图中,位置8到10和45到50两个区间上二者相似(+0.6),而“water”一词的热度图仅在个别位置(比如位置13处、33处)和“boy”存在相似。以上例子如何说明了“词的特征存在实际意义”呢?

image-20240729112130398

维度特征的语义解释

  • 对于“man”和“boy”来说,位置8到10和45到50的相似值(+0.6)可能捕捉到了这两个词在某些语义特征上的相似性,如“性别(男性)”或“人的特征”。这些特征可能与性别、年龄或社会角色相关。
  • 而“water”一词在位置13和33与“boy”存在相似,表明这些维度可能捕捉了更广泛的或不同的特征,比如“物理特性”或“生活中常见的实体”。

模型(对比)

image-20240729113031982

网络的输出是所有词可能是下一个词的概率

A3DUNE --举例

Thou shalt not make a machine in the likeness of a human mind.

ini化

词典大小 N 为12(即N=12)。词向量的维度 K 可以是300(即K=300),这是超参数,我们可以设置为任意值。

我们会初始化一个 N×K 的词向量矩阵,这里每一行是一个300维的词向量。例如:

词向量矩阵 (N×K):
[ [0.1, -0.2, ...],  // "Thou"
  [0.5, 0.1, ...],   // "shalt"
  ...,
  [0.3, -0.4, ...] ] // "mind"

这每一行是对应于词典中每个词的词向量,初始化时的值是随机的。

独热

对于句子“Thou shalt not make a machine in the likeness of a human mind”,我们会生成一个One-Hot编码矩阵。每个单词会在矩阵中有一个唯一的“1”位置,其余位置是“0”。如果“Thou”在词典中对应的位置是0,则One-Hot编码矩阵的第0行将是:

One-Hot 编码矩阵 (N×N):
[ [1, 0, 0, ..., 0],  // "Thou"
  [0, 1, 0, ..., 0],  // "shalt"
  ...,
  [0, 0, 0, ..., 1] ] // "mind"

前向传播

将One-Hot编码矩阵与词向量矩阵相乘。在这种情况下,由于One-Hot编码矩阵中只有一个“1”,其他为“0”,乘法的结果将提取出词向量矩阵中对应的词向量。

反向传播

在训练过程中,通过反向传播算法,词向量矩阵中的值会不断调整,以最小化损失函数。词向量会被更新,以更好地捕捉句子中词语之间的关系和语义特征。

反向传播是训练神经网络的核心原理,不同的模型都依赖于反向传播来更新网络的权重。架构差异如下:

1. ELMo(Embeddings from Language Models)

​ ELMo使用双向LSTM(长短期记忆网络)来生成上下文相关的词向量。与传统的词嵌入(如Word2Vec)不同,ELMo能够捕捉上下文信息,因此其词向量在不同上下文中会有所不同。在ELMo中,反向传播算法用于训练LSTM模型。在训练过程中,网络会调整LSTM的参数以最小化预测误差,从而优化上下文词向量的表示。反向传播在这里用于更新LSTM网络的权重,包括隐藏层的参数。

2. Transformer

​ Transformer模型引入了自注意力机制和多头注意力机制,摆脱了RNN(递归神经网络)的序列处理限制。它通过自注意力机制捕捉长距离的依赖关系,从而改进了语言建模和生成。Transformer模型的训练也依赖于反向传播。反向传播算法用于优化网络中的权重,包括自注意力机制中的权重和前馈网络的权重。Transformer中的每一层(包括多头注意力层和前馈网络层)都有其需要优化的参数,这些参数通过反向传播来调整。

3. GPT(Generative Pre-trained Transformer)

​ GPT基于Transformer架构,但特别设计为生成模型。它使用自回归的方式生成文本,输入上下文后预测下一个词。GPT的训练过程中,反向传播用于优化Transformer模型的参数,主要集中在自注意力机制和前馈网络上。训练过程中,GPT的目标是最小化生成文本与真实文本之间的差异,通过反向传播调整参数以提高生成效果。

4. BERT(Bidirectional Encoder Representations from Transformers)

​ BERT是基于Transformer的双向编码器模型,能够在训练过程中考虑上下文的双向信息。这使得BERT在各种NLP任务中表现优异。BERT的训练包括两个阶段:预训练和微调。在预训练阶段,BERT使用掩码语言模型(MLM)和下一个句子预测(NSP)任务来训练模型,反向传播用于优化模型的参数。微调阶段则根据具体任务(如问答、文本分类)进行进一步训练,反向传播在这里也用于优化参数以适应特定任务的要求。

image-20240729115038103

A4训练过程

数据构建

Q:数据应该从哪找呢?

A:一切具有正常逻辑的语句都可以作为训练数据。

image-20240729115209129

计算困境与方案

窗口会依次滑动以覆盖每个词及其上下文,以生成新的上下文-目标对。考虑sftmx的计算公式:

image-20240729153415460

其中,zi 是第 i 个单词的得分(logit),N 是词汇表的大小。

词汇表(Vocabulary)

词汇表是一个自然语言处理模型中所使用的所有单词或词组的集合。对于每个单词,模型会为其分配一个独特的索引。词汇表的大小(也称为词典大小,V)是这个集合中的单词总数。

具体例子

假设我们正在训练一个语言模型来预测英语中的下一个单词。模型的任务是给定前面的单词序列,预测下一个单词是什么。

  1. 输入 "I love reading books about"……
  2. 预测下一个单词可能是 "science"、"history"、"fiction" 等

假设我们的词汇表大小为 1,000,000(百万)个单词,这意味着我们的模型可以预测的单词有一百万个。

SoftMax的计算
  1. 模型输出得分: 模型对每个词汇表中的单词计算一个得分(logit),表示每个单词作为下一个单词的相对可能性。这些得分可能来自于前面的神经网络层。

    假设我们有得分向量:[z_1, z_2, ..., z_1000000],其中 zi 是第 i 个单词的得分。

  2. 指数运算: SoftMax需要对每个得分取指数,然后归一化。这意味着我们要计算:

    image-20240729154521401

  3. 归一化: 计算这些指数值的总和,然后每个得分对应的概率是:

    image-20240729154544137

    其中 P 是单词 w 出现的概率。

可能的解决方案

​ 这意味着需要计算1,000,000次得分、指数,然后计算1,000,000个概率,(高维度数据)需要大量内存。

​ 这对实时应用(如翻译、语音识别等)是一个巨大的瓶颈,因为我们希望系统能在用户等待时快速响应。

负采样(Negative Sampling)

初始解决方案:假设,传统模型中,我们输入 not ,希望输出是 thou,但是由于语料库庞大,最后一层 SoftMax 太过耗时,所以我们可以改为:将 not 和 thou 同时作为输入,做一个二分类问题,类别 1 表示 not 和 thou 是邻居,类别 0 表示它们不是邻居。

出发点非常好,但是由于训练集本来就是用上下文构建出来的,所以训练集构建出来的标签全为 1 ,无法较好的进行训练,如图:

image-20240729155517769

改进方案:加入一些负样本(负采样模型),一般负采样个数为 5 个就好,负采样示意:

image-20240729155614351

​ 即,负采样是指在训练过程中,不仅学习实际存在的正样本对,还通过引入一些负样本对(即不应该出现在一起的对)来帮助模型学习。例如,如果实际存在的排队顺序是ABCDE,那么负样本对可能是“AE”、“BD”等,它们不会在正常的排队顺序中出现。

​ 对于正样本对“AB”,希望模型输出一个高的相似度或概率(表示它们应该在一起)。

​ 对于负样本对“AE”,希望模型输出一个低的相似度或概率(表示它们不应该在一起)。

A5模型(抉择)

假如目前我们决定使用word2vec或transformer来针对煤矿行业训练一个用于判断某个多义词在不同语境下含义(比如之前提到的“微小震动”)的模型,综合考虑来说更适合用二者中的哪一个?

Word2Vec

优点
  • 相对简单,易于实现和训练。
  • 训练速度较快,计算资源需求较少。
缺点
  • 词向量依赖固定上下文窗口,无法动态地处理复杂、长距离依赖关系(多义词的细粒度)。

Transformer

优点
  • BERT和GPT,能够处理更复杂的上下文信息,捕捉长距离依赖关系。
  • 有许多预训练的Transformer模型可以微调,以减少训练时间和数据需求。
缺点
  • 大量的计算资源和内存,训练过程可能较慢。
  • 模型更复杂,调优和实现的难度较高。

代码实战

关于全角转半角的问题,鸣谢word2vec词向量的训练--实战篇(语言模型词向量的生成)_词向量宽度是怎么做到12288-CSDN博客

关于PyTorch的关于自然语言处理的常用包,参考【从零开始学习深度学习】48.Pytorch_NLP实战案例:如何使用预训练的词向量模型求近义词和类比词_nlp近义词任务-CSDN博客

标签:Transformer,trm,训练,python,模型,单词,简化,反向,向量
From: https://www.cnblogs.com/yansz001216/p/18437118

相关文章

  • python requests模块学习
    1、模块介绍Pythonrequests是一个常用的HTTP请求库,可以方便地向网站发送HTTP请求,并获取响应结果。2、get请求示例#导入requests包importrequests#发送请求x=requests.get('https://www.run.com/')#返回http的状态码print(x.status_code)#获取响应......
  • python爬虫广州城市租房需求数据分析系统 可视化大屏分析系统xumld.
    目录项目介绍技术栈具体实现截图Scrapy爬虫框架关键技术和使用的工具环境等的说明解决的思路开发流程爬虫核心代码展示系统设计论文书写大纲详细视频演示源码获取项目介绍租房者模块账户管理:注册、登录、个人信息编辑、密码更改、账户注销。房源浏览:查看不同类型......
  • 计算机毕业设计python校园失物招领管理系统 gtvcz--vue+django pycharm
    目录python语言技术路线框架介绍具体实现截图技术栈和环境说明解决的思路性能/安全/负载方面核心代码部分展示详细视频演示源码获取方式python语言Python的扩展性也很好,其可以利用c语言编写模块,编译链接到解释器,从而使Python能够调用该c模块中的接口。反之,C语言也能......
  • Python基础04_Python字符串(下)&Python输入和输出&条件语句&循环语句&pass语句
    目录Python字符串(下)6、字符串的常用函数APIPython输入和输出1、输出 2、输入条件语句1.if2、if-else3、if-elif-else循环语句1、range函数2、for-in循环3、while循环4、循环控制break:用于 跳出 当前循环: continue:用于跳过当前迭代,继续下一次迭代:5、p......
  • 在Mac上搭建Python环境
    在Mac上搭建Python环境,通常有以下几个步骤:1、安装Homebrew(如果尚未安装):打开终端,输入以下命令安装Homebrew:/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2、使用Homebrew安装Python:终端中输入以下命令安装Python3:......
  • python3 SSLCertVerificationError 研究结论
    上一篇博客已经分析ssl流程,这次直接说报错的结果方法:对于pip3安装第三方包失败:1.建议直接退出代理charles2.命令行前输入: exportREQUESTS_CA_BUNDLE=~/Documents/charles-ssl-proxying-certificate.pem,然后执行pip3命令。 这个文件pem可以使用charles导出 如果需要......
  • Python 从入门到实战30(高级文件的操作)
            我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。        上篇文章我们讨论了操作目录的相关知识。今天我们将学习一下高级文件操作的相关知识。    ......
  • 基于Python+Vue开发的旅游景区管理系统
    项目简介该项目是基于Python+Vue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的旅游景区管理系统项目,大学生可以在实践中学习和提升自己的......
  • 【鸟类识别系统】计算机毕设项目+卷积神经网络算法+人工智能+深度学习+模型训练+Pytho
    一、介绍鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网......
  • 基于Python+Vue开发的医院门诊预约挂号系统
    项目简介该项目是基于Python+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的医院门诊预约挂号管理系统项目,大学生可以在实践中学习......