在上文中提到,从文本中提取标签一个多标签多分类的问题。用传统的机器学习分类器,需要通过OneVsRestClassifier进行分类器的转换。
bert模型一统NLP问题江湖后,很多研究者也尝试用他解决文本标签问题。由于bert模型擅长处理句子对的关系,于是可以尝试把标签提取的问题转化为句子对判断的关系。
参考以下这篇文章,利用bert模型进行aspect based的情感分析:
Utilizing BERT for Aspect-Based Sentiment Analysis via Constructing Auxiliary Sentence
用上述文章的做法也可以应用到文本标签提取的问题中来,具体做法是:针对每个文本中的已有的标签,构造一个辅助短句:“文本中含该标签”,将文本和辅助短句构成一个句子对,并转化为一个句子对判断的分类问题。
def constructForTrain1(df, featureDic):
dataList = []
for index, row in df.iterrows():
rowList = [index, row[u"文本"]]
for f in featureDic.keys():
dataList.append(rowList + [u"用户"+f, 1 if f in row[u"标签"] else 0])
return dataList
然后,通过构建bert模型的句子对判断关系的方式来精调模型。(实际应用中,我们采用了对中文更加友好的albert模型)。
def main(train_generator, valid_generator, train_epoch, valid_epoch, alpha = 0.25):
# 加载预训练模型
x1_in = Input(shape