AllenNLP训练的方式

前几天看到一个群里有人问,AllenNLP在控制台使用命令train时,什么时候建立的词典,于是今天浏览了一下AllenNLP的代码。
train.pyclass Train(Subcommand):类里,这里用parser定义了一些命令行的输入指令。在控制台输入allennlp train XXX -s XXX之后,读取配置文件.json,然后进入到

train_model(params, serialization_dir, file_friendly_logging, recover, force)

这个方法里,帮你进行了初始化的工作,比如说

prepare_environment(params) #设置seed
create_serialization_dir(params, serialization_dir, recover, force)   #创建输出的目录
check_for_gpu(cuda_device)  #检查GPU

这些零碎的工作完成之后,进入到

TrainerPieces.from_params(params, serialization_dir, recover)

在这个方法里,就可以看到

training_util.datasets_from_params(params)  #在这里读取数据集

读取完数据集后,创建词典,如果命令行中加了-r就会使用之前已经创建好的词典。在json配置文件里如果没有定义词典的属性的话,使用默认的参数。

if recover and os.path.exists(os.path.join(serialization_dir, "vocabulary")):
    vocab = Vocabulary.from_files(os.path.join(serialization_dir, "vocabulary"))
else:
    vocab = Vocabulary.from_params(
            params.pop("vocabulary", {}),
            (instance for key, dataset in all_datasets.items()
             for instance in dataset
             if key in datasets_for_vocab_creation)
    )   #这里用读取的数据建立词典

保存词典到文件。

vocab.save_to_files(os.path.join(serialization_dir, "vocabulary"))

总结

AllenNLP的工程搭建应该可以有三种方式:

  1. 所有的代码都自己完成,比如vocabulary,BucketIterator,trainer。但是想要改参数的话,不够方便。
  2. 手动调用from_params(),对所有东西设置属性。
  3. 只用写json配置文件,自己的模型,数据集的读取等类,其他工作由AllenNLP的代码辅助完成。这样就可以节省时间,专注于模型和数据的读取。

但是

手写json配置文件是一件困难的事情,可以有两种方法辅助完成。

  1. 参考AllenNLP已经完成的配置文件,在training_config中。
  2. 命令行中用allennlp configure --port 8123,打开网页,在界面上设置。这个在windows中不能使用,只能在ubuntu中用。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值