thunlp / PL-Marker

Source code for "Packed Levitated Marker for Entity and Relation Extraction"
MIT License
260 stars 35 forks source link

关于参数lminit #32

Closed WangSheng21s closed 2 years ago

WangSheng21s commented 2 years ago

你好,非常感谢您的杰出工作,在初步了解了工作内容后,我有一些疑问希望向您请教。

1、参数lminit的作用是什么?

2、我尝试用您的代码跑中文数据集,因此更换了对应的中文预训练模型,也就更换了对应的tokennizer,导致下面这段代码出了问题

if args.do_train and args.lminit: 
    if args.model_type.find('roberta')==-1:
        entity_id = tokenizer.encode('entity', add_special_tokens=False)
        assert(len(entity_id)==1)
        entity_id = entity_id[0]
        mask_id = tokenizer.encode('[MASK]', add_special_tokens=False)
        assert(len(mask_id)==1)
        mask_id = mask_id[0]
    else:
        entity_id = 10014
        mask_id = 50264

其中len(entity_id)和len(mask_id)不等于1,这似乎是tokenizer改变导致的,我想请教这个entity_id和mask_id的作用是什么呢,我应该如何改正呢请问。谢谢

YeDeming commented 2 years ago

你好,--lminit是一种初始化,类似于prompt,将两个marker分别初始化为单词[MASK]和entity的embedding,能在英文数据集上带来0.1 F1的提升。在中文上可以直接关闭这个选项

WangSheng21s commented 2 years ago

谢谢回答

lairongxuan commented 2 years ago

你好,--lminit是一种初始化,类似于prompt,将两个marker分别初始化为单词[MASK]和entity的embedding,能在英文数据集上带来0.1 F1的提升。在中文上可以直接关闭这个选项

作者好,根据您的代码,这两个marker标记的是entity的开始和结束两个token,为什么要用[MASK]entity的embedding?而不是用其他,有没有特殊的理由?