文本分类TF-IDF+LSTM

首先需要注意的是,使用深度学习进行文本分类,输入的向量必须是相同的长度。

其次,文本分类主要需要注意的是输入向量的维度需要与神经网络匹配,因此,TF-IDF得到的矩阵需要升一维才可以输入到神经网络中,只要输入维度正确,建立CNN,LSTM,GRU等模型都是可以的。

核心一点,要把数据维度搞清楚,此文以二分类为例

##数据预处理,分词,去停用词,去标点符号省略,此处所用数据为已经数据处理好
#X为文本,y为标签
X = text_data['text']
y = text_data['label1']
#将文本使用TF-IDF向量化
from sklearn.feature_extraction.text import TfidfVectorizer
tfid = TfidfVectorizer()
t_X = tfid.fit_transform(X)
##将t_X和y转为numpy
import numpy as np
n_X = t_X.toarray()
y1 = np.array(y)
##将n_X升维
X1=np.expand_dims(n_X,axis=2)
#划分训练、验证、测试集
from sklearn.model_selection import train_test_split
train_X, test_X, train_y, test_y = train_test_split(X1, y1, test_size=0.3,shuffle=True)
train_X, val_X, train_y, val_y = train_test_split(train_X, train_y, test_size=0.2)
print(len(train_X), 'train examples')
print(len(val_X), 'validation examples')
print(len(test_X), 'test examples')
#建模
model = tf.keras.Sequential([
  tf.keras.layers.Conv1D(activation='relu', filters=128, kernel_size=3,input_shape= 
  (X1.shape[1],1)),
  tf.keras.layers.MaxPool1D(),
  tf.keras.layers.Conv1D(activation='relu', filters=64, kernel_size=3),
  tf.keras.layers.MaxPool1D(),
  tf.keras.layers.Bidirectional(layers.LSTM(16)),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dropout(0.5),
  tf.keras.layers.Dense(32, activation='relu'),
  tf.keras.layers.Dropout(0.5),
  tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
##训练模型
model.fit(train_X,train_y,
      batch_size = 32,
      validation_data = (val_X,val_y),
      epochs = 20)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值