多任务学习(二)

该博客介绍了如何使用Keras构建一个多任务学习模型,其中包括两个任务:10分类的文本分类和实体识别。模型利用了双向LSTM和CRF层,同时应用了位置嵌入。模型的输入包括句子嵌入、词性标签1和词性标签2的嵌入,通过concatenate、全局最大池化、全连接层等操作进行特征融合和分类。最后,模型使用了Adam优化器,分别对两个任务进行了编译,并绘制了模型结构图。
摘要由CSDN通过智能技术生成

多任务学习(二)

from keras.layers import Input,LSTM,Bidirectional,Dense,Dropout,Concatenate,Embedding,GlobalMaxPool1D
from keras.models import Model
from keras_contrib.layers import CRF
import keras.backend as K
from tensorflow.keras.utils import plot_model
import keras
K.clear_session()

搭建模型

maxlen=40
# 输入
inputs=Input(shape=(maxlen,768),name='sen_emb')     # (None, 40, 768)
pos1_en=Input(shape=(maxlen,),name='pos_en1_id')
pos2_en=Input(shape=(maxlen,),name='pos_en2_id')      #shape=(None, 40)
pos1_emb = Embedding(maxlen,8,input_length=maxlen,name = "pos_en1_emb")(pos1_en)
pos2_emb = Embedding(maxlen,8,input_length=maxlen,name = "pos_en2_emb")(pos2_en)  # (None, 40, 8)


x = Concatenate(axis=2)([inputs,pos1_emb,pos2_emb])

# 参数共享部分
x=Bidirectional(LSTM(128,return_sequences=True))(x)
# 任务一:10分类的文本分类人去
out1=GlobalMaxPool1D()(x)
out1=Dense(64,activation='relu')(out1)
out1=Dropout(0.5)(out1)
out1=Dense(10,activation='softmax',name='out1')(out1)

# 任务二:实体识别分类
crf=CRF(2,sparse_target=True,name='crf_output')
crf_output = crf(x)

# 模型有两个输出out1,crf_output
model=Model(inputs=[inputs,pos1_en,pos2_en],outputs=[out1,crf_output])
model.summary()

在这里插入图片描述

编译模型

# 编译模型
# 模型有两个loss:categorical_crossentropy和crf.loss_function
model.compile(optimizer='adam',
              loss={'out1':'categorical_crossentropy','crf_output':crf.loss_function},
              loss_weights={'out1':1,'crf_output':1},
              metrics=['acc'])
plot_model(model,to_file='model.png')

在这里插入图片描述

参考文献:

https://zhuanlan.zhihu.com/p/107737884

https://blog.csdn.net/xuluohongshang/article/details/79044325

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值