我对allennlp非常陌生,我正在努力构建一个模型,这个模型似乎不完全适合在allennlp中构建模型的标准方式。
我想用NLP建立一个管道模型。管道主要由两个模型组成,我们称它们为A和B。首先A被训练,然后根据A,B的整个列车的预测进行训练。
我看到的是,人们定义了两个独立的模型,在一个类似的shell脚本中使用命令行接口allennlp train ...进行训练
# set a bunch of environment variables
...
allennlp train -s $OUTPUT_BASE_PATH_A --include-package MyModel --force $CONFIG_MODEL_A
# prepare environment variables for model b
...
allennlp train -s $OUTPUT_BASE_PATH_B --include-package MyModel --force $CONFIG_MODEL_B我对此有两点担忧:
关于如何更好地做到这一点,有什么想法吗?
我考虑使用python脚本而不是shell脚本,直接调用allennlp.commands.main(..)。这样做至少有一个联合python模块,您可以使用调试器运行。
发布于 2021-01-16 02:36:19
有两种可能性。
如果您真的只是将一个模型的输出插入另一个模型的输入中,则可以将它们合并到一个模型中并以这种方式运行。如果您使用一个from_file模型用两个经过训练的模型初始化组合模型,那么您可以使用两个已经训练过的模型来完成这个任务。在训练的时候做这件事有点困难,但不是不可能的。你会像现在一样训练第一个模特。对于第二步,您直接训练组合模型,内部第一个模型的权重冻结。
您可以做的另一件事是使用AllenNLP作为库,而不使用配置文件。我们有GitHub上的模板向您展示了如何做到这一点。基本的见解是,您在一个Jsonnet配置文件中配置的所有内容都对应于可以直接从Python使用的Python类1:1。不需要使用配置文件。如果您以这种方式使用AllenNLP,则具有更大的灵活性,包括将事物链接在一起。
https://stackoverflow.com/questions/65735518
复制相似问题