码迷,mamicode.com
首页 > 其他好文 > 详细

运行DrQA实例

时间:2018-08-27 21:37:15      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:自然语言   learn   file   use   文件   vector   pat   rip   factor   

运行DrQA实例

 

  如按照<DrQA安装手册>成功运行 bash ./download.sh 后,我们得到完整的DrQA项目,接下来我们将通过训练一个实例去了解DrQA系统。我们的工程只用到了DrQA的阅读理解部分,所以实际操作可能和DrQA官网上有些不一样,但是流程是一致的,主要分为数据处理、训练并生成模型、利用模型进行交互这三个部分。

 

   1.数据处理

  运行python prepro.py.

  数据处理是我们需要了解最为详细的部分(事实上我们在模型训练的部分无需做太多的改动。)

 

  1flatten_json

 

   flatten_json的作用是将实际数据进行解析,并将训练集处理为rowid_, context, question, answer, answer_start, answer_end),验证集处理为(id_, context, question, answer)。其中的answer_start, answer_end分别表示问题在文本中起始的位置与结束的位置。这部分的代码需要根据实际需要去更改,原工程的训练集与验证集放在SQuAD下,可以在loadDataset下方的trn_file = ‘SQuAD/xxxx‘dev_file = ‘SQuAD/xxxx‘进行修改。

 

  2init

 

  init是初始化的地方,spacy之类的tokenizer就在此处初始化;由于我们的工程借助到哈工大的pyltp,所以 SegmentorPostaggerNamedEntityRecognizermodel导入也在此处进行。

 

  3annotate

 

  annotate是将导入的数据处理成基本特征的部分。返回的参数格式是(id_, context_tokens, context_features, context_tags,context_ents,question_tokens, context, context_token_spanid, context, question)。其中context_tagscontext_ents分别是词性标识和命名实体标识;context_features则由match_origin, match_lower, match_lemma, context_tf组成,其中match_lower, match_lemma在中文自然语言分析中是没有的;而context_token_span则是标识每个词在文段中的位置。

 

    4build_vocabto_id

 

  这部分将会把每个词语与词向量文件相互对应,将每个词转换为词向量中的ID。原系统的词向量是在glove中的glove.840B.300d.txt,有5.6G那么大,每个词的维度都为300,可以在如下代码处自定义词向量文件的位置和每个词的维度。在转换好后,原来的每个词语都将被标记为一个ID,通过这个ID便可以检索其对应的300维向量。

 

  parser.add_argument(‘--wv_file‘, default=‘glove/glove.840B.300d.small.txt‘,help=‘path to word vector file.‘)

 

  parser.add_argument(‘--wv_dim‘, type=int, default=300,help=‘word vector dimension.‘)

 

  接下来就是写入文件的部分,在提示saved to disk后,文件将被存到SQuAD/sample.msgpack中,然后便可以用其进行训练。在预处理过程中有可能会报缺少__init__.py,这时可以尝试建立一个空的__init__.pydrqa目录下。

 

  2.训练

 

  运行python  train.py.

 

      训练这部分比较复杂,train会调用model.pylayers.pyrnn_reader.py这些文件去进行训练,会耗费大量的时间,在trian里面有参数设定的说明。如:

 

  parser.add_argument(‘-e‘, ‘--epochs‘, type=int, default=40)

 

  parser.add_argument(‘-bs‘, ‘--batch_size‘, type=int, default=32)

 

  parser.add_argument(‘-rs‘, ‘--resume‘, default=‘best_model.pt‘,
  help=‘previous model file name (in `model_dir`). ‘
  ‘e.g. "checkpoint_epoch_11.pt"‘)
  parser.add_argument(‘-ro‘, ‘--resume_options‘, action=‘store_true‘,
  help=‘use previous model options, ignore the cli and defaults.‘)
  parser.add_argument(‘-rlr‘, ‘--reduce_lr‘, type=float, default=0.,
  help=‘reduce initial (resumed) learning rate by this factor.‘)

 

  运行时候可能会报缺少cuda,可以通过注释model中的#‘torch_cuda_state‘: torch.cuda.get_rng_state() 

 

  训练得到的每个checkpointbest model都会被存到models文件夹下。需要注意的是,每次开始训练时,train都会去加载原有的model,因此在采用不同数据集进行计算时候会出现维度不匹配的错误,因此我们需要把models里的文件及时迁移。

 

  3.交互

 

  运行python scripts/reader/interactive.py --model /path/to/model

 

  这里的 model 便是我们之前计算得出的模型;如果忽略就会使用默认的模型。

 

  如果要在数据集上执行模型预测,则运行如下代码:

 

  python scripts/reader/predict.py /path/to/format/B/dataset.json --model /path/to/model

 

  同样,官网也给出了很多的参数

 

  --reader-model Path to trained Document Reader model.

 

  --retriever-model Path to Document Retriever model (tfidf).

 

  --doc-db Path to Document DB.

 

  --tokenizers String option specifying tokenizer type to use (e.g. ‘corenlp‘).

 

  --candidate-file List of candidates to restrict predictions to, one candidate per line.

 

  --no-cuda Use CPU only.

 

  --gpu Specify GPU device id to use.

 

   至此,我们便跑完了一整个DrQA的流程。

 

运行DrQA实例

标签:自然语言   learn   file   use   文件   vector   pat   rip   factor   

原文地址:https://www.cnblogs.com/bayolante/p/9543710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!