首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AllenNLP 2.0:在MultiTaskDatasetReader中使用‘AllenNLP谓词’会导致RuntimeError

AllenNLP 2.0:在MultiTaskDatasetReader中使用‘AllenNLP谓词’会导致RuntimeError
EN

Stack Overflow用户
提问于 2021-02-11 13:51:19
回答 1查看 643关注 0票数 0

我使用allennlp2.0训练了一个多任务模型,现在我想使用allennlp predict命令来预测新的例子。

Problem/Error:我正在使用以下命令:allennlp predict results/model.tar.gz new_instances.jsonl --include-package mtl_sd --predictor mtlsd_predictor --use-dataset-reader --dataset-reader-choice validation

这给了我以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
File ".../mtl_sd_venv/bin/allennlp", line 10, in <module>
sys.exit(run())
File ".../mtl_sd_venv/lib/python3.7/site-packages/allennlp/__main__.py", line 34, in run
main(prog="allennlp")
File ".../mtl_sd_venv/lib/python3.7/site-packages/allennlp/commands/__init__.py", line 119, in main
args.func(args)
File ".../mtl_sd_venv/lib/python3.7/site-packages/allennlp/commands/predict.py", line 220, in _predict
manager.run()
File ".../mtl_sd_venv/lib/python3.7/site-packages/allennlp/commands/predict.py", line 186, in run
for batch in lazy_groups_of(self._get_instance_data(), self._batch_size):
File ".../mtl_sd_venv/lib/python3.7/site-packages/allennlp/common/util.py", line 139, in lazy_groups_of
s = list(islice(iterator, group_size))
File ".../mtl_sd_venv/lib/python3.7/site-packages/allennlp/commands/predict.py", line 180, in _get_instance_data
yield from self._dataset_reader.read(self._input_file)
File ".../mtl_sd_venv/lib/python3.7/site-packages/allennlp/data/dataset_readers/multitask.py", line 31, in read
raise RuntimeError("This class is not designed to be called like this")
RuntimeError: This class is not designed to be called like this

据我所知,就是这么回事:

这个RuntimeError是由MultiTaskDatasetReader引发的,因为read()-method的MultiTaskDatasetReader不应该被称为自己。read()-method只应在MultiTaskDatasetReader.readers中调用特定的DatasetReaders。

调用MultiTaskDatasetReader的read()MultiTaskDatasetReader是因为在jsonnet-config中,我将DatasetsReaders指定如下:

代码语言:javascript
复制
"dataset_reader": {
    "type": "multitask",
    "readers": {
        "SemEval2016": {
            "type": "SemEval2016",
            "max_sequence_length": 509,
            "token_indexers": {
                "bert": {
                    "type": "pretrained_transformer",
                    "model_name": "bert-base-cased"
                }
            },
            "tokenizer": {
                "type": "pretrained_transformer",
                "model_name": "bert-base-cased"
            }
        }, ...
    }
}

通常,type of dataset_reader表示要实例化以进行预测的dataset-reader类。但是在本例中,type只是点MultiTaskDatasetReader,它没有实现read()-method,包含多个DatasetReaders。

据我所知,在使用allennlp predict时,我需要以某种方式指定应该使用的多个DatasetReaders中的哪个。

问题是:

如何指定在执行DatasetReader时应该使用哪个特定的DatasetReaders (MultiTaskDatasetReader.readers中的多个DatasetReaders)?或者更广泛地说:如何让allennlp predict与MultiTaskDatasetReader一起运行?

为了完整性起见,附加代码:是预测器:

代码语言:javascript
复制
@Predictor.register('mtlsd_predictor')
class MTLSDPredictor(Predictor):

    def predict(self, sentence: str) -> JsonDict:
        return self.predict_json({'sentence': sentence})

    @overrides
    def _json_to_instance(self, json_dict: JsonDict) -> Instance:
        target = json_dict['text1']
        claim = json_dict['text2']
        return self._dataset_reader.text_to_instance(target, claim)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-26 21:03:45

这里有两个问题。一个是AllenNLP中的一个bug,它在2.1.0版本中得到了修复。另一个是@sinaj在他的模型头上缺少了default_predictor

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66156046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档