多标签和多分类的区别
1.多标签即一条语句可能有多个类别划分。例如,这个酸菜鱼又酸又辣。属于酸和辣两个标签。
在采用神经网络学习时,最后一层的激活函数应采用sigmoid激活函数,相当于对这条语句做了多个二分类。
2.多分类即每条语句只有一个标签,在采用神经网络学习时,最后一层的激活函数应采用softmax激活函数,最后选取类别中的最大值作为预测结果。
关于sigmoid和softmax 的区别此处再说明。
本次数据集的格式为:
组织关系-裁员 消失的“外企光环”,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