DESC_MOL-DDIE模型复现记录(发现问题)

如果有遇到这个问题的欢迎和我交流讨论,我真的不懂了。。。

qq:1410497065

----------------------------------------------------------------------

2022-3-31更新

 给作者发邮件了,人家回复我了,应该是我的问题,但是我使用的也是这个评估函数啊。。

我发现了一个可能导致结果出错的问题,已经发给作者,不过我再也不想回来看这个模型了。。。

-----------------------------------------------------------------------

2022.3.29更新,发现问题了。

我下载下来后

 我下载下来处理好之后和作者的数量是一样的。

可以看到,负样本占了大多数。

如果把负样本加入最后的分数计算的话,达到论文中提出的80多分是正常的,实验结果显示确实是80多分。

(下面图中每个都是分数都是一样的,不过不影响,是代码里操作有点小失误,总的来说就是加入了Neg评分才达到这么高)

但是作者给出的代码是没有把负样本算在里面的。我将数据打印出来如下图所示,Mechanism和effect的值为0,advice 和int也很低,如果不算negative的话,可能确实是0.00x分。

  ('negative', 'Mechanism',    'Effect',        'Advise',            'Int.')
P [0.83127413,       0.        ,            0.        , 0.08695652,    0.01639344]),
R [0.98288062,      0.        ,             0.        , 0.00934579,    0.0106383 ]
F [0.9007426 ,       0.        ,             0 .        0.01687764,      0.01290323]
S [4381,               278,                  298,              214,                94]

 

作者给出的每一种类型都有这么高的分数,是我操作失误吗。。。有复现过的遇到同样的问题了吗?


   

1.首先就是下载语料库数据集

     GitHub - isegura/DDICorpus

找到DDICorpus-2013.zip,下载下来,如果不了解格式的可以花2分钟看一下下面的链接,先看数据集格式再看代码

DDICorpus 2013 内容介绍_未空blog的博客-CSDN博客

我当时是LINUX命令不熟悉在这里兜了一会儿圈,遇到的奇怪LINUX命令总结_未空blog的博客-CSDN博客

主要任务是将xml格式语料转成BRAT格式再存进tsv文件

xml2brat.py:

'''
将某个xml文件处理成brat格式,
例如: somefile.xml
        -> somefile.txt
        -> somefile.ann
        -> somefile.map

'''

我是用训练集和测试集分别单独操作然后得到train.tsv 和dev.tsv


DrugBank...DrugBank我发邮件给他们了,要来回拉扯几天吧。。。因为人家都是两三点给我发消息,我看到的时候回复人家人家已经下班了,

 如果是学术使用的话,是可以得到别人的许可的,估计明天就会给我回复了。我看到别人公开的代码也有drugbank,比如Sum GNN,不过好像都是txt文件,我一直想从官方那里下载一次,自己处理,毕竟实践也是很重要的。https://go.drugbank.com/releases/latest,如果想要的话也可以自己申请一下。第三步fingerprint需要用到drugbank,等明天拿到许可了再弄。

续更:下载下来了,继续操作,老规矩首先要知道数据基本格式

DrugBank总结_未空blog的博客-CSDN博客

下载下来之后执行readme,我放在shell里面了

我不知道TSV_FILE是不是刚才生成的train.tsv,dev.tsv还是别的(但是似乎没有别的了呀)。

按部就班操作得到新的TSV


fingerprint:这是对新的TSV操作,生成npy文件


BERT模型部分:

按照github给出地址下载即可

config_class, model_class, tokenizer_class = MODEL_CLASSES[args.model_type]
    config = config_class.from_pretrained(args.config_name if args.config_name else args.model_name_or_path, num_labels=num_labels, finetuning_task=args.task_name) #task_name = MRPC
    tokenizer = tokenizer_class.from_pretrained(args.tokenizer_name if args.tokenizer_name else args.model_name_or_path, do_lower_case=args.do_lower_case)
    desc_tokenizer = tokenizer_class.from_pretrained(args.tokenizer_name if args.tokenizer_name else args.model_name_or_path, do_lower_case=args.do_lower_case)

用到模型的代码在上面三行,config_class = BertConfig

model_class = BertForSequenceClassification

tokenizer = BertTokenizer

args那里都改成/scibert_scivocab_uncased应该就能访问到了,tokenizer引用的时候报了个小错如下所示,就是说模型不是括号里的那些模型(括号里那些模型是常用的如果没有地址直接可以下载那种),默认包含提示的三个json配置文件

03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   Model name '../scibert_scivocab_uncased/vocab.txt' not found in model shortcut name list (bert-base-uncased, bert-large-uncased, bert-base-cased, bert-large-cased, bert-base-multilingual-uncased, bert-base-multilingual-cased, bert-base-chinese, bert-base-german-cased, bert-large-uncased-whole-word-masking, bert-large-cased-whole-word-masking, bert-large-uncased-whole-word-masking-finetuned-squad, bert-large-cased-whole-word-masking-finetuned-squad, bert-base-cased-finetuned-mrpc). Assuming '../scibert_scivocab_uncased/vocab.txt' is a path or url to a directory containing tokenizer files.
03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   Didn't find file ../scibert_scivocab_uncased/added_tokens.json. We won't load it.
03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   Didn't find file ../scibert_scivocab_uncased/special_tokens_map.json. We won't load it.
03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   Didn't find file ../scibert_scivocab_uncased/tokenizer_config.json. We won't load it.

03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   loading file ../scibert_scivocab_uncased/vocab.txt
03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   loading file None
03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   loading file None
03/28/2022 09:25:41 - INFO - transformers.tokenization_utils -   loading file None

但是打开这个transformer.tokenization_utils可以看到这段文字:

# We can't instantiate directly the base class `PreTrainedTokenizer` so let's show our examples on a derived class: BertTokenizer

            # Download vocabulary from S3 and cache.
            tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

            # If vocabulary files are in a directory (e.g. tokenizer was saved using `save_pretrained('./test/saved_model/')`)
            tokenizer = BertTokenizer.from_pretrained('./test/saved_model/')

            # If the tokenizer uses a single vocabulary file, you can point directly to this file
            tokenizer = BertTokenizer.from_pretrained('./test/saved_model/my_vocab.txt')

            # You can link tokens to special vocabulary when instantiating
            tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', unk_token='<unk>')
            # You should be sure '<unk>' is in the vocabulary when doing that.
            # Otherwise use tokenizer.add_special_tokens({'unk_token': '<unk>'}) instead)
            assert tokenizer.unk_token == '<unk>'

说明vocab.txt应该也是可以的。


开始训练

03/28/2022 09:59:10 - INFO - __main__ -   ***** Eval results  *****
03/28/2022 09:59:10 - INFO - __main__ -     Precision = 0.020754716981132074
03/28/2022 09:59:10 - INFO - __main__ -     Recall = 0.011235955056179775
03/28/2022 09:59:10 - INFO - __main__ -     microF = 0.014579191517561301

大爷的。。。数据集操作部分肯定有问题,但是我还不知道问题在哪里


猜测原因:我把medline和drugbank的训练集合在一起算作train.tsv,测试集也是,在database那个步骤里有一个代码是mention2dbid.py,而medline在drugbank里是找不到id的。这里可能会出问题,改了之后,嗯,解决了这个问题。。。产生了新的问题

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值