Torchnlp adalah perpustakaan pembelajaran yang mendalam untuk tugas -tugas NLP. Dibangun di atas Pytorch dan Torchtext, ini adalah upaya untuk menyediakan komponen yang dapat digunakan kembali yang bekerja di seluruh tugas. Saat ini dapat digunakan untuk Named Entity Recognition (NER) dan tugas -tugas chunking dengan model CRF LSTM dua arah dan model jaringan transformator. Ini dapat mendukung dataset apa pun yang menggunakan format CONLL 2003. Lebih banyak tugas akan ditambahkan segera
Model dan mengimplementasikan metode forward() dan loss() untuk mengembalikan prediksi dan kehilangan masing -masingHParams untuk dengan mudah mendefinisikan hyperparameters untuk modelEvaluator dan Trainer untuk menggunakan model, dataset iterator dan metrik. Periksa ner.py untuk detailnyaModel : Menangani pemuatan dan penghematan model serta hiperparameter terkaitHParams : Kelas generik untuk mendefinisikan hiperparameter. Bisa bertahanTrainer : Latih model yang diberikan pada dataset. Mendukung fitur seperti jadwal peluruhan tingkat pembelajaran yang telah ditentukan dan penghentian awalEvaluator : Mengevaluasi model pada dataset dan beberapa metrik yang telah ditentukan sebelumnya atau kustom.get_input_processor_words : Gunakan selama inferensi untuk dengan cepat mengonversi string input menjadi format yang dapat diproses dengan model transformer.Encoder , transformer.Decoder : Transfomer Network Implementasi dari perhatian adalah semua yang Anda butuhkanCRF : Lapisan bidang acak bersyarat yang dapat digunakan sebagai output akhirTransformerTagger : Model penandaan urutan diimplementasikan menggunakan jaringan transformator dan CRFBiLSTMTagger : Model penandaan urutan diimplementasikan menggunakan BIDIRECTIONAL LSTMS dan CRF Torchnlp membutuhkan minimum Python 3.5 dan Pytorch 0.4.0 untuk berjalan. Periksa Pytorch untuk langkah -langkah instalasi. Klon Repositori ini dan instal dependensi lain seperti TorchText:
pip install -r requirements.txt
Pergi ke akar proyek dan periksa integritas dengan Pytest:
pytest
Instal proyek ini:
python setup.py
Torchnlp dirancang untuk digunakan di dalam interpreter Python untuk membuatnya lebih mudah untuk bereksperimen tanpa mengetik argumen baris perintah yang rumit.
Tugas ner
Tugas NER dapat dijalankan pada dataset apa pun yang mengkonfirmasi ke format CONLL 2003. Untuk menggunakan dataset NER CONLL 2003, tempatkan file dataset dalam struktur direktori berikut dalam root ruang kerja Anda:
.data
|
|---conll2003
|
|---eng.train.txt
|---eng.testa.txt
|---eng.testb.txt
eng.testa.txt digunakan Dataset Validasi dan eng.testb.txt digunakan sebagai dataset uji.
Mulai modul NER di shell python yang mengatur impor:
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)
>>>
Latih model transformator pada dataset CONLL 2003:
>>> train('ner-conll2003', TransformerTagger, conll2003)
Argumen pertama adalah nama tugas. Anda perlu menggunakan nama tugas yang sama selama evaluasi dan inferensi. Secara default fungsi kereta akan menggunakan metrik F1 dengan jendela 5 zaman untuk melakukan pemberhentian awal. Untuk mengubah kriteria penghentian awal, atur variabel global PREFS sebagai berikut:
>>> PREFS.early_stopping='lowest_3_loss'
Ini sekarang akan menggunakan kehilangan validasi sebagai kriteria penghentian dengan jendela 3 zaman. File model disimpan di bawah direktori TaskName-Modelname . Dalam hal ini adalah ner-conll2003-transformergagger
Evaluasi model terlatih pada dataset testb split:
>>> evaluate('ner-conll2003', TransformerTagger, conll2003, 'test')
Ini akan menampilkan metrik seperti akurasi, akurasi urutan, f1 dll
Jalankan model terlatih secara interaktif untuk tugas NER:
>>> interactive('ner-conll2003', TransformerTagger)
...
Ctrl+C to quit
> Tom went to New York
I-PER O O I-LOC I-LOC
Anda juga dapat melatih model CRF LSTM dua arah dengan menggunakan kelas BiLSTMTagger . Menyesuaikan hyperparameters cukup lurus ke depan. Mari kita lihat hyperparameters untuk 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
Sekarang mari kita nonaktifkan lapisan 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
Gunakan untuk melatih kembali model:
>>> train('ner-conll2003-nocrf', TransformerTagger, conll2003, hparams=h2)
Seiring dengan model hyperparameters juga disimpan sehingga tidak perlu melewati objek HParams selama evaluasi. Juga perhatikan bahwa secara default tidak akan menimpa direktori model yang ada (akan mengganti nama sebagai gantinya). Untuk mengubah perilaku itu, atur variabel prefs:
>>> PREFS.overwrite_model_dir = True
Variabel PREFS secara otomatis bertahan di prefs.json
Tugas chunking
Dataset Conll 2000 tersedia untuk tugas chunking. Dataset secara otomatis diunduh dari repositori publik sehingga Anda tidak perlu mengunduhnya secara manual.
Mulai tugas chunking:
python -i -m torchnlp.chunk
Latih model transformator:
>>> train('chunk-conll2000', TransformerTagger, conll2000)
Tidak ada partisi validasi yang disediakan dalam repositori sehingga 10% dari set pelatihan digunakan untuk validasi.
Evaluasi model pada set tes:
>>> evaluate('chunk-conll2000', TransformerTagger, conll2000, 'test')
Modul transformer.Encoder , transformer.Decoder dan CRF dapat diimpor secara independen karena mereka hanya bergantung pada Pytorch:
from torchnlp.modules.transformer import Encoder
from torchnlp.modules.transformer import Decoder
from torchnlp.modules.crf import CRF
Silakan merujuk ke komentar dalam kode sumber untuk detail lebih lanjut tentang penggunaan