# -*- coding: utf8 -*-
#
import hanlp
from hanlp.components.srl.span_bio.span_bio import SpanBIOSemanticRoleLabeler
HanLP = hanlp.load(
hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH,
devices=['cpu'],
) # 世界最大中文语料库
samples = [
# '我爱你们和北京。',
# '我爱你们。',
'与此同时,我们也为用户提供了客服申诉渠道、文档找回路径。',
'华为支付事业群总裁马传勇:鸿蒙 HarmonyOS 3.0 正式版将于 7 月底发布',
'口腔、鼻腔、咽腔口腔由上腭和下腭两部分构成。'
]
batch_result = HanLP(samples,
skip_tasks=['tok/coarse', 'dep', 'con', 'sdp', 'pos/ctb', 'ner/ontonotes', 'ner/msra',
'ner/pku', 'pos/863'])
print(batch_result)
t = SpanBIOSemanticRoleLabeler()
t.load(save_dir='output')
def convert():
t.model.embed.load_state_dict(HanLP.model.encoder.state_dict())
t.model.decoder.load_state_dict(HanLP.model.decoders.srl.state_dict())
t.save_weights(save_dir='output')
convert()
result = t.predict(batch_result['tok/fine'], len(batch_result['tok/fine']))
print(result)
# t.fit(
# ONTONOTES5_CONLL12_CHINESE_TRAIN,
# ONTONOTES5_CONLL12_CHINESE_DEV,
# # ONTONOTES5_CONLL12_CHINESE_TEST,
# save_dir='output',
# embed=ContextualWordEmbedding('token',
# "hfl/chinese-electra-180g-small-discriminator",
# average_subwords=True,
# max_sequence_length=512,
# word_dropout=.1),
#
# sampler=SortingSamplerBuilder(batch_size=2, batch_max_tokens=2048),
# lr=1e-3,
# crf=True,
# # dependencies='tok',
# )
非常抱歉耽误大家的时间,我debug了好久,还是没看出问题在哪,故来烦请大家帮忙解决
问题如下:
请看上面代码,我将multi task训练好的模型中的encoder和decoder的SRL模型的weight加载进来,然后进行预测,发现两个结果的输出并不一样,尤其对于第三句话:口腔、鼻腔、咽腔口腔由上腭和下腭两部分构成。
,有两个ARG1
。
我应该怎么做才能使结果的输出和multi task的输出是一样的呢?
output.zip (2.2 KB)