使用PyTorch建立您的第一个文本分类模型

文本分类(LSTM+PyTorch) PyTorch实战项目,基于LSTM的文本分类,数据集选用Kaggle上的Twitter数据集,用于评估评论是positive还是negative。 阅读详情

来源:analyticsvidhya

编译:X程序媛

来自:磐创AI公众号

总览

  • 了解如何使用PyTorch进行文本分类

  • 掌握包装填充特征(Pack Padding feature)的重要性

  • 了解解决文本分类问题涉及的关键点

介绍

我总是选择最先进的体系结构来进行数据科学编程马拉松的首次提交。由于PyTorch,Keras和TensorFlow等深度学习框架,实现最先进的体系结构已变得非常容易。这些框架提供了一种简单的方法,以最少的概念和编码技能知识即可实现复杂的模型架构和算法。简而言之,它是数据科学界的金矿!

pytorch-11

在本文中,我们将使用PyTorch,它以其快速的计算能力而闻名。因此,在本文中,我们将逐步讲解解决文本分类问题的要点。然后,我们将在PyTorch中实现我们的第一个文本分类器!

注意:我强烈建议您先阅读以下文章,然后再继续阅读本文章。

  • PyTorch入门指南-从零开始

目录

1.为什么选择使用PyTorch进行文本分类?

  • 处理超出词汇表的单词

  • 处理可变长度序列

  • 包装器和预训练模型

2.理解问题陈述

3.用PyTorch实现文本分类

为什么选择使用PyTorch进行文本分类?

在深入探讨技术概念之前,让我们快速熟悉将要使用的框架–PyTorch。PyTorch的基本单位是张量(Tensor),类似于python中的“numpy”数组。使用PyTorch有很多好处,但其最重要的两个是:

  • 动态网络–在运行期间可以改变网络架构

  • 跨GPU的分布式训练

index

我敢肯定,您想知道–我们为什么要选择使用PyTorch来处理文本数据?让我们讨论一下PyTorch有哪些令人难以置信的功能,这些功能使其与其他框架不同,尤其是在处理文本数据时。

1.处理超出词汇表的单词

在固定的词汇表上训练文本分类模型。但是在训练过程中,我们可能会遇到一些词汇表中不存在的单词。这些单词被称为词汇表外单词。超出词汇表单词的出现可能是一个关键问题,因为这会导致信息丢失。

为了处理超出词汇表的单词,PyTorch支持一项很酷的功能,即用未知令牌(token)来替换训练数据中的出现次数少的单词。反过来,这将有助于我们解决单词超出词汇表的问题。

除了处理超出词汇表的单词之外,PyTorch还可以处理可变长度的序列!

2. 处理可变长度的序列

您是否听说过递归神经网络需要处理可变长度的序列?有没有想过要如何实现?PyTorch带有一个有用的功能,即“填充序列(Packed Padding sequence)”,这个功能可以实现动态循环神经网络。

填充是指在句子的开头或结尾添加一个填充令牌的额外令牌的过程。随着每个句子中单词数量的变化,我们通过添加padding标记将变长度的输入句子转换为具有相同长度的句子。

由于大多数框架都支持静态网络,即在整个模型训练过程中,神经网络体系结构保持不变,因此需要进行填充。尽管填充解决了可变长度序列的问题,但是这个想法还有另一个问题–神经网络体系结构像处理其他信息/数据一样处理这些填充令牌。让我通过一个简单的图来解释这一点。

如您在下图中所见,在生成输出时,还需要使用最后一个元素(即填充令牌)。这可以通过PyTorch中的填充序列来解决。

Untitled-Diagram

填充会忽略带有填充令牌的输入时间步。这些值从未显示给递归神经网络,这有助于我们构建动态循环神经网络。

Untitled-Diagram1

3. 包装器和预训练模型

目前正在为PyTorch框架推出最先进的架构。Hugging Face发布了transformer,为自然语言理解提供了超过32种最先进的体系结构!

不仅如此,PyTorch还为一些任务提供了预训练的模型,例如文本转语音,对象检测等,用几行代码就可以实现。

不可思议,难道不是吗?这些功能只是PyTorch的许多有用的功能中的一部分。现在让我们使用PyTorch来解决文本分类问题。

了解问题陈述

作为本文的一部分,我们将致力于解决一个非常有趣的问题。

