AllenNLP使用Predictor进行预测

在租的服务器上训练了预置的bidaf,把这两个文件拷到了自己这边:
在这里插入图片描述
其中model.tar中有三个文件,词典,模型配置文件,权重文件。词典中有97320个词,还记录了不填充的namespace “tags和labels”
在这里插入图片描述

用 BidafPredictor 使用model.tar.gz文件进行预测。文章和问题用的SQuAD1.1 dev的第一篇文章,我把文章放到了spacy.txt,问题直接输入。

from allennlp.predictors import BidafPredictor
bidaf = BidafPredictor.from_path('F:/dl-data/save/origin/model.tar.gz')
with open("F:/spacy.txt", 'r') as f:
        res = bidaf.predict('What day was the game played on?', f.read())
        #print(res.keys())
        print(res['best_span_str'])

输出的结果:

February 7, 2016

一、BidafPredictor.from_path()

Predict的过程是先把压缩包解压到一个临时文件,在archival.py的load_archive()中构造出model,在这里使用了config.json,词典,权重文件。

model = Model.load(config.duplicate(),
                       weights_file=weights_path,
                       serialization_dir=serialization_dir,
                       cuda_device=cuda_device)

模型得到后,predict.py的from_archive()中,根据参数构造出数据读取器DatasetReader。

dataset_reader_params = config["dataset_reader"]

二、predict

predictor先把文章和问题变成json格式,然后DatasetReader将数据转为instance,送入model的forward()。
输出的是model的output_dict,可以看模型给的答案,也可以进行可视化。

dict_keys(['passage_question_attention', 'span_start_logits', 
'span_start_probs', 'span_end_logits', 'span_end_probs',
 'best_span', 'best_span_str', 'question_tokens', 'passage_tokens'])

文章-问题attention矩阵:
在这里插入图片描述

三、自己的DatasetReader,Model,Predictor

DatasetReader:重写_read(),text_to_instance()。

Model

  1. 重写forward(),get_metrics()
  2. forward输出一个词典,必须有"loss"这一项,需要可视化的数据可以放到词典中输出

Predictor

  1. 定义一个predict(),输入文字,构造词典,调用predict_json()传入词典
  2. 重写_json_to_instance(self, json_dict: JsonDict),这个词典是1中自己构建的词典,在这里调用self._dataset_reader.text_to_instance(),输出为instance
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值