Giter Site home page Giter Site logo

metalstm's Introduction


metaLSTM

Meta Learning for LSTM

项目从搭建RNNs和MetaRNNs开始,首先用Jupyter测试RNNs和MetaRNNs的输入输出,然后用MNIST数据集测试RNNs和MetaRNNs的性能, 这些测试都是为了保证实现的RNNs和MetaRNNs基本正确,接着在CoNLL-2003数据集上进行NER实验,在这个过程中,需要保证RNNs性能和 Pytorch库提供的RNNs性能相差不大。之后的实验慢慢迁移到多任务,用的数据集是公开的医学数据集。

注:我用PyCharm运行项目,远程连接服务器。如果直接通过命令行运行文件可能不行,会出现找不到包的问题。

1 参考资料

感谢作者们的辛苦付出,让我有幸搬砖 :-P

2 环境

pip install -r requirements.txt

3 目录

本地目录还包括data/,models/,完整目录如下:

metaLSTM
    ----data
        ----conll2003(保存CoNLL-2003,用BMES标注)
        ----embedding(词向量目录)
        ----cellular(有关细胞的数据集)
            ----BioNLP13CG-IOBES
            ----BioNLP13PC-IOBES
            ----CRAFT-IOBES
            ----jointCellulars(用于加标签的多任务学习的数据集)
        ----multiDatasets(从资料11中下载的数据集)
    ----images (图片)
    ----MNIST(在MNIST数据集上测试RNNs)
    ----models(保存训练好的模型)
    ----Modules(RNNs, MetaRNNs, NormLSTM...)
    ----NER(主要实验的目录)
        ----Module(char, encoder, crf, ner)
        ----Tests(测试Optimizers/Normalizations...)
            ----cellulars(在3个cellular数据集上测试多任务性能)
        ----utils(配置文件,功能函数)

4 进展

  • metaRNNs
  • 简单测试RNNs和MetaRNNs
  • 在MNIST上测试RNNs
  • 在MNIST上测试MetaRNNs
  • 在CoNLL-2003上测试RNNs
  • 在CoNLL-2003上测试MetaRNNs
  • NER冲刺state of the art
  • MetaLSTM的迁移能力

5 实验

5.1和5.2用于测试RNNs的性能,没有调整超参,所以效果并不好,等5.3完成后,再更新图片

5.1 测试集MNIST

MNIST官网

MNIST是一个手写数字数据集,训练集有60,000个例子,测试集有10,000个例子。

5.1.1 标准RNN和RNN

  • 实验结果

5.1.2 标准LSTM和LSTM

  • 实验结果

5.1.3 MetaRNN和MetaLSTM

  • 实验结果

5.2 测试集CoNLL-2003

CoNLL-2003官网

CoNLL-2003是一个命名实体识别数据集,包含4类实体:PER, LOC, ORG, MISC

5.2.1 标准RNN和RNN

  • 实验结果

注:RNN图很快停止是因为训练时出现了NAN

5.2.2 标准LSTM和LSTM

  • 实验结果

5.2.3 MetaRNN和MetaLSTM

  • 实验结果

注:MetaRNN图很快停止是因为训练时出现了NAN

5.3 冲刺state of the art

  • 梯度更新方法(SGD, Adagrad, Adadelta, Adam, Nadam ...)
  • 归一化方法(Dropout, Batch, Layer)
  • 词向量(cove)
  • 多任务学习(加标签)
  • 注意力机制(待学习)
  • 元学习(学习率更新)

5.3.1 模型最优

  • 双向
  • 超参数
Model Hidden_size LR Method Bidirectional F1
BaseLSTM 200 SGD(0.015) True 91.18
LSTM 200 SGD(0.015) True 91.04/91.20(drop_lstm)
MetaLSTM 200 SGD(0.015) True 90.97/90.54(drop_lstm)

5.3.2 梯度更新方法

结论

  • 使用Adam,Loss下降最快
  • SGD训练结果最好
  • 我选择SGD

实验结果

  • Loss of Optimizers

  • F1 of Optimizers{train}

  • F1 of Optimizers{dev}

  • F1 of Optimizers{test}

5.3.3 归一化方法

Method Detail
Dropout 在encoder的输出加dropout
Batch Norm Batch Norm LSTM

5.3.4 词向量

Model Hidden_size Layer Embed Dict F1
LSTM 600 2 golve.840B.300d 90.35
LSTM 600 2 CoVe 87.57
  • 实验结果

5.3.5 多任务学习

Dataset STM MTM
BioNLP13CG 77.65 78.45
BioNLP13PC 83.28 82.49
CRAFT 76.59 78.61

加标签

将BioNLP13CG、BioNLP13PC和CRAFT三个数据集合并成一个,通过在句子首尾加标签的方式进行区分,例如:

<BioNLP13CG>	S-BioNLP13CG
This	O
may	O
reflect	O
a	O
transition	O
...
</BioNLP13CG>	S-BioNLP13CG

在打分的时候,将这些标签去掉。

  • 实验结果

  • 补充实验

Cellular component group

Dataset STM MTM
BioNLP13CG-cc 74.72 70.81
BioNLP13PC-cc 88.17 81.17
CRAFT-cc 64.24 65.65

Cell group

Dataset STM MTM
BioNLP13CG-cell 85.61 81.75
CRAFT-cell 89.33 88.79

Chemical group

Dataset STM MTM
BC4CHEMD 82.90 82.10
BC5CDR-chem 84.80 87.32
BioNLP11ID-chem 64.89 58.30
BioNLP13CG-chem 66.15 72.78
BioNLP13PC-chem 74.27 70.80
CRAFT-chem 80.48 79.34

Disease group

Dataset STM MTM
BC5CDR-disease 78.18 78.25
NCBI-disease 85.62 83.44

Species group

Dataset STM MTM
BioNLP11ID-species 68.80 66.93
BioNLP13CG-species 79.80 80.08
CRAFT-species 97.84 97.99
Linnaeus 86.23 85.96

5.3.6 注意力机制

  • 实验结果

5.3.7 元学习

  • 实验结果

6 MetaLSTM的迁移能力

7 体会

  • SGD训练,学习率lr设置很重要,过大容易训练不了
  • LSTM比RNN及其变种更容易训练,即使学习率lr设置过大
  • RNN在训练过程中,Loss容易变成NAN,而无法进一步训练
  • 对于NER任务,加CRF,双向LSTM效果显著(2~3个点),hidden_emb有些许的提升(1个点)

metalstm's People

Contributors

catnlp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

metalstm's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.