首页 PaddleNLP 帖子详情
怎么实现BERT+LSTM+CRF模型结构? 已解决
收藏
快速回复
PaddleNLP 问答NLP 242 11
怎么实现BERT+LSTM+CRF模型结构? 已解决
收藏
快速回复
PaddleNLP 问答NLP 242 11

问下,怎么实现BERT+LSTM+CRF模型结构,在项目空间里能找到BERT项目和LSTM+CRF项目,看了BERT源代码,但不知道用那个函数或类。就是把BERT作为嵌入层这块不会写,后面的LSTM+CRF没有问题。

我爱志方小姐
已解决
7# 回复于2021-08-19
`PaddleNLP` 有参考实现的代码呀。我知道的至少有两个可以参考: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/information_extraction/waybill_ie/model.py https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/skep/modeling.py#L443
展开
0
收藏
回复
全部评论(11)
大连之星snort
#2 回复于2021-08-14

初步想法是参考class BertForTokenClassification(BertPretrainedModel):写一个。

0
回复
大连之星snort
#3 回复于2021-08-14

花了很长时间遍历项目库,一个类似的项目都没有,不知道为什么?

0
回复
大连之星snort
#4 回复于2021-08-14

代码如下:

class BiGRUWithCRF(nn.Layer):
def __init__(self,
hidden_size = 300,#BiGRU层每个单元隐状态维度
label_num =2 #标签类型总数
):
super(BiGRUWithCRF, self).__init__()
#定义Embedding层,即关键的BERT层
self.bert = BertModel.from_pretrained("bert-base-chinese")
#定义BiGRU层:门控循环单元网络,
self.gru = nn.GRU(self.bert.config["hidden_size"],#输入词嵌入维度
hidden_size,#每个单元隐状态维度
num_layers=2,#网络层数
direction='bidirectional')#网络迭代方向
#定义全连接层:线性变换层,参数是输入层和输出层的神经元个数
#未登录词'O'不在label_vocab中,分类时存在未登陆词,所以标签个数label_num要加2
self.fc = nn.Linear(hidden_size * 2, label_num + 2) # BOS EOS
#定义CRF层:线性链式CRF,根据上下文进行序列预测
self.crf = LinearChainCrf(label_num)
#定义解码层:维特比译码器,获取评分最高的序列标签,输入参数是CRF的转移矩阵
self.decoder = ViterbiDecoder(self.crf.transitions)

 

训练时出现这个错误:TypeError: 'Model' object is not callable

0
回复
大连之星snort
#5 回复于2021-08-16

程序跑起来了,主要修改了forward参数,使之与DataLoader返回的参数一致,也就是input_ids,seg_type,len,label

0
回复
大连之星snort
#6 回复于2021-08-18

感觉论坛太冷清了,目前F1值不正常。

0
回复
我爱志方小姐
#7 回复于2021-08-19

`PaddleNLP` 有参考实现的代码呀。我知道的至少有两个可以参考:

https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/information_extraction/waybill_ie/model.py

https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/skep/modeling.py#L443

2
回复
大连之星snort
#8 回复于2021-08-19

我楼上的答案设为解决方案了,供参考。

0
回复
去你的萨芬
#9 回复于2021-08-20
`PaddleNLP` 有参考实现的代码呀。我知道的至少有两个可以参考: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/information_extraction/waybill_ie/model.py https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/skep/modeling.py#L443
展开

3q

0
回复
去你的萨芬
#10 回复于2021-08-20

下面的项目用了这个模型

https://aistudio.baidu.com/aistudio/projectdetail/1584124

0
回复
大连之星liam
#11 回复于2021-09-07

很好,参考了。

0
回复
深渊上的坑
#12 回复于2021-09-09
`PaddleNLP` 有参考实现的代码呀。我知道的至少有两个可以参考: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/information_extraction/waybill_ie/model.py https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/skep/modeling.py#L443
展开

太赞了~

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户