LSTM之文本分类实例

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

待分类数据为已经分词的文本文档,其中每一行代表一篇文章,分词较为粗糙,未进行停用词过滤,使用停用词过滤后效果应该会有明显提升。
1、加载数据

# -*- coding: utf-8 -*-

import sys
reload(sys)
sys.setdefaultencoding('utf-8')



def loadData(fileName):#读取分词数据,存储在list列表里,每个list列表里的每一个list代表一个句子
    f=open(fileName,'r')
    senLists=[]
    for row in f.readlines():
        senList=row.split(' ')
        sens=[]
        for word in senList:
            if word.strip() not in ['',',','。',';','!','#','?','“','”','(',')','1','2','3',':','.','《','》','【','】']:
                sens.append(word)
        senLists.append(sens)
    print 'Has Loaded ',len(senLists),'句子列表'
    return senLists

2、wor2vec训练词向量

# -*- coding: utf-8 -*-

import sys
from gensim.models import Word2Vec
from LoadData import loadData
import pickle
from gensim.corpora.dictionary import Dictionary
reload(sys)
sys.setdefaultencoding('utf-8')


def saveWordIndex(model):
    word2vec_dict=Dictionary()
    word2vec_dict.doc2bow(model.wv.vocab.keys(),allow_update=True)
    w2v_index={w:i+1 for i,w in word2vec_dict.items()}#建立词典索引字典,如{'中国':1},索引从1开始,0目前不存储,以后存储不在字典索引里的词语
    print w2v_index.keys()[:20]
    w2v_vec={w:model[w.encode('utf-8')] for w in w2v_index.keys()}#建立词向量字典,如{'中国':['0.01','0.25',......]}
    pickle.dump(w2v_index,open('./w2v_index.pkl','w'))
    pickle.dump(w2v_vec,open('./w2v_vec.pkl','w'))


def trainWord2Vec():#训练word2vec模型并存储
    sentences=loadData(r'./sen_cut.txt')
    model=Word2Vec(sentences=sentences,size=100,min_count=8,window=5)
    model.save('./word2vec.model')
    # model=Word2Vec.load('./word2vec.model')
    saveWordIndex(model=model)


if __name__=='__main__':
    trainWord2Vec()

3、训练LSTM模型

# -*- coding: utf-8 -*-

import sys
from gensim.models import Word2Vec
from LoadData import loadData
import numpy as np
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dropout,Dense,Embedding,LSTM,Activation
import pickle
from sklearn.model_selection import train_test_split
from gensim.corpora.dictionary import Dictionary
reload(sys)
sys.setdefaultencoding('utf-8')




# 参数设置
vocab_dim = 100  # 向量维度
maxlen = 150  # 文本保留的最大长度
batch_size = 120
n_epoch = 5
input_length = 150

def getLabels():
    labels=[]
    for label in open('./labels.txt','r'):
        labels.append(label.strip())
    return labels

def text2index(index_dic,sentences):
    """
    把词语转换为数字索引,比如[['中国','安徽','合肥'],['安徽财经大学','今天','天气','很好']]转换为[[1,5,30],[2,3,105,89]]
    """
    new_sentences=[]
    for sen in sentences:
        new_sen=[]
        for word in sen:
            try:
                new_sen.append(index_dic[word])
            except:
                new_sen.append(0)
        new_sentences.append(new_sen)
    return new_sentences


def train_lstm(p_n_symbols, p_embedding_weights, p_X_train, p_y_train, p_X_test, p_y_test):
    """
    :param p_n_symbols: word2vec训练后保留的词语的个数
    :param p_embedding_weights: 词索引与词向量对应矩阵
    :param p_X_train: 训练X
    :param p_y_train: 训练y
    :param p_X_test: 测试X
    :param p_y_test: 测试y
    :return: 
    """
    print u'创建模型...'
    model = Sequential()
    model.add(Embedding(input_dim=p_n_symbols,
                        output_dim=vocab_dim,
                        mask_zero=True,
                        weights=[p_embedding_weights],
                        input_length=input_length,trainable=False))
    model.add(LSTM(units=50))
    model.add(Dropout(0.3))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))

    print u'编译模型...'
    model.compile(loss='binary_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])

    print u"训练..."
    model.fit(p_X_train, p_y_train, batch_size=batch_size, epochs=n_epoch,
              validation_data=(p_X_test, p_y_test),verbose=1)

    print u"评估..."
    score, acc = model.evaluate(p_X_test, p_y_test, batch_size=batch_size)
    print 'Test score:', score
    print 'Test accuracy:', acc


def createModel():
    maxlen=150
    index_dict=pickle.load(open('./w2v_index.pkl','r'))
    vec_dict = pickle.load(open('./w2v_vec.pkl', 'r'))
    n_words=len(index_dict.keys())
    print n_words
    vec_matrix=np.zeros((n_words+1,100))
    for k,i in index_dict.items():#将所有词索引与词向量一一对应
        try:
            vec_matrix[i,:]=vec_dict[k]
        except:
            print k,i
            print vec_dict[k]
            exit(1)
    labels=getLabels()
    sentences=loadData('./sen_cut.txt')
    X_train,X_test,y_train,y_test=train_test_split(sentences,labels,test_size=0.2)
    X_train=text2index(index_dict,X_train)
    X_test = text2index(index_dict, X_test)
    print u"训练集shape: ", np.shape(X_train)
    print u"测试集shape: ", np.shape(X_test)
    y_train=np.array(y_train)
    y_test=np.array(y_test)
    print('Pad sequences (samples x time)')
    X_train = sequence.pad_sequences(X_train, maxlen=maxlen)#扩展长度不足的补0
    X_test = sequence.pad_sequences(X_test, maxlen=maxlen)
    print u"训练集shape: ", np.shape(X_train)
    print u"测试集shape: ", np.shape(X_test)
    train_lstm(n_words+1, vec_matrix, X_train, y_train, X_test, y_test)


if __name__=="__main__":
    createModel()
利用LSTM 做文本分类 """ RNN模型 下面我们尝试把模型换成一个recurrent neural network (RNN)。RNN经常会被用来encode一个sequence ℎ????=RNN(????????,ℎ????−1) 我们使用最后一个hidden state ℎ???? 来表示整个句子。 然后我们把 ℎ???? 通过一个线性变换 ???? ,然后用来预测句子的情感。 也可以 把 每个hidden statae 进行平均 作为句子的... 阅读详情

相关推荐

深度学习16—LSTM拟合IMDB案例案例+实现英文自动写作

LSTM相关的网络层定义 keras.layers.LSTM( # 长短期记忆网络层 units : 正整数,输出空间的维度。 activation = 'tanh' : 要使用的激活函数。 recurrent_activation = 'hard_sigmoid' : 用于循环时间步的激活函数。 use_bias = True : 布尔值,该层是否使用偏置向量。 kernel_initia...

qq_42871249的博客 926

lstm的文本分类

数据处理:分词,去除停用词,转换词向量等。

weixin_67977644的博客 1097

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

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

Clichong 1万+

基于 LSTM 进行多类文本分类( TensorFlow 2.0)

NLP 的许多创新是如何将上下文添加到词向量中。一种常见的方法是使用循环神经网络。以下是循环神经网络的概念:他们利用顺序信息。他们可以捕捉到到目前为止已经计算过的内容,即:我最后说的内容会影响我接下来要说的内容。RNNs 是文本和语音分析的理想选择。最常用的 RNNs 是 LSTM。来源:https://colah.github.io/posts/2015-08-Understanding-LST...

Warmer_Sweeter 1547

长短时记忆网络 (LSTM) 原理与代码实例讲解

长短时记忆网络 (LSTM) 原理与代码实例讲解 关键词:长短时记忆网络(LSTM), 循环神经网络(RNN), 序列建模, 梯度消失, 细胞状态, 门控机制 1. 背景介绍 在深度学习中,循环神经网络(Rec

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 1030

长短时记忆网络LSTM原理与代码实例讲解

长短时记忆网络LSTM原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍 1.1 问题的由来 随着自然语言处理、语音识别、机

AI天才研究院 1347

NLP-LSTM文本分类模型实战

【代码】NLP-LSTM文本分类模型实战。

qq_65838372的博客 360

长短期记忆网络(Long ShortTerm Memory) 原理与代码实例讲解

长短期记忆网络(Long Short-Term Memory) - 原理与代码实例讲解 关键词:长短期记忆网络, 递归神经网络(RNN), 循环单元, 序列建模, 动态神经网络, 记忆单元, 梯度消失

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 1175

Pytorch实现LSTM进行文本分类实例

import torch import torch.nn as nn class rnn(nn.Module): super(rnn).__init__() def __init__(self,input_dim,output_dim,num_layer,num_class): self.layer1 = nn.LSTM(input_dim,output_dim,num_layer) ...

BMSW的博客 5333

名称: 用LSTM做文本分类任务(2)长短期记忆网络详解

作者:禅与计算机程序设计艺术 1.背景介绍 LSTM(Long Short-Term Memory,长短期记忆神经网络)是一种能够对序列数据进行建模、训练和预测的神经网络模型。它可以对输入数据中的时间序列关系进行捕获、存储和利用,从而提升模型的学习效率和准确性。本文将介绍LSTM在文本分类任务中的应

AI天才研究院 1000

【TensorFlow深度学习】RNN短时记忆缺陷与LSTM改进原理

LSTM的创新设计不仅解决了RNN的STM问题,还极大地拓宽了深度学习在序列任务中的应用边界。通过门控机制,LSTM不仅能够记忆长期依赖,还具备更好的灵活性和稳定性,成为处理复杂序列数据的首选模型。理解LSTM的原理与应用,对于深度学习实践者而言,是提升序列模型表现、探索新领域不可或缺的一课。通过上述代码实例,希望你能够对LSTM有更直观的认识,并在实际项目中得心应手。

沐风—云端行者 933

2025年(第十一届)全国大学生统计建模大赛论文及选题分析

基于数据驱动决策:整个研究围绕给定的洪水灾害相关数据进行深入挖掘和分析,从数据清洗、特征分析、模型建立到最终预测,每一步都以数据为基础,通过对数据的有效利用来揭示洪水灾害发生的相关规律和特征,为洪水灾害的风险评估和预测提供依据,符合数据引领未来决策的理念。实际应用导向:洪水灾害是现实中严重影响人类生命财产安全和社会经济发展的重要问题,本研究旨在实现对洪水灾害的预测,其成果可直接应用于防洪减灾工作,如洪水预警、风险评估与区划等,对实际防灾减灾工作具有重要的指导意义,体现了以数据为支撑服务实际应用的特点。

qq_52590045的博客 1万+

NLP文本分类--RNN(LSTM) ATTENTION

开篇文章参考:https://www.jianshu.com/p/8b78ac379e3a文本分类是NLP中的一个重要方向,它是智能问答、情感分析的基础。在未来自然语言处理的接触、学习中将持续在该方向上写一些文章总结。在前述的ATT-CNN中,参考了一篇文章是RNN-ATTENTION。在很早之前就对RNN有过一些了解但是知之甚少,概念也很不清楚,本篇决定在实现RNN_ATTENTION的同时,再...

weixin_42291173的博客 126

Doris StreamLoad任务报错Connection reset

背景 Spark程序扫一张Hive表(大小3-7G),然后用http协议的streamLoad任务提交给Doris集群,在Doris集群从0.13.15升级到0.14.12后spark程序报错streamLoad时突然会Connection reset 分析 enable_http_server_v2 这个参数可以参考FE中文配置中查看到,作用是对于Doris界面是否开启新风格的界面,但是实际上他的作用远不止如此,请接着看 新老版本对于enable_http_server_v2参数默认值是不同的 在0.13

gaofeng的博客 3309

ArcGIS基础:城市交通网络构建及设施服务分析(一):道路数据处理与拓扑操作

首先需要加载数据, 1:选择这个数据库:,右键导入,选择导入单个要素,弹出“要素类至要素类” 2:输出位置(导入的数据是CAD格式数据)。 3:输出要素类为道路。 4:字段只保留道路类型字段。 这个操作是分类合并各级道路数据。 1:通过属性选择各类道路数据。 2:比如此类都是“干道”。 3:编辑器下来,然后合并即可。 得到如图所示,需要用到三个字段。 上面这个操作是打断道路相交线。 1:选中所有数据。 2:找到高级编辑中的打断相交线。 3:确定即可。 下面进行拓扑检查,虽然我们已经进行合并和打断相交.

yuanYW7556的博客 2万+

深度学习模型(FastText CNN RNN LSTM RCNN Seq2Seq Attention)在文本数据上的实践应用

本文使用到有的模型涉及到多输入或者多输出操作,这里使用keras函数式API来构建模型。 FastTest要求输入的数据和其他模型不太一样,数据处理这里不做介绍。 fasttext是facebook开源的一个词向量与文本分类工具,在学术上没有太多创新点,好处是模型简单,训练速度非常快。 fastText把文档中所有词通过lookup Attention机制在keras中不是一个完整的封装好直接导入使用的模型,这里我们使用源码,使用时直接创建Attention对象使用即可。

brytlevson的博客 1254

comsol如何实现五厚度的单元模拟?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 471

长短期记忆网络LSTM在时间序列预测和文本分类中的应用

长短期记忆网络或LSTM网络是深度学习中使用的一种递归神经网络,可以成功地训练非常大的体系结构。什么是LSTM?LSTM代表长短期记忆网络,在深度学习领域使用。它是各种循环神经网络(RNN),能够学习长期依赖关系,特别是在序列预测问题上。LSTM有反馈连接,也就是说,它能够处理整个数据序列,而不是单一的数据点,如图像。这在语音识别、机器翻译等方面有应用。LSTM是一种特殊的RNN,它在大量问题上表...

拓端研究室TRL 477

QGis二次开发 —— 5、基于qgis开发多种在线地图预览,并加入经纬度坐标显示等(附:源码)

QGis二次开发 —— 5、基于qgis开发多种在线地图预览,并加入经纬度坐标显示等(附:源码

369

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)。

非科班Java出身GISer的博客 708

NLP|LSTM+Attention文本分类

LSTM是一种特殊的循环神经网络(RNN),用于处理序列数据和时间序列数据的建模和预测。而在NLP和时间序列领域上Attention-注意力机制也早已有了大量应用,本文将介绍在LSTM基础上如何添加Attention来优化模型效果。

机器学习、深度学习、文本分类、异常检测、风控等知识的积累和分享 2474

Python爬虫实战:基于异步爬虫与机器学习的数据采集——以电商平台在线评论有用性分析为例

内容涵盖爬虫原理、反爬虫策略应对、数据清洗、数据存储以及简单的数据分析预览,并为后续利用机器学习模型(如逻辑回归、随机森林)分析评论有用性打下坚实的数据基础。特别是在电子商务领域,在线评论作为UGC的一种主要形式,深刻影响着消费者的购买决策和商家的信誉体系。然而,平台上的评论质量参差不齐,充斥着大量无意义的灌水、广告甚至虚假评论。因此,如何自动识别和筛选出“有用”的评论,成为了学术界和工业界共同关注的焦点。我们选择目前Python爬虫领域最前沿、效率最高的技术组合,以确保爬虫的稳定性、速度和可扩展性。

2201_76125261的博客 107

python在Keras中使用LSTM解决序列问题

时间序列预测是指我们必须根据时间相关的输入来预测结果的问题类型。时间序列数据的典型示例是股市数据,其中股价随时间变化。 递归神经网络(RNN)已被证明可以有效解决序列问题。特别地,作为RNN的变体的长期短期记忆网络(LSTM)当前正在各种领域中用于解决序列问题。LSTM神经网络架构和原理及其在Python中的预测应用序列问题可以大致分为以下几类: 在本文中,我们将了解如何使用LSTM及其不同的变体来解决一对一和多对一的序列问题。 阅读本文后,您将能够基于历史数据解决诸如股价预测,天气预报等问题。由于文本也是

拓端研究室TRL 1252

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

时间序列网络RNN,LSTM入门

文章目录RNN RNN 解决问题示例:语句情感分析 传统方法问题: 长句子,参数过多 (改进:使用参数共享,每个单词的特征提取方式一致) 没有上下句的语境信息 (改进:需要长期的记忆模块) 改进的模型:h0h_0h0​为初始化数据 共享的参数:whhw_{hh}whh​和wwhw_{wh}wwh​; 最后输出可以是最后的节点,也可以将所有的记忆节点综合输出,比较灵活。 最后的实际模型为: 其中: 激活函数使用tanh()tanh()tanh()函数 输出yty_tyt​也可以将所有的hth_

qq_36523203的博客 1198

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Bi-LSTM + Attention模型

虽然看了一些很好的blog了解了LSTM的内部机制,但对框架中的lstm输入输出和各个参数还是没有一个清晰的认识,今天打算彻底把理论和实现联系起来,再分析一下pytorch中的LSTM实现。 先说理论部分。一个非常有名的blog把原理讲得很清楚,推荐参考。总之就是这些公式: 简单来说就是,LSTM一共有三个门,输入门,遗忘门,输出门,分别为三个门的程度参数,是对输入的常规RNN操作。公式里可以看到LSTM的输出有两个,细胞状态和隐状态,是经输入、遗忘门的产物,也就是当前c...

永远飞翔的鸟 3984

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: keras例子之迁移学习
下一篇: LSTM之时间序列预测
data_scientist
博客等级 码龄10年 52粉丝 38原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值