基于keras采用LSTM实现多标签文本分类(一)

1.多标签即一条语句可能有多个类别划分。例如,这个酸菜鱼又酸又辣。属于酸和辣两个标签。在采用神经网络学习时,最后一层的激活函数应采用sigmoid激活函数,相当于对这条语句做了多个二分类。2.多分类即每条语句只有一个标签,在采用神经网络学习时,最后一层的激活函数应采用softmax激活函数,最后选取类别中的最大值作为预测结果。关于sigmoid和softmax 的区别此处再说明。本次数据集的格式为:关于LSTM的学习可以参考这篇。关于词向量化的方式,本文采用keras 内置Tokenizer A
摘要由CSDN通过智能技术生成

多标签和多分类的区别

1.多标签即一条语句可能有多个类别划分。例如,这个酸菜鱼又酸又辣。属于酸和辣两个标签。
在采用神经网络学习时,最后一层的激活函数应采用sigmoid激活函数,相当于对这条语句做了多个二分类。
2.多分类即每条语句只有一个标签,在采用神经网络学习时,最后一层的激活函数应采用softmax激活函数,最后选取类别中的最大值作为预测结果。
关于sigmoidsoftmax 的区别此处再说明。

本次数据集的格式为:

组织关系-裁员 消失的“外企光环”,5月份在华裁员900余人,香饽饽变“臭”了
组织关系-裁员 前两天,被称为“仅次于苹果的软件服务商”的Oracle(甲骨文)公司突然宣布在中国裁员。。
组织关系-裁员 不仅仅是中国IT企业在裁员,为何500强的甲骨文也发生了全球裁员

关于LSTM的学习可以参考这篇。
关于词向量化的方式,本文采用keras 内置Tokenizer API 实现。

运行环境tensorflow2,keras 2.+

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import re
import jieba
from sklearn.preprocessing import MultiLabelBinarizer
from tensorflow.keras.models import Model, load_model
from tensorflow.keras.layers import *
import numpy as np
import json
def clear_character(sentence):
    pattern1 = '[a-zA-Z0-9]'
    pattern2 = re.compile(u'[^\s1234567890' + '\u4e00-\u9fa5]+')
    pattern3 = '[’!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~]+【】'
    line1 = re.sub(pattern1, '', sentence)
    line2 = re.sub(pattern2, '', line1)
    line3 = re.sub(pattern3, '', line2)
    new_Sentence = ''.join(line3.split())
    return new_Sentence


def content_split(segment):
    seg = " ".join(jieba.cut(segment))
    return seg


def rm_stop_word(wordlist, stop):
    filtered_words = [word for
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的基于Python和TensorFlow的文本分类代码,使用了Word2Vec和LSTM。 首先,需要安装以下库: - pandas - numpy - tensorflow - keras - gensim 然后,我们需要准备一个包含文本数据的Excel文件,将每个文本数据存储在一列中,并将其标签存储在另一列中。 接下来,我们使用pandas库读取Excel文件并将其转换为numpy数组: ```python import pandas as pd import numpy as np df = pd.read_excel('data.xlsx') texts = np.array(df.iloc[:,0].tolist()) labels = np.array(df.iloc[:,1].tolist()) ``` 然后,我们使用gensim库训练Word2Vec模型: ```python from gensim.models import Word2Vec sentences = [text.split() for text in texts] model = Word2Vec(sentences, min_count=1, size=100) ``` 接下来,我们将每个文本数据转换为Word2Vec向量: ```python X = np.zeros((len(texts), 100)) for i, text in enumerate(texts): words = text.split() for word in words: try: X[i] += model.wv[word] except KeyError: pass ``` 然后,我们将标签进行独热编码: ```python from keras.utils import to_categorical Y = to_categorical(labels) ``` 接下来,我们构建LSTM模型: ```python from keras.models import Sequential from keras.layers import Dense, LSTM model = Sequential() model.add(LSTM(128, input_shape=(None, 100))) model.add(Dense(64, activation='relu')) model.add(Dense(32, activation='relu')) model.add(Dense(Y.shape[1], activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ``` 然后,我们训练模型: ```python model.fit(X.reshape(X.shape[0], 1, X.shape[1]), Y, epochs=20, batch_size=64) ``` 最后,我们可以使用模型进行预测: ```python text = 'This is a test text' words = text.split() vec = np.zeros(100) for word in words: try: vec += model.wv[word] except KeyError: pass prediction = model.predict(vec.reshape(1, 1, 100)) ``` 这就是一个简单的用Excel里的文本数据,基于Word2Vec,用LSTM神经网络进行文本分类的代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值