Torchnlp是用於NLP任務的深度學習庫。建立在Pytorch和torchtext上,是一種嘗試提供可重複使用的組件,這些組件可以跨任務起作用。當前,它可用於具有雙向LSTM CRF模型和變壓器網絡模型的命名實體識別(NER)和塊任務。它可以支持使用Conll 2003格式的任何數據集。更多任務將很快添加
Model類並實施forward()和loss()方法分別返回預測和損失HParams類輕鬆定義模型的超參數Evaluator和Trainer類以使用模型,數據集迭代器和指標。檢查ner.py以獲取詳細信息Model :處理型號的加載和節省以及相關的超參數HParams :定義超參數的通用類。可以持續Trainer :在數據集上培訓給定模型。支持預定義的學習率衰減時間表和提早停止等功能Evaluator :評估數據集和多個預定義或自定義指標上的模型。get_input_processor_words :在推理期間使用將輸入字符串快速轉換為可以通過模型處理的格式transformer.Encoder , transformer.Decoder :注意的是您需要的全部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數據集將數據集文件放在工作空間root的以下目錄結構中:
.data
|
|---conll2003
|
|---eng.train.txt
|---eng.testa.txt
|---eng.testb.txt
使用eng.testa.txt驗證數據集, eng.testb.txt用作測試數據集。
在設置導入的Python shell中啟動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
評估測試B數據集拆分上訓練的模型:
>>> 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對象。另請注意,默認情況下,它不會覆蓋任何現有的模型目錄(將改為重命名)。更改該行為設置PERFS變量:
>>> 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
請參閱源代碼中的評論以獲取有關使用情況的更多詳細信息