allennlp
街道口扛把子
武汉大学炼丹师
展开
-
AllenNLP模型部署
几个月前做毕设的时候尝试过使用AllenNLP通过网络部署阅读理解模型,用Qt做客户端,用来答辩的时候可视化地展示效果。界面做的比较简单,在以前的代码上改的,现已开源。MRCClient效果如下:部署1.在训练完一个模型之后,我们可以在AllenNLP中进行部署。python -m allennlp.service.server_simple --archive-path F:/d...原创 2019-12-29 17:23:28 · 720 阅读 · 2 评论 -
AllenNLP源码拓展——训练结束向邮箱发邮件
训练模型时,不知道什么时候会结束(特别是设置了早停时),因此之前习惯过一会看一下状况。所以前不久想到,如果添加代码,在训练结束后向自己的邮箱发送邮件,那不是很方便嘛。于是我尝试在AllenNLP的源码上添加发送邮件的代码。如果需要改写源码,不能直接用pip安装,需要按照https://github.com/allenai/allennlp的Installing from source部分所说的方...原创 2019-03-07 16:39:21 · 1871 阅读 · 0 评论 -
AllenNLP源码学习——embedder(简略)
token_embedders用于将index后的词转为tensor。常用的是Embedding类(可以读取预训练词向量)和TokenCharactersEncoder类。对于TextField,需要用TextFieldEmbedder,更具体地,BasicTextFieldEmbedder。BasicTextFieldEmbedder用来管理多个token_embedder,这样单词可以有...原创 2019-03-11 15:33:25 · 1528 阅读 · 0 评论 -
AllenNLP训练模型需要注意的一些东西
加载预训练模型所有参数{"model": "initializer": [ [ "*.weight|*.bias", { "type": "pretrained", "weights_file_path": "./best.th&qu原创 2020-12-21 18:12:57 · 226 阅读 · 0 评论 -
AllenNLP实践——fine-tune
AllenNLP的commands命令中有一个fine-tune命令,可以在新的数据集上训练模型,或者在原来的模型上继续训练。fine-tune命令跳过配置文件的model部分,即网络结构是要固定下来的,其他参数可以变。比如可以在配置文件设置trainer的no_grad,冻结一些层,让他们不进行参数更新,而其他层的参数正常更新。以qanet.jsonnet为例在windows中首先要去...原创 2019-03-17 10:42:47 · 727 阅读 · 0 评论 -
AllenNLP实践——参数初始化与加载预训练模型
AllenNLP参数初始化源码可以阅读allennlp.nn.initializers,他们将加载预训练模型也作为一种参数初始化方式,加到这部分。使用方法模型的构造参数设置一项initializer: InitializerApplicator = InitializerApplicator(),用initializer来对模型参数进行不同的初始化。在__init__最后加一行initia...原创 2019-04-18 15:54:11 · 1270 阅读 · 0 评论 -
AllenNLP实践——命令行中覆盖配置文件参数
以train命令为例,可以设置若干参数,如’–serialization-dir’,’–recover’,’–overrides’,’–file-friendly-logging’。'–overrides’这一项可以对json配置文件的某些项进行覆盖,官方对这一项的帮助如下:a JSON structure used to override the experiment configurati...原创 2019-04-19 16:29:07 · 464 阅读 · 0 评论 -
AllenNLP源码拓展——中文分词
AllenNLP中常使用spacy对英文进行分词,但是spacy不能对中文分词。因此我想尝试加一个中文分词的word_splitter。对比了一些中文分词包,最后在THULAC和jieba中进行选择,据说前者更准确,后者速度更快,为了保证准确,我选择了前者(不知道还有没有更好的)。我参考spacy部分的代码弄了一个THUNLPSplitter。测试代码:(postags指是否标注词性,only_...原创 2019-06-06 11:37:02 · 531 阅读 · 0 评论 -
AllenNLP——有史以来最便捷的中文文本分类
AllenNLP使用的分词工具主要是spacy,主要用于英文,不能用于中文,但是这个库是可以处理各种语言的,因此我们只需要新增中文的WordSplitter,就可以使用AllenNLP处理中文数据了。在前几篇文章中,我们实现了thulac和jieba的中文分词。https://zhuanlan.zhihu.com/p/72459893https://zhuanlan.zhihu.com/p/...原创 2019-07-09 19:50:05 · 2453 阅读 · 3 评论 -
AllenNLP源码拓展——中文分词2
AllenNLP中常使用spacy对英文进行分词,但是spacy不能对中文分词。因此我想尝试加一个中文分词的word_splitter。前不久加了一个THUNLPSplitter,今天把jieba也加进去。测试代码:(pos_tags指是否标注词性,only_tokens指最终是否只保留字符,去掉词性等属性,user_dict指用户自定义词典,是一个UTF-8的txt文件路径,一行是一个词) ...原创 2019-07-06 11:36:27 · 699 阅读 · 0 评论 -
AllenNLP笔记——Reading-Comprehension如何得到答案最佳的起始,终止位置
输入start与end的logits数据start = torch.tensor([[0.3, 0.4, 0.1, 0.1, 0.2]])end = torch.tensor([[0.1, 0.2, 0.2, 0.4, 0.5]])start与end求和的矩阵,行为start,列为endtensor([[[0.4000, 0.5000, 0.5000, 0.7000, 0.8000],...原创 2019-03-04 17:41:46 · 476 阅读 · 0 评论 -
AllenNLP源码学习——CategoricalAccuracy和BooleanAccuracy
CategoricalAccuracy构造参数:top_k(取logits值的最大的前k个),tie_break(如果最大logits值出现多个相同的值,是否可以取平均)例:输入为[[0.3, 0.5, 0.5, 0.2, 0.1],label为[[2]]如果tie_break=True,最终得到的correct(计数)为0.5如果tie_break=False,最终得到的correct(...原创 2019-03-04 15:55:32 · 753 阅读 · 0 评论 -
AllenNLP源码拓展——自动完成一批训练任务
前几天突然想到,AllenNLP的train命令是根据一个配置进行一项训练任务,如果可以把train命令打包到一个for循环里,那不是可以自动完成多个训练任务嘛。如果完成一个训练任务需要一个小时,那么一个晚上可以设置不同的参数,或者对于不同的模型,完成十几次的训练任务,充分地利用了晚上的时间。于是就在前几天,趁着实验室的机器还没有修好,尝试实现了一下我的想法,参考train命令的代码,自己加了一...原创 2019-03-09 14:28:25 · 725 阅读 · 0 评论 -
AllenNLP文本数据预处理类关系图
NLP的文本预处理需要经过分词,建立词典,单词转索引值,转tensor,AllenNLP定义了若干类处理这一过程,因此我用图的方式记录这些类的关系,将重要的几点标红,这样看着清楚。参考allennlp/tutorials/notebooks/中的示例。...原创 2019-01-25 17:05:08 · 601 阅读 · 0 评论 -
AllenNLP常用命令记录
allennlp train ./config_dir -s ./save_dir -r, --recover recover training from the state in serialization_dir -f, --force overwrite the output directory if it exists -o OVERRIDE...原创 2019-01-27 12:24:02 · 1527 阅读 · 0 评论 -
AllenNLP使用Predictor进行预测
在租的服务器上训练了预置的bidaf,把这两个文件拷到了自己这边:其中model.tar中有三个文件,词典,模型配置文件,权重文件。词典中有97320个词,还记录了不填充的namespace “tags和labels”用 BidafPredictor 使用model.tar.gz文件进行预测。文章和问题用的SQuAD1.1 dev的第一篇文章,我把文章放到了spacy.txt,问题直接输入...原创 2019-01-29 20:08:23 · 3240 阅读 · 0 评论 -
AllenNLP源码学习——Vocabulary
class _NamespaceDependentDefaultDict(defaultdict)记录non_padded_namespaces(哪些namespace不需要pad,例如tags,labels),以及如何进行pad(padded_function),或者不pad(non_padded_function)def missing(self, key: str): 处理如果key在...原创 2019-03-05 18:07:29 · 1639 阅读 · 0 评论 -
AllenNLP源码学习——trainer
trainer是模型训练的中枢,它的内部控制着模型训练的各个组件,如model,iterator,datasets,num_epochs,optimizer,读取与保存,打印输出,早停,summary_interval(多少个epoch用tensorboard记录一次),should_log_learning_rate(是否记录学习率变化)等。一个epoch全部数据训练一轮结束后,输入一遍验证...原创 2019-03-02 17:29:22 · 1692 阅读 · 0 评论 -
AllenNLP源码学习——Instance
Instance是Field的集合,是一个Dict,Mapping[str, Field]。例如{'passage':TextField(passage_tokens, token_indexers), 'span_start':IndexField(span_start, passage_field)}在读取数据集的def _read()方法(生成器,返回迭代器)中,输出为yield,即一次...原创 2019-03-05 22:50:38 · 533 阅读 · 0 评论 -
AllenNLP源码学习——Embedding
上次阅读Vocabulary的代码时,我注意到,加入词典的token先用词频进行了排序,再加入词典的,那么它的顺序就和预训练词向量文件不一样了,于是阅读Embedding,了解了它是如何使用预训练词向量的。Embedding.py文件中定义了一些类和函数,对于处理URL和hdf5文件相关的,我没有看。训练配置文件vocabulary有一项pretrained_files,用来构造词典mod...原创 2019-03-08 17:03:18 · 1016 阅读 · 0 评论 -
AllenNLP源码学习——Batch与DataIterator
DataIterator类用来把读取数据集类输出的Instance打包为Batch。子类需要重写_create_batches()方法,把Instances打包成Batch。最常用的子类是BucketIterator。BucketIterator默认情况下,根据每Batch的最大输入长度填充Batch可以提供Field名字的List和padding keys,在执行此批处理之前将对数据集...原创 2019-03-06 14:32:16 · 1521 阅读 · 1 评论 -
AllenNLP学习资料
http://www.realworldnlpbook.com/blog/AllenNLP官方教程:https://allennlp.org/tutorials ,https://github.com/allenai/allennlp/tree/master/tutorials利用AllenNLP,百行的Python代码训练情感分类器AllenNLP 使用教程CSDN博客...原创 2019-03-06 15:45:29 · 453 阅读 · 0 评论 -
AllenNLP训练的方式
前几天看到一个群里有人问,AllenNLP在控制台使用命令train时,什么时候建立的词典,于是今天浏览了一下AllenNLP的代码。在train.py的class Train(Subcommand):类里,这里用parser定义了一些命令行的输入指令。在控制台输入allennlp train XXX -s XXX之后,读取配置文件.json,然后进入到train_model(params, ...原创 2019-01-25 10:44:08 · 1511 阅读 · 0 评论