Quora希望在其平台上跟踪用户不真诚的问题,以使用户在共享知识时感到安全。在这种情况下,一个不真诚的问题被定义为一个旨在陈述而不是在寻求有用答案的问题。为了进一步说明这一点,这里有一些特征可以表明一个特定的问题是不真诚的:

  • 具有中立的语气

  • 贬低或煽动

  • 不扎根于现实

  • 使用性内容(乱伦,兽交,恋童癖)来让人感到震惊,而不是寻求真正的答案

训练数据包括所提出的问题以及一个标志,该标志表示该问题是否被识别为不真诚(目标= 1)。真实标签包含一些噪音,即不能保证它们是完美的。我们的任务是在给定的问题下,判断该问题是否具有“诚意”。您可以从此处下载数据集。

现在该使用PyTorch来编写我们自己的文本分类模型了。

用PyTorch来实现文本分类

让我们首先导入构建模型所需的库。这是我们要使用的软件包/库的简要概述-

  • Torch包用于定义张量(Tensor)和数学运算

  • TorchText是PyTorch中的自然语言处理(NLP)库。该库包含一些用于预处理文本的脚本和流行的NLP数据集。

#处理张量(tensors)
import torch


#处理文本数据
from torchtext import data

为了使结果可以重复,我指定了随机种子的数值。由于深度学习模型的随机性,在执行时可能会产生不同的结果,因此指定随机种子的数值很重要。

#产生相同的结果
SEED = 2019


#Torch
torch.manual_seed(SEED)


#Cuda算法
torch.backends.cudnn.deterministic = True

数据预处理:

现在,让我们看看如何使用字段对象来预处理文本。有两种不同类型的字段对象–Field和LabelField。让我们快速了解两者之间的区别-

  1. Field:数据模块中的Field对象用于为数据集中的每一列指定预处理步骤。

  2. LabelField:LabelField对象是Field对象的特例,仅用于分类任务。它的唯一用途是将unk_token按顺序设置为默认值(None)。

在使用Field之前,让我们看一下Field的不同参数以及它们的用途。Field的参数:

  • Tokenize:指定句子的令牌化(tokenize)方式,即转换将句子转换为单词的方式。我正在使用spacy令牌生成器,因为它使用了新颖的令牌生成算法

  • Lower: 将文本转换为小写

  • batch_first: 输入和输出的第一维始终是批处理大小(batch size)

TEXT = data.Field(tokenize='spacy',batch_first=True,include_lengths=True)
LABEL = data.LabelField(dtype = torch.float,batch_first=True)

接下来,我们将创建一个元组列表,其中每个元组中的第一个值包含一个列名,第二个值是上面定义的字段对象。此外,我们将按照csv的列的排列顺序,来排列每个元组,并指定为(None,None)以忽略csv文件中的列。

让我们只读取需要的列-问题和标签

fields = [(None, None), ('text',TEXT),('label', LABEL)]

在下面的代码块中,我通过定义字段对象加载自定义数据集。

#加载自定义数据集
training_data=data.TabularDataset(path = 'quora.csv',format = 'csv',fields = fields,skip_header = True)


#打印预处理文本
print(vars(training_data.examples[0]))

现在让我们将数据集分为训练数据和验证数据

import random
train_data, valid_data = training_data.split(split_ratio=0.7, random_state = random.seed(SEED))

准备输入和输出序列:

下一步是构建词汇表并将文本转换为整数序列。词汇表包含文本数据中的单词。每个单词都分配有一个索引。以下是参数

参数:

  1. min_freq:忽略频率小于指定频率的单词,并将其映射到未知令牌。

  2. 两个特殊的令牌,unknown和padding,它们也将添加到词汇表中

  • Unknown令牌用于处理超出词汇表的单词

  • Padding令牌用于制作相同长度的输入序列

让我们建立词汇表并使用预训练的词嵌入来初始化单词。如果您希望随机初始化嵌入,请忽略vectors参数。

#初始化glove词嵌入
TEXT.build_vocab(train_data,min_freq=3,vectors = "glove.6B.100d")  
LABEL.build_vocab(train_data)


#文本中的唯一标记
print("Size of TEXT vocabulary:",len(TEXT.vocab))


#标签中唯一令牌的集合
print("Size of LABEL vocabulary:",len(LABEL.vocab))


#常用单词
print(TEXT.vocab.freqs.most_common(10))


#单词词典
print(TEXT.vocab.stoi)

现在,我们将准备用于训练模型的批数据(batch)。BucketIterator以需要最少的填充量的方式来形成批数据(batch)。

#检查cuda是否可用
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')


#设置批数据大小
BATCH_SIZE = 64


#加载迭代器
train_iterator, valid_iterator = data.BucketIterator.splits(
    (train_data, valid_data), 
    batch_size = BATCH_SIZE,
    sort_key = lambda x: len(x.text),
    sort_within_batch=True,
    device = device)

模型架构

现在是时候定义解决二分类问题的模型结构了。torch的nn模块是所有模型的基本模型。这意味着每个模型都必须是nn模块的子类。

我在这里定义了2个函数:init和forward。让我解释一下这两个函数的用法:

  1. Init:每当创建类的实例时,都会自动调用init函数。因此,它被称为构造函数。传递给类的参数由构造函数初始化。我们在该方法中定义模型将使用的所有层。

  2. Forward:定义输入数据的正向传递。

最后,让我们详细了解用于构建模型架构的不同层及其参数–

嵌入层(Embedding layer):嵌入对于任何与NLP相关的任务都非常重要,因为它以数字格式表示单词。嵌入层创建一个查找表,其中每一行代表一个单词的嵌入。嵌入层将整数序列转换为密集的矢量表示形式。这是嵌入层的两个最重要的参数–

  1. num_embeddings:词汇表单词的数量

  2. embedding_dim:一个单词表示的维数

LSTM:LSTM是RNN的变体,能够捕获长期依赖关系。您应该熟悉的LSTM一些重要的参数。以下是该层的参数:

  1. input_size:输入的维数

  2. hidden_size:隐藏节点数

  3. num_layers:要堆叠的层数

  4. batch_first:如果为True,则输入和输出张量按(batch,seq,feature)提供

  5. dropout:如果不为零,则在除最后一层以外的每个LSTM层的输出上都加入一个Dropout层,其丢弃概率等于dropout的值。默认值:0

  6. bidirection:如果为True,则使用双向的LSTM

线性层(Linear Layer):线性层是指全连接层(dense层)。此处描述了两个重要参数:

  1. in_features:输入特征的数量

  2. out_features:输出特征的数量Pack Padding:像之前所讨论的那样,pack padding用于定义动态循环神经网络。如果没有pack padding,填充输入的令牌也将由rnn处理,并返回填充令牌的隐藏状态。这是一个很棒的包装器,不显示输入的填充。它只是忽略这些值并返回未填充令牌的隐藏状态。

我将从定义架构的所有层开始:

import torch.nn as nn


class classifier(nn.Module):


    #定义模型中使用的所有层
    def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim, n_layers, 
                 bidirectional, dropout):


        #构造函数
        super().__init__()


        #embeddding层
        self.embedding = nn.Embedding(vocab_size, embedding_dim)


        #lstm层
        self.lstm = nn.LSTM(embedding_dim, 
                           hidden_dim, 
                           num_layers=n_layers, 
                           bidirectional=bidirectional, 
                           dropout=dropout,
                           batch_first=True)


        #dense层
        self.fc = nn.Linear(hidden_dim * 2, output_dim)


        #激活函数
        self.act = nn.Sigmoid()


    def forward(self, text, text_lengths):


        #text = [batch size,sent_length]
        embedded = self.embedding(text)
        #embedded = [batch size, sent_len, emb dim]


        #填充句子
        packed_embedded = nn.utils.rnn.pack_padded_sequence(embedded, text_lengths,batch_first=True)


        packed_output, (hidden, cell) = self.lstm(packed_embedded)
        #hidden = [batch size, num layers * num directions,hid dim]
        #cell = [batch size, num layers * num directions,hid dim]


        #合并(concat)前向传播和后向传播的最终隐藏状态
        hidden = torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim = 1)


        #hidden = [batch size, hid dim * num directions]
        dense_outputs=self.fc(hidden)


        #最终激活函数
        outputs=self.act(dense_outputs)


        return outputs

下一步是定义超参数并实例化模型。这是相同的代码块:

#定义超参数
size_of_vocab = len(TEXT.vocab)
embedding_dim = 100
num_hidden_nodes = 32
num_output_nodes = 1
num_layers = 2
bidirection = True
dropout = 0.2


#实例化模型
model = classifier(size_of_vocab, embedding_dim, num_hidden_nodes,num_output_nodes, num_layers, 
                   bidirectional = True, dropout = dropout)

让我们看一下模型摘要(summary),并使用预训练的词嵌入来初始化嵌入层

#模型框架
print(model)


#可训练参数的数量
def count_parameters(model):
    return sum(p.numel() for p in model.parameters() if p.requires_grad)


print(f'The model has {count_parameters(model):,} trainable parameters')


#初始化预训练的词嵌入
pretrained_embeddings = TEXT.vocab.vectors
model.embedding.weight.data.copy_(pretrained_embeddings)


print(pretrained_embeddings.shape)

在这里,我为模型定义了优化器,损失(loss)和度量指标:

import torch.optim as optim


#定义优化器和损失
optimizer = optim.Adam(model.parameters())
criterion = nn.BCELoss()


#定义度量指标
def binary_accuracy(preds, y):
    #round预测到最接近的整数
    rounded_preds = torch.round(preds)


    correct = (rounded_preds == y).float() 
    acc = correct.sum() / len(correct)
    return acc


#转化为cuda(如果可用)
model = model.to(device)
criterion = criterion.to(device)

构建模型有两个阶段:

  1. 训练阶段:model.train()将模型设置为训练阶段并激活dropout层。

  2. 测试阶段:model.eval()将模型设置为评估阶段并停用dropout层。

这是代码块,用于定义训练模型的函数

def train(model, iterator, optimizer, criterion):


    #每个epoch进行初始化
    epoch_loss = 0
    epoch_acc = 0


    #将模型设置为训练阶段
    model.train()


    for batch in iterator:


        #重设梯度
        optimizer.zero_grad()


        #获取文本和单词数量
        text, text_lengths = batch.text


        #转换为一维张量
        predictions = model(text, text_lengths).squeeze()


        #计算loss
        loss = criterion(predictions, batch.label)


        #计算二分类准确度
        acc = binary_accuracy(predictions, batch.label)


        #后向传播损失并计算梯度
        loss.backward()


        #更新权重
        optimizer.step()


        #损失和准确度
        epoch_loss += loss.item()  
        epoch_acc += acc.item()


    return epoch_loss / len(iterator), epoch_acc / len(iterator)

因此,我们有一个训练模型的函数,但是我们还需要一个函数来评估模型。让我们来写吧!

def evaluate(model, iterator, criterion):


    #每个epoch进行初始化
    epoch_loss = 0
    epoch_acc = 0


    #停用dropout层
    model.eval()


    #停用自动求导
    with torch.no_grad():


        for batch in iterator:


            #获取文本和单词数量
            text, text_lengths = batch.text


            #转换为一维张量
            predictions = model(text, text_lengths).squeeze()


            #计算损失和准确度
            loss = criterion(predictions, batch.label)
            acc = binary_accuracy(predictions, batch.label)


            #跟踪损失和准确度
            epoch_loss += loss.item()
            epoch_acc += acc.item()


    return epoch_loss / len(iterator), epoch_acc / len(iterator)

最后,我们在一定时间内训练模型,并在每个时间段保存最佳模型。

N_EPOCHS = 5
best_valid_loss = float('inf')


for epoch in range(N_EPOCHS):


    #训练模型
    train_loss, train_acc = train(model, train_iterator, optimizer, criterion)


    #评估模型
    valid_loss, valid_acc = evaluate(model, valid_iterator, criterion)


    #保存模型
    if valid_loss < best_valid_loss:
        best_valid_loss = valid_loss
        torch.save(model.state_dict(), 'saved_weights.pt')


    print(f'\tTrain Loss: {train_loss:.3f} | Train Acc: {train_acc*100:.2f}%')
    print(f'\t Val. Loss: {valid_loss:.3f} |  Val. Acc: {valid_acc*100:.2f}%')

让我们加载最佳模型并定义推断函数,该函数接受用户定义的输入并进行预测

#加载权重
path='/content/saved_weights.pt'
model.load_state_dict(torch.load(path));
model.eval();


#推断 
import spacy
nlp = spacy.load('en')


def predict(model, sentence):
    tokenized = [tok.text for tok in nlp.tokenizer(sentence)]  #令牌化(tokenize)句子 
    indexed = [TEXT.vocab.stoi[t] for t in tokenized]          #转换为整数序列
    length = [len(indexed)]                                    #计算单词个数
    tensor = torch.LongTensor(indexed).to(device)              #转换为张量
    tensor = tensor.unsqueeze(1).T                             #reshape成[batch, 单词个数]
    length_tensor = torch.LongTensor(length)                   #转换为张量
    prediction = model(tensor, length_tensor)                  #预测
    return prediction.item()

惊人!让我们使用此模型对几个问题进行预测:

#进行预测
predict(model, "Are there any sports that you don't like?")


#不真诚的问题
predict(model, "Why Indian girls go crazy about marrying Shri. Rahul Gandhi ji?")

尾注

我们已经了解了如何利用PyTorch来构建自己的文本分类模型,并了解填充的重要性。您可以调节LSTM的超参数,例如隐藏层节点数,隐藏层数等,来进一步提高性能。

如果您有任何疑问/反馈,请在评论部分留言。我会尽快回复您。

原文链接 :https://www.analyticsvidhya.com/blog/2020/01/first-text-classification-in-pytorch/

- end -





pytorch 实现RNN文本分类 除了模型不一样,其他部分和TextCNN实现过程都是一样的,可以参考下面的链接。这里就不详细解释了。 pytorch 实现 textCNN. 导入包 import torch import torch.nn as nn import torch.nn.functional as F import pandas as pd import jieba import os from torch.nn i... 阅读详情

相关推荐

用pytorch进行BERT文本分类

对于我们在上面看到的句子分类示例,我们只关注第一个位置的输出(将特殊的 [CLS] token 传递到该位置)。就像Transformer的普通编码器一样,BERT 将一系列单词作为输入,这些单词不断向上流动。sport(体育),business(商业),politics(政治),tech(科技),entertainment(娱乐)。有4个400多MB的文件,pytorch的模型对应的是436MB的那个文件。最后一步测试的时候,测试的准确率还是比较高的。可以用下面的代码查看model里面的模型。

闲人的专栏 5411

利用CPU跑YOLO识别猫的模型(初学者教程)

上期我们已经完成了环境的搭建,以及环境的检测。我们接着在上期的基础上进行训练模型。

qq_33177599的博客 2399

使用pytorch和torchtext进行文本分类

如何使用pytorch进行文本分类 文本分类是NLP领域的较为容易的入门问题,本文记录我自己在做文本分类任务以及复现相关论文时的基本流程,绝大部分操作都使用了torch和torchtext两个库。 1. 文本数据预处理 首先数据存储在三个csv文件中,分别是train.csv,valid.csv,test.csv,第一列存储的是文本数据,例如情感分类问题经常是用户的评论review,例如imdb或...

TianHongZXY的博客 5500

(二)升级版RNN实现文本情感分析(Pytorch)

文章目录准备数据搭建模型不同的RNN架构Bidirectional RNNMulti-layer RNNRegularization实现细节训练模型用户输入后续行动 在前面的笔记中,我们记下了基本面,以便进行情绪分析。在这个笔记本里,我们会得到不错的结果。 我们将使用: packed padded sequences pre-trained word embeddings different RNN architecture bidirectional RNN multi-layer RNN regula

赵小白的博客 3537

pytorch BERT文本分类保姆级教学

pytorch BERT文本分类保姆级教学 本文主要依赖的工具为huggingface的transformers,更详细的解释可以查阅文档。 定义模型 模型定义主要是tokenizer、config和model的定义,直接简单粗暴点可以使用huggingface的automodel,这里cache_dir为模型下载的路径,在config中可以定义后面模型要用到的参数,比如我后面model用的是BertForSequenceClassification,需要一个参数来定义模型预测的标签数,所以我在config

nathan_yo的博客 3328

NLP情感分析笔记(二):Updated情感分析

本章主要内容如下: 序列填充 预训练词嵌入 LSTM 双向 RNN 多层 RNN 正则化 优化 1.准备数据 首先设置seed,并将其分类训练、测试、验证集。 注意:由于 RNN 只能处理序列中的非 padded 元素(即非0数据),对于任何 padded 元素输出都是 0 。所以在准备数据的时候将include_length设置为True,以获得句子的实际长度。 import torch from torchtext.legacy import data SEED = 1234

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1244

torchtext0.14 实践手册(0.12版本同理)

torchtext

duoyasong5907的博客 3912

深交所 vs 上交所:Level-2实时数据推送规则详解与策略适配指南

本文深度解析沪深Level-2实时数据推送规则的关键差异,包括逐笔成交、逐笔委托和10档行情接口的处理逻辑。针对高频交易策略,详细对比上交所与深交所在数据推送机制、时间戳处理及委托队列解析等方面的差异,并提供具体的策略适配方案和性能优化建议,帮助量化投资者提升跨市场交易稳定性。

weixin_27310417的博客 1170

使用PyTorch建立你的第一个文本分类模型

概述 学习如何使用PyTorch执行文本分类 理解解决文本分类时所涉及的要点 学习使用包填充(Pack Padding)特性 介绍 我总是使用最先进的架构来在一些比赛提交模型结果。得益于PyTorch、Keras和TensorFlow等深度学习框架,实现最先进的体系结构变得非常容易。这些框架提供了一种简单的方法来实现复杂的模型体系结构和算法,而只需要很少的概念知识和代码技能。简而言之,它们...

TensorFlowNews 5055

永久关闭Windows更新的5种方法

很多家用电脑,如果系统自动更新的话,会变得越来越卡顿,且硬件型号兼容也并不完美。那么我们该如何彻底关闭Win11的自动更新呢?以下准备了5种方法,您可以根据自身实际情况选择合适的方法!

qq_43652793的博客 1万+

MOOS-ivp 实验一 MOOS软件的安装与执行

MOOS-ivp实验一 实验一步骤总结 文章目录MOOS-ivp实验一前言一、实验一1.下载软件2.安装必要的插件3.安装后检查4.路径添加5.执行示例文件总结 前言 在moos学习过程中,我觉得最好把学习的每一步骤都总结一下,方便日后进行回顾。moos官网设置了十八个实验,涉及到了moos的各个方面,完成这些实验也是moos入门的好办法。 一、实验一 实验一主要内容仅仅是软件的安装,仅仅这一步就花费了我接近两天的时间。主要问题发生在linux系统的配置问题上。 1.下载软件 svn co https:

weixin_44151170的博客 6672

独家 | 教你用Pytorch建立你的第一个文本分类模型!

作者:Aravind Pai翻译:王威力校对:张一豪本文约3400字,建议阅读10+分钟本文介绍了利用Pytorch框架实现文本分类的关键知识点,包括使...

数据派THU 906

Oracle到金仓数据库信创改造迁移实施规划方案

**性能测试和优化**:对金仓数据库的性能进行测试,根据业务负载情况进行必要的调优,确保系统能够稳定高效运行。- **数据兼容性**:评估Oracle数据库中的数据结构和金仓数据库的兼容性,明确需要重构的数据模型。- **性能测试**:通过对金仓数据库的性能测试,预估在实际业务环境下的表现,是否能达到业务需求。- **工具选择**:选择适合的迁移工具,如金仓数据库提供的迁移工具,能够提升迁移效率和准确性。- **全面迁移**:在初步迁移成功后,进行全面数据迁移,确保所有数据完整迁移到金仓数据库上。

hdrhdrjdididrr的博客 482

Pytorch Bert+BiLstm文本分类

文章目录前言一、运行环境二、数据三、模型结构四、训练五、测试及预测 前言 昨天按照该文章(自然语言处理(NLP)Bert与Lstm结合)跑bert+bilstm分类的时候,没成功跑起来,于是自己修改了一下,成功运行后,记录在这篇博客中。 一、运行环境 python==3.7 pandas==1.3.0 numpy==1.20.3 scikit-learn==0.24.2 torch==1.9.0 transformers==4.8.2 二、数据 1、Bert下载地址bert-base-chinese.

qq_44193969的博客 1万+

财务数字化——解读美的战略规划之财务组织体系建设【附全文阅读】

本文提出适用于集团企业的财务管控方案,面向财务负责人、HR及战略规划人员。方案整合四种管控模式,结合500强案例,构建"职能定位-架构设计-权责划分-人才发展"体系,涵盖财务五大模块。通过明确总部与事业部权责边界,提供组织架构等实操框架,旨在平衡财务管控与业务支持,提升效率与风控能力,满足集团财务体系规范化建设需求。

cdfunlove的博客 664

61、增益调度控制器:原理、建模与调优

本文详细介绍了增益调度控制器的原理、建模方法和调优流程。增益调度是一种针对非线性系统的控制策略,通过在不同工作点使用不同的线性控制器实现全局控制。文章涵盖了在Simulink中使用Control System Toolbox模块建模的具体步骤,以及如何利用systune进行增益调度表的调优。同时,还讨论了实际应用中的注意事项、典型案例(如化学反应器和飞机控制),并与其它控制方法进行了对比。最后,文章展望了增益调度控制器的未来发展趋势,包括与人工智能的结合、多目标优化调优以及实时调优能力的提升。

rgv234567的博客 186

教你用Pytorch建立你的第一个文本分类模型

学习如何使用PyTorch实现文本分类 理解文本分类中的关键点 学习使用压缩填充方法 介绍 在我的编程历程中,我总是求助于最先进的架构。现在得益于深度学习框架,比如说PyTorch,Keras和TensorFlow,实现先进的架构已经变得更简单了。这些深度学习框架提供了一种实现复杂模型架构和算法的简单方式,不需要你掌握大量的专业知识和编程技能。总结来说,这是数据科学的金矿。 在本文中,我们将使用PyTorch框架,它以其快速的计算能力而闻名。因此,在本文中,我们将介...

qq_38473097的博客 891

高通SDX55平台:5G速率问题排查分析方法

和大家分享一下高通5G平台5G速率问题排查分析方法。

四儿家的小祖宗的博客 5223

Pytorch——BERT 预训练模型及文本分类(情感分类)

BERT 预训练模型及文本分类 介绍 如果你关注自然语言处理技术的发展,那你一定听说过 BERT,它的诞生对自然语言处理领域具有着里程碑式的意义。本次试验将介绍 BERT 的模型结构,以及将其应用于文本分类实践。 知识点 语言模型和词向量 BERT 结构详解 BERT 文本分类 BERT全称为 Bidirectional Encoder Representations from Transformer,是谷歌在 2018 年 10 月发布的语言表示模型。BERT 通过维基百科和书籍语料组成的庞.

ASS-ASH的博客 4万+

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1383

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

独家 :教你用Pytorch建立你的第一个文本分类模型!

作者:Aravind Pai 翻译:王威力 校对:张一豪本文约3400字,建议阅读10+分钟本文介绍了利用Pytorch框架实现文本分类的关键知识...

数据分析 825

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用Pytorch的LSTM文本分类

Photo by Christopher Gower on Unsplash Christopher Gower在Unsplash上的照片 介绍 (Intro) Welcome to this tutorial! This tutorial will teach you how to build a bidirectional LSTM for text classification in ju...

weixin_26632369的博客 9600

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pytorch dropout_教你用Pytorch建立你的第一个文本分类模型!

作者:Aravind Pai翻译:王威力校对:张一豪本文约3400字,建议阅读10+分钟本文介绍了利用Pytorch框架实现文本分类的关键知识点,包括使用如何处理Out of Vocabulary words,如何解决变长序列的训练问题,举出了具体实例。标签:自然语言处理总览学习如何使用PyTorch实现文本分类理解文本分类中的关键点学习使用压缩填充方法介绍在我的编程历程中,我总是求助于最先进的架...

weixin_39688451的博客 279

Pytorch之Bert文本分类(一)

本文主要是针对入门级别的Bert使用,包括英文文本分类和中文文本分类。 英文部分使用 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding中的Cola数据集,任务如下图 这个数据集包括四列:[‘sentence_source’, ‘label’, ‘label_notes’, ‘sente...

SZU_Hadooper的博客 1万+

实践:基于双向LSTM模型完成文本分类任务

根据双向LSTM和单向LSTM的对比我们发现,正确率差距不大,但是速度缺相差较大,但理论上说双向LSTM具有比单向LSTM更多的参数,计算量更大,速度很慢,在这里却表现为速度大于单向,所以双向LSTM在有些时候是好于单向LSTM的,并且通过这次实验更能清晰的明白NLP的魅力。

m0_70026215的博客 3691
上一篇: PyTorch、TensorFlow实战框架教程来啦,仅此1次
下一篇: Github上10个超好看 可视化面板,后台管理页面有着落了
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值