Torchnlpは、NLPタスクの深い学習ライブラリです。 PytorchとTorchtextに基づいて構築されたこの試みは、タスク全体で機能する再利用可能なコンポーネントを提供する試みです。現在、名前付きエンティティ認識(NER)および双方向LSTM CRFモデルとトランスネットワークモデルを備えたチャンクタスクに使用できます。 Conll 2003形式を使用する任意のデータセットをサポートできます。より多くのタスクがまもなく追加されます
Modelクラスを拡張し、それぞれ予測と損失を返すために、 forward()およびloss()メソッドを実装しますHParamsクラスを使用して、モデルのハイパーパラメーターを簡単に定義しますEvaluatorクラスとTrainerクラスをセットアップして、モデル、データセットのイテレーター、メトリックを使用します。詳細については、ner.pyを確認してくださいModel :モデルの読み込みと保存、および関連するハイパーパラメーターを処理するHParams :ハイパーパラメーターを定義する一般的なクラス。持続することができますTrainer :データセットで特定のモデルをトレーニングします。事前定義された学習率の減衰スケジュールや早期停止などの機能をサポートしますEvaluator :データセットおよび複数の事前定義またはカスタムメトリック上のモデルを評価します。get_input_processor_words :推論中に使用して、入力文字列を迅速にモデルで処理できる形式に迅速に変換しますtransformer.Encoder 、 transformer.Decoder :Transfomer Networkの実装からの実装が必要ですCRF :最終出力として使用できる条件付きランダムフィールドレイヤーTransformerTagger :トランスネットワークとCRFを使用して実装されたシーケンスタグ付けモデルBiLSTMTagger :双方向LSTMとCRFを使用して実装されたシーケンスタグ付けモデルTorchnlpは、実行するには最低Python 3.5とPytorch 0.4.0が必要です。インストール手順については、Pytorchを確認してください。このリポジトリをクローンし、torchtextのような他の依存関係をインストールします。
pip install -r requirements.txt
プロジェクトのルートに移動し、pytestとの完全性を確認してください。
pytest
このプロジェクトをインストールしてください:
python setup.py
Torchnlpは、Pythonインタープリター内で使用して、面倒なコマンドライン引数を入力せずに実験しやすくするように設計されています。
nerタスク
NERタスクは、Conll 2003形式を確認する任意のデータセットで実行できます。 conll 2003 nerデータセットを使用するには、ワークスペースルート内の次のディレクトリ構造にデータセットファイルを配置します。
.data
|
|---conll2003
|
|---eng.train.txt
|---eng.testa.txt
|---eng.testb.txt
eng.testa.txtが使用され、検証データセットとeng.testb.txtテストデータセットとして使用されます。
インポートをセットアップするPythonシェルでNERモジュールを開始します。
python -i -m torchnlp.ner
Task: Named Entity Recognition
Available models:
-------------------
TransformerTagger
Sequence tagger using the Transformer network (https://arxiv.org/pdf/1706.03762.pdf)
Specifically it uses the Encoder module. For character embeddings (per word) it uses
the same Encoder module above which an additive (Bahdanau) self-attention layer is added
BiLSTMTagger
Sequence tagger using bidirectional LSTM. For character embeddings per word
uses (unidirectional) LSTM
Available datasets:
-------------------
conll2003: Conll 2003 (Parser only. You must place the files)
>>>
CONLL 2003データセットでトランスモデルをトレーニングします。
>>> train('ner-conll2003', TransformerTagger, conll2003)
最初の引数はタスク名です。評価と推論中に同じタスク名を使用する必要があります。デフォルトでは、列車機能は、5つのエポックのウィンドウを持つF1メトリックを使用して、早期停止を実行します。早期の停止基準を変更するには、次のようにPREFSグローバル変数を設定します。
>>> PREFS.early_stopping='lowest_3_loss'
これにより、3つのエポックのウィンドウを持つ停止基準として検証損失が使用されます。モデルファイルは、taskname-modelnameディレクトリの下に保存されます。この場合、それはNER-CONLL2003-TRANSFORMERTAGGERです
testBデータセット分割でトレーニングされたモデルを評価します。
>>> evaluate('ner-conll2003', TransformerTagger, conll2003, 'test')
精度、シーケンスの精度、F1などのメトリックを表示します
NERタスクのためにトレーニングされたモデルをインタラクティブに実行します。
>>> interactive('ner-conll2003', TransformerTagger)
...
Ctrl+C to quit
> Tom went to New York
I-PER O O I-LOC I-LOC
同様に、 BiLSTMTaggerクラスを使用して、双方向LSTM CRFモデルをトレーニングできます。ハイパーパラメーターのカスタマイズは非常に簡単です。 TransformerTaggerのハイパーパラメーターを見てみましょう。
>>> h2 = hparams_transformer_ner()
>>> h2
Hyperparameters:
filter_size=128
optimizer_adam_beta2=0.98
learning_rate=0.2
learning_rate_warmup_steps=500
input_dropout=0.2
embedding_size_char=16
dropout=0.2
hidden_size=128
optimizer_adam_beta1=0.9
embedding_size_word=300
max_length=256
attention_dropout=0.2
relu_dropout=0.2
batch_size=100
num_hidden_layers=1
attention_value_channels=0
attention_key_channels=0
use_crf=True
embedding_size_tags=100
learning_rate_decay=noam_step
embedding_size_char_per_word=100
num_heads=4
filter_size_char=64
次に、CRFレイヤーを無効にしましょう。
>>> h2.update(use_crf=False)
Hyperparameters:
filter_size=128
optimizer_adam_beta2=0.98
learning_rate=0.2
learning_rate_warmup_steps=500
input_dropout=0.2
embedding_size_char=16
dropout=0.2
hidden_size=128
optimizer_adam_beta1=0.9
embedding_size_word=300
max_length=256
attention_dropout=0.2
relu_dropout=0.2
batch_size=100
num_hidden_layers=1
attention_value_channels=0
attention_key_channels=0
use_crf=False
embedding_size_tags=100
learning_rate_decay=noam_step
embedding_size_char_per_word=100
num_heads=4
filter_size_char=64
それを使用してモデルを再訓練します。
>>> train('ner-conll2003-nocrf', TransformerTagger, conll2003, hparams=h2)
モデルに加えて、ハイパーパラメーターも保存されるため、評価中にHParamsオブジェクトを渡す必要はありません。また、デフォルトでは、既存のモデルディレクトリを上書きしないことに注意してください(代わりに名前を変更します)。その動作を変更するには、prefs変数を設定します。
>>> PREFS.overwrite_model_dir = True
PREFS変数は、 prefs.jsonで自動的に持続します
チャンキングタスク
Conll 2000データセットは、チャンキングタスクに利用できます。データセットは公開リポジトリから自動的にダウンロードされるため、手動でダウンロードする必要はありません。
チャンキングタスクを開始します:
python -i -m torchnlp.chunk
トランスモデルをトレーニングします:
>>> train('chunk-conll2000', TransformerTagger, conll2000)
リポジトリには検証パーティションが提供されていないため、トレーニングセットの10%が検証に使用されます。
テストセットでモデルを評価します。
>>> evaluate('chunk-conll2000', TransformerTagger, conll2000, 'test')
transformer.Encoder 、 transformer.Decoder 、およびCRFモジュールは、Pytorchのみに依存するため、独立してインポートできます。
from torchnlp.modules.transformer import Encoder
from torchnlp.modules.transformer import Decoder
from torchnlp.modules.crf import CRF
使用法の詳細については、ソースコード内のコメントを参照してください