文本分类(LSTM+PyTorch)

基于Keras搭建LSTM网络实现文本情感分类 LSTM实现情感分析 阅读详情
AI摘要

本文介绍了使用LSTM进行文本分类的流程,包括数据预处理、词向量(word2vec)构建、模型训练和评估。通过对比传统方法,强调了深度学习自动学习特征的优势,展示了如何在Python中利用PyTorch实现LSTM模型,并提供了完整的代码示例。

本文的配套代码已上传至github,链接在文末,同时附带中文数据集。

一、传统方法的基本步骤

  1. 预处理:首先进行分词,然后是除去停用词;
  2. 将文本表示成向量,常用的就是文本表示向量空间模型;
  3. 进行特征选择,这里的特征就是词语,去掉一些对于分类帮助不大的特征。常用的特征选择的方法是词频过滤,互信息,信息增益,卡方检验等;
  4. 接下来就是构造分类器,在文本分类中常用的分类器一般是SVM,朴素贝叶斯等;
  5. 训练分类器,后面只要来一个文本,进行文本表示和特征选择后,就可以得到文本的类别。

二、深度学习与传统方法的区别

传统做法主要问题的文本表示是高纬度高稀疏的,特征表达能力很弱;此外需要人工进行特征工程,成本很高。
利用深度学习做文本分类,首先还是要进行分词,这是做中文语料必不可少的一步,这里的分词使用的jieba分词。 词语的表示不用one-hot编码,而是使用词向量(word embedding),现在最常用的词向量的分布式表示就是word2vec,这样的分布式表示,既降低了维度,也体现了语义信息。使用深度学习进行文本分类,不需要进行特征选择这一步,因为深度学习具有自动学习特征的能力。

三、LSTM文本分类

先将句子进行分词,然后将每个词语表示为词向量,再将词向量按顺序送进LSTM,最后LSTM的输出就是这段话的表示,而且能够包含句子的时序信息。
LSTM文本分类流程图

1. 处理数据集
# utils.py

def read_file(path):
    """
    读取文本文件进行预处理
    :param path: 文件路径
    :return: 分词后的数组
    """
    if 'training_label' in path:
        with open(path, 'r', encoding='utf-8') as file:
            lines = file.readlines()
            lines = [line.strip('\n').split(' ') for line in lines]
            x = [line[2:] for line in lines]
            y = [line[0] for line in lines]
        return x, y
    elif 'training_nolabel' in path:
        with open(path, 'r', encoding='utf-8') as file:
            lines = file.readlines()
            x = [line.strip('\n').split(' ') for line in lines]
        return x
    else:
        with open(path, 'r', encoding='utf-8') as file:
            lines = file.readlines()
            x = ["".join(line[1:].strip('\n').split(",")) for line in lines[1:]]
            x = [item.split(' ') for item in x]
        return x

2. word2vec词向量模型

依据原始数据提取了data与labels之后,还需要依据文本生成词向量,即建立单词与向量的一一对应关系,同时建立词汇之间的语义联系。

# word2vec.py

from gensim.models import word2vec
import os
from utils import read_file


def train_word2vec(x):
    """
    LineSentence(inp):格式简单:一句话=一行; 单词已经过预处理并被空格分隔。
    size:是每个词的向量维度;
    window:是词向量训练时的上下文扫描窗口大小,窗口为5就是考虑前5个词和后5个词;
    min-count:设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃;
    sg ({0, 1}, optional) – 模型的训练算法: 1: skip-gram; 0: CBOW
    iter (int, optional) – 迭代次数,默认为5
    :param x: 处理好的数据集
    :return: 训练好的模型
    """
    return word2vec.Word2Vec(x, size=300, window=5, min_count=5, sg=1, iter=10)


if __name__ == '__main__':
    data_dir = './data'

    print("loading training data ...")
    train_x, y = read_file(os.path.join(data_dir, 'training_label.txt'))
    train_no_label = read_file(os.path.join(data_dir, 'training_nolabel.txt'))
    print("loading test data...")
    test_data = read_file(os.path.join(data_dir, 'testing_data.txt'))

    print("training text data and transforming to vectors by skip-gram...")
    model = train_word2vec(train_x + train_no_label + test_data)
    print("saving model...")
    model.save(os.path.join(data_dir, 'word2vec.model'))

3. 数据预处理

数据预处理就是按照词向量对样本中的数据生成句子的矩阵,因此这里需要统一句子的长度,生成数据集并实现数据集的封装。实现代码由两部分构成,首先生成对应矩阵,然后封装dataset便于使用dataloader加载数据。

# pre_processing.py
import torch
from gensim.models import Word2Vec


class DataProcess:
    def __init__(self, sentences, sen_len, w2v_path="./data/word2vec.model"):
        self.sentences = sentences  # 句子列表
        self.sen_len = sen_len      # 句子的最大长度
        self.w2v_path = w2v_path    # word2vec模型路径
Word Averaging模型做文本分类 稳定效果好模型简单 利用WORDAVG模型做文本分类 模型简单 效果号 简单思想就是 将每个词向量在 句子维度进行求平均 可以用avgpool来做平均池化 然后用平均后的向量作为句子向量 进行文本分类 后面我们还会介绍将rnn表示的句子向量进行文本分类 也可以用cnn进行文本分类 我们这篇文章代码和注释 主要是介绍 WORDEMage进行文本分类 """ 准备数据 TorchText... 阅读详情

相关推荐

基于pytorch的LSTM的简单文本分类

import torch import torchtext import numpy as np import torch.nn as nn import torch.nn.functional as F from torchtext.vocab import GloVe import time start=time.time() #每篇提取200个单词 TEXT = torchtext.data.Field(lower=True, fix_length=200, batch_first=False) L

jianshanzhange的博客 1790

pytorch实现LSTM+Attention文本分类

直接看模型部分代码。 class BiRNN(nn.Module): def __init__(self, vocab_size, embedding_dim, num_hiddens, num_layers): super(BiRNN, self).__init__() self.word_embeddings = nn.Embedding(vocab_size, embedding_dim) self.word_embeddings = self.

杂文集 2万+

lstm 文本分类 (pytorch)

lstm 文本分类(pytorch)

BUPT-WT的博客 249

【37】使用LSTM实现文本分类、图像分类、图像生成任务

如有错误,恳请指出。 在上一篇文章中,使用了LSTM来预测时序信息,但是在自然语言处理领域中,LSTM可以用来进行文本预测,大体上的思路是将batch个文本,每个文本的seq个词汇编码为hidden dim长度的特征向量,所以最后的特征维度是[seq, batch, hidden dim],就可以作为输入数据。提取LSTM最后的一个隐藏单元[batch, hidden dim],再使用一个全连接层就可以实现分类。 而对于图像来说,其信息维度都很熟悉了,[batch, c, h, w],那么其实也可以是将.

Clichong 1万+

使用PyTorch和LSTM进行新闻文本分类任务

在模型定义中,我们首先创建一个嵌入层(embedding layer),用于将输入的单词索引转换为密集向量表示。然后,我们定义一个LSTM层,它接受嵌入向量作为输入,并输出隐藏状态。首先,我们定义标题和类别的字段,并指定它们的数据类型。在训练过程中,我们首先将模型设为训练模式,并使用训练数据计算损失和梯度。然后,我们将模型设为评估模式,并使用验证数据计算准确率。然后,我们使用TabularDataset类加载数据集,并将其划分为训练集和验证集。最后,我们可以使用训练好的模型对新的标题进行分类。

StyVue的博客 224

PyTorch中LSTM网络的深度学习文本分类项目实战

深度学习是机器学习的一个分支,它通过模拟人类大脑的神经网络结构来处理数据,实现模式识别、预测等任务。与传统算法不同,深度学习强调学习数据的高级特征表示,而不需要进行手动特征工程。PyTorch提供了一系列工具来简化数据加载和处理过程。最常用的是和。Dataset类用于定义数据集,而DataLoader类用于包装Dataset对象,提供批量加载、采样、多进程数据加载等功能。Dataset:用户自定义一个继承Dataset的类,需要实现两个方法:__len__

weixin_29717341的博客 1319

文本分类小说的Bayes优化LSTM-pytorch框架实现与代码

文本分类是自然语言处理(NLP)领域的一项基本任务,它涉及到将文本数据分配到预定义的类别中。文本分类在众多应用场景中扮演着核心角色,从垃圾邮件检测到情感分析,再到新闻文章的标签分配等。理解文本分类背后的基本概念对于实施更复杂的NLP任务至关重要。在机器学习领域,模型的性能高度依赖于正确的超参数选择。传统的方法如网格搜索或随机搜索虽易实现,但效率低下,尤其在参数空间复杂或计算资源有限时更显得不足。

weixin_33660045的博客 679

高通Camera HAL3调试实战:如何用camxoverridesettings.txt高效抓取日志与dump图像数据

本文深入探讨了高通Camera HAL3调试中camxoverridesettings.txt文件的高效应用,重点介绍了如何通过该文件精准控制日志输出级别与dump图像数据,帮助开发者快速定位移动影像系统中的问题。文章详细解析了日志分级配置、图像数据捕获技巧及典型问题排查流程,为高通Camera HAL3项目开发提供了实用技术点。

weixin_30315905的博客 861

DSP28335新手避坑指南:手把手教你用CCS6.2生成10KHz SPWM(附完整工程)

本文详细介绍了如何使用DSP28335开发板和CCS6.2环境生成10KHz SPWM波形的完整工程指南。从开发环境配置、ePWM模块设置到SPWM算法实现,特别针对新手常见问题提供了解决方案和调试技巧,帮助工程师快速掌握DSP28335的SPWM生成技术。

weixin_42522374的博客 182

Shopee前端反爬三要素:x-sap-Ri、x-sap-Sec与af-ac-enc-dat深度解析

电商前端反爬机制本质是运行时环境可信验证,其核心在于动态生成的请求指纹、会话签名与行为加密载荷。这类机制不依赖静态Token,而是基于浏览器真实交互(如鼠标轨迹、页面可见性、时间精度)实时计算,体现JS运行时环境不可模拟性。技术价值在于将风控前移至客户端,大幅提升自动化绕过成本;典型应用场景包括商品价格监控、竞品数据采集与合规爬虫开发。本文聚焦Shopee实战案例,深入拆解x-sap-Ri(设备+行为哈希指纹)、x-sap-Sec(动态密钥签名)及af-ac-enc-dat(AES加密行为载荷)三大字段的生

weixin_29015127的博客 402

使用SAM进行遥感图像语义分割

SAM(Segment Anything Model)的成功表明了以数据为中心的机器学习的重要性。然而,由于遥感(RS)图像注释的困难和高成本,大量有价值的RS数据仍然没有被标记,特别是在像素级。在这项研究中,我们利用SAM和现有的RS物体检测数据集,开发了一个高效的管道来生成大规模的RS分割数据集,称为SAMRS。SAMRS在规模上超过了现有的高分辨率RS分割数据集几个数量级,并提供了物体类别、位置和实例信息,可用于语义分割、实例分割和物体检测,无论是单独还是组合。

lalula的博客 7453

基于大模型的脑疝全流程预测与诊疗方案研究

目录一、引言1.1 研究背景与目的1.2 研究意义1.3 大模型技术概述二、脑疝概述2.1 定义与分类2.2 发病机制与病因2.3 临床表现2.4 诊断方法三、大模型在脑疝预测中的应用3.1 数据采集与预处理3.2 模型训练与选择3.3 模型验证与优化四、术前预测与评估4.1 病情严重程度预测4.2 手术风险预测4.3 个性化手术方案制定4.4 麻醉方案制定五、术中监测与决策5.1 实时监测指标5.2 大模型辅助决策5.3 应对突发情况六、术后评估与护理6.1 术后恢复情况评估6.2 并发症风险预测与预防6

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1285

FCL碰撞检测库在Windows下的编译与配置(MinGW+CMake)

本文详细介绍了在Windows系统下使用MinGW和CMake编译配置FCL碰撞检测库的完整流程。内容涵盖MinGW-w64、CMake的安装与环境配置,关键依赖库Eigen和libccd的安装,以及FCL源码的编译、安装与实战测试。重点解析了CMake配置命令中的关键参数与常见错误解决方案,旨在帮助开发者高效完成FCL在Windows平台的部署,适用于机器人、游戏物理引擎等需要精确碰撞检测的开发场景。

sunny的博客 483

32、生物信息学中的符号、缩写及相关概念解析

本文详细解析了生物信息学中常用的符号、缩写及相关概念,涵盖概率理论、函数表示、模型结构、图与集合、维度参数、神经网络、隐藏马尔可夫模型、双向架构、语法系统、系统发育树、微阵列分析以及核方法与支持向量机等多个领域。通过表格和mermaid流程图的形式,系统梳理了各类符号的定义与应用场景,并介绍了常见缩写的全称与意义。文章旨在帮助研究人员准确理解生物信息学中的基础术语,提升对基因表达分析、序列建模、机器学习等技术的理解与应用能力。

rrr55的博客 146

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

efm32 入门.pdf

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

上一篇: 软件测试-白盒测试:逻辑覆盖
下一篇: 多轮对话(一):概述(意图识别+槽填充)
樱岛の鲸
博客等级 码龄7年 182粉丝 54原创
评论 25
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值