用LSTM做文本情感分类(以英文为例)附github代码

一 获得规整的数据集
1 原始数据预处理
去除标点符号 、去停用词、大小写转换等
获得处理后的m条评价记录,reviews=[“is good”, “very happy”, “yes i think so”,…]
2 获取索引集(当然,这个过程也可以用W2V等方法实现,比较好的解决方法是能够考虑到词的频率、顺序等属性):
方法一:网上下载别人训练好适合该场景的领域权威索引集。
方法二:自己制作
<1>得到全部单词words,例如words=[i have an apple you have an orange i love apple]
<2>对words以(key,value)的形式,key为单词,value为该单词在words中出现的次数。
{i:2, have:2, an:2, apple:2, you:2, orange:1, love:1}
3 将文本中所有的评价记录根据索引集转换成数字(此时长短不一)
4 获取最终规整可输入模型的数据集。
<1>确定一个合理的统一的每行的向量维度(即单词个数)Vn
Vn的大小通过数据分析,观察所有记录中各个长度的分布情况,找到一个合理的长度Vn,该长度能覆盖所有记录中大部分的记录。
<2>对于每一条记录,小于Vn个单词的,在前面补0;多于Vn个单词的记录,把多余的部分剔除(多的情况有没有更好的方法),得到最终规整的样本集。
5 获取样本集对应的标签集

二 建立训练集、测试集、验证集(常规操作)

三 建立LSTM网络
把RNN该有的结构搭好,类似传统机器学习应用调包时所有算法结构都已经搭好了,只需输入X,y。深度学习应用的区别就是根据实际需要自己搭相应的框架。
1 设置超参数lstm_size、lstm_layers、batch_size、learning_rate
lstm_size:LSTM细胞隐藏单元数量,稍微设置大点会有不错的效果,常见的值如128, 256, 512等。
lstm_layers:网络中LSTM层的数量,这里从1开始,如果不合适就再增加。
batch_size:在一次训练中训练数据进入网络的数据量。通常情况下,应该设置大一些,如果你能确保内存足够的话。
learning_rate:学习率
2 定义输入
在这里插入图片描述
3 添加Embeding层.注意:添加embeding层时只是在构建它的基本框架,本例是等待规整的评价记录这些训练数据输入,是没有实际的数据输入的。
在这里插入图片描述
4 建立LSTM层
建立lstm层。这一层中,有 lstm_size 个基本单元
添加dropout
如果一层lsmt不够,多来几层
在这里插入图片描述
5 前向传播
在这里插入图片描述
6 定义输出和准确率
在这里插入图片描述
7 获取Batch(最小批训练数据),准备训练
在这里插入图片描述

四 训练
在这里插入图片描述
五 测试(预测结果)
在这里插入图片描述

附:github代码 https://github.com/yangbeans/Text_Classification_LSTM

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
以下是使用LSTM模型进行微博文本csv文件情感分类代码,其中使用了Keras框架和tensorflow作为后端: ``` import pandas as pd import numpy as np from keras.utils import to_categorical from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences from keras.models import Sequential from keras.layers import Embedding, LSTM, Dense # 读取csv文件 df = pd.read_csv('weibo.csv') # 将情感标签转化为数字 df['sentiment'] = df['sentiment'].replace({'positive': 1, 'negative': 0}) # 分离文本情感标签 X = df['review'].values y = df['sentiment'].values # 对文本进行分词和序列化 tokenizer = Tokenizer(num_words=5000) tokenizer.fit_on_texts(X) X = tokenizer.texts_to_sequences(X) # 对序列进行填充 X = pad_sequences(X, maxlen=50) # 对情感标签进行独热编码 y = to_categorical(y) # 构建LSTM模型 model = Sequential() model.add(Embedding(input_dim=5000, output_dim=50, input_length=50)) model.add(LSTM(units=256, dropout=0.2, recurrent_dropout=0.2)) model.add(Dense(units=2, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit(X, y, batch_size=128, epochs=10, validation_split=0.2) # 保存模型 model.save('weibo_lstm.h5') ``` 这段代码首先读取了一个名为weibo.csv的csv文件,并将其中的情感标签(positive或negative)转换为数字(1或0),然后对文本进行分词和序列化,并对情感标签进行独热编码。接着,使用Keras框架构建了一个包含Embedding层、LSTM层和Dense层的模型,并编译了模型。最后,使用训练集对模型进行训练,并将训练好的模型保存为weibo_lstm.h5文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值