
シーケンスラベル付けモデルは、名前付きエンティティ認識(NER)、スピーチ(POS)タグ付け、単語セグメンテーションなど、多くのNLPタスクで非常に人気があります。最先端のシーケンスラベル付けモデルは、主に入力単語機能を備えたCRF構造を利用しています。 LSTM(または双方向LSTM)は、シーケンスラベル付けタスクで人気のあるディープラーニングベースの特徴抽出器です。また、CNNは、より速い計算により使用することもできます。また、単語内の特徴は、文字LSTMまたはキャラクターCNN構造、またはヒト定義された神経特徴によってキャプチャできる単語を表すのにも役立ちます。
NCRF ++は、入力機能と出力構造の柔軟な選択を備えたPytorchベースのフレームワークです。 NCRF ++を使用したニューラルシーケンスラベル付けモデルの設計は、コード作業を必要としない構成ファイルを介して完全に構成できます。 NCRF ++は、有名な統計CRFフレームワークであるCRF ++のニューラルネットワークバージョンと見なすことができます。
このフレームワークは、ACL 2018によってデモペーパーとして受け入れられています。 NCRF ++を使用した詳細な実験レポートと分析は、Coling 2018で最高の論文として受け入れられています。
NCRF ++は、文字シーケンス表現、単語シーケンス表現、推論層の3つのレベルの異なる構造の組み合わせをサポートしています。
スターこのリポジトリへようこそ!
Python: 2 or 3
PyTorch: 1.0
Pytorch 0.3互換性のあるバージョンはこちらです。
nbestデコード(確率を含む)。 NCRF ++は、構成ファイルを介してニューラルネットワーク構造の設計をサポートしています。プログラムは2つのステータスで実行できます。トレーニングとデコード。 (サンプルの構成とデータがこのリポジトリに含まれています)
トレーニングステータス: python main.py --config demo.train.config
デコードステータス: python main.py --config demo.decode.config
構成ファイルは、ネットワーク構造、I/O、トレーニング設定、およびハイパーパラメーターを制御します。
詳細な構成と説明はここにリストされています。
NCRF ++は、3つのレイヤー(以下に示す)で設計されています。文字シーケンスレイヤー。単語シーケンスレイヤーと推論レイヤー。構成ファイルを使用することにより、最先端のモデルのほとんどはコーディングなしで簡単に複製できます。一方、ユーザーは独自のモジュールを設計することで各レイヤーを拡張できます(たとえば、CNN/LSTM/GRU以外の独自の神経構造を設計することもできます)。レイヤーが塗った設計により、モジュール拡張機能が便利になります。モジュール拡張の命令はここにあります。

CONLL 2003英語NERタスクの結果は、同じ構造のSOTA結果と比較可能です。
charlstm+wordlstm+crf:91.20 vs lample .etc、naacl16;
Charcnn+wordlstm+crf:91.35 vs 91.21 of Ma .etc、ACL16。
デフォルトでは、 LSTMは双方向LSTMです。
| id | モデル | nochar | Charlstm | charcnn |
|---|---|---|---|---|
| 1 | wordlstm | 88.57 | 90.84 | 90.73 |
| 2 | wordlstm+crf | 89.45 | 91.20 | 91.35 |
| 3 | wordcnn | 88.56 | 90.46 | 90.30 |
| 4 | wordcnn+crf | 88.90 | 90.70 | 90.43 |
統計実験の下で、3つのベンチマーク(POS、チャンキング、NER)で、12のニューラルシーケンスラベル付けモデル( {charLSTM, charCNN, None} x {wordLSTM, wordCNN} x {softmax, CRF} )を比較しました。
NCRF ++は、いくつかのSOTAニューラル特性シーケンス特徴抽出物を統合しました:CNN(Ma .ETC、ACL16)、LSTM(Lample .ETC、NAACL16)およびGRU(Yang .ETC、ICLR17)。さらに、手作りされた機能が、タスクのラベル付けにおいて重要であることが証明されています。 NCRF ++を使用すると、大文字、POSタグ、その他の機能などの独自の機能を設計するユーザーを使用できます(上記の図の灰色の円)。ユーザーは、構成ファイル(機能の埋め込みサイズ、前提条件の機能埋め込み.ETC)を使用して、自己定義の機能を構成できます。サンプル入力データ形式[POS] 、Train.cappos.bmesで提供されます[Cap] ( [POS]と[Cap]は2つの例です。機能を任意の名前に指定できます。フォーマット[xx]に従って、構成ファイルに同じ名前を持つ機能を構成します。)ユーザーは、構成ファイルで各機能を構成することができます。
feature = [ POS ] emb_size = 20 emb_dir = % your_pretrained_POS_embedding
feature = [ Cap ] emb_size = 20 emb_dir = % your_pretrained_Cap_embedding埋め込み前の機能はランダムに初期化されます。
NCRF ++は、完全にバッチされた計算を使用して実装されており、モデルトレーニングとデコードの両方で非常に効率的です。 GPU(NVIDIA GTX 1080)と大きなバッチサイズの助けを借りて、NCRF ++で構築されたLSTMCRFモデルは、トレーニングとデコードステータスでそれぞれ1000セント/sおよび2000セント/sに達することができます。

従来のCRF構造は、最大の確率(つまり、1ベスト出力)を持つ1つのラベルシーケンスのみを解読します。 NCRF ++は大きな選択肢を与えることができますが、上部n確率(つまりN-BEST出力)を持つnラベルシーケンスをデコードできます。 NBESTデコードは、いくつかの一般的な統計CRFフレームワークによってサポートされています。しかし、私たちの知る限り、NCRF ++は、神経CRFモデルのNBESTデコードをサポートする最初のツールキットです。
実装では、NBEST = 10の場合、NCRF ++に組み込まれたCHARCNN+wordlStm+CRFモデルは、CONLL 2003 NERタスクで97.47%Oracle F1-Value(F1 = 91.35%)を与えることができます(F1 = 91.35%)。

Coling 2018の論文で結果を再現するには、構成ファイルdemo.train.configでiteration=1をiteration=100として設定し、この構成ファイルでファイルディレクトリを構成する必要があります。デフォルトの構成ファイルは、 Char CNN + Word LSTM + CRFモデルについて説明します。それに応じて構成を変更することで独自のモデルを構築できます。このデモ構成ファイルのパラメーターは、私たちの論文で同じです。 ( Word CNN 、わずかに異なるパラメーターが必要であることに注意してください。詳細は私たちのコリングペーパーにあります。)
このフレームワークを新しいタスクまたはデータセットで使用する場合は、 @Victor0118によるチューニングのヒントを次に示します。
問題を報告したり、問題を尋ねたい場合は、必要に応じて次の資料を添付してください。これらの情報を使用すると、迅速かつ正確な議論と提案をすることができます。
log fileconfig filesample data 論文でNCRF ++を使用する場合は、ACLデモペーパーを引用してください。
@inproceedings{yang2018ncrf,
title={NCRF++: An Open-source Neural Sequence Labeling Toolkit},
author={Yang, Jie and Zhang, Yue},
booktitle={Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics},
Url = {http://aclweb.org/anthology/P18-4013},
year={2018}
}
実験の結果とNCRF ++の分析を使用する場合は、コリングペーパーを引用してください。
@inproceedings{yang2018design,
title={Design Challenges and Misconceptions in Neural Sequence Labeling},
author={Yang, Jie and Liang, Shuailong and Zhang, Yue},
booktitle={Proceedings of the 27th International Conference on Computational Linguistics (COLING)},
Url = {http://aclweb.org/anthology/C18-1327},
year={2018}
}