Torchnlp เป็นห้องสมุดการเรียนรู้อย่างลึกซึ้งสำหรับงาน NLP สร้างขึ้นบน Pytorch และ Torchtext มันเป็นความพยายามที่จะจัดหาส่วนประกอบที่นำกลับมาใช้ใหม่ได้ซึ่งทำงานได้ในงาน ขณะนี้สามารถใช้สำหรับการจดจำเอนทิตีที่มีชื่อ (NER) และงาน chunking กับโมเดล LSTM CRF แบบสองทิศทางและโมเดลเครือข่ายหม้อแปลง สามารถรองรับชุดข้อมูลใด ๆ ที่ใช้รูปแบบ Conll 2003 จะมีการเพิ่มงานเพิ่มเติมในไม่ช้า
Model และใช้วิธี forward() และ loss() เพื่อส่งคืนการคาดการณ์และการสูญเสียตามลำดับHParams เพื่อกำหนดพารามิเตอร์ hyperparameters สำหรับรุ่นได้อย่างง่ายดายEvaluator และ Trainer เพื่อใช้แบบจำลองชุดข้อมูลและตัวชี้วัด ตรวจสอบ ner.py สำหรับรายละเอียดModel : จัดการการโหลดและการประหยัดของรุ่นเช่นเดียวกับพารามิเตอร์ที่เกี่ยวข้องHParams : คลาสทั่วไปเพื่อกำหนดพารามิเตอร์ hyperparameters สามารถคงอยู่ได้Trainer : ฝึกอบรมโมเดลที่กำหนดในชุดข้อมูล สนับสนุนคุณสมบัติเช่นตารางการสลายตัวของอัตราการเรียนรู้ที่กำหนดไว้ล่วงหน้าและการหยุดเร็วEvaluator : ประเมินโมเดลบนชุดข้อมูลและตัวชี้วัดที่กำหนดไว้ล่วงหน้าหรือกำหนดเองหลายตัวget_input_processor_words : ใช้ระหว่างการอนุมานเพื่อแปลงสตริงอินพุตเป็นรูปแบบที่สามารถประมวลผลได้อย่างรวดเร็ว transformer.Encoder , transformer.Decoder : การใช้งานเครือข่าย transfomer จากความสนใจเป็นสิ่งที่คุณต้องการCRF : เลเยอร์ฟิลด์แบบสุ่มแบบมีเงื่อนไขซึ่งสามารถใช้เป็นเอาต์พุตสุดท้ายTransformerTagger : โมเดลการติดแท็กลำดับที่ใช้งานโดยใช้เครือข่าย Transformer และ CRFBiLSTMTagger : โมเดลการติดแท็กลำดับที่ใช้โดยใช้ LSTM แบบสองทิศทางและ CRF Torchnlp ต้องใช้ Python 3.5 และ Pytorch อย่างน้อย 0.4.0 ในการทำงาน ตรวจสอบ Pytorch สำหรับขั้นตอนการติดตั้ง โคลนที่เก็บนี้และติดตั้งการพึ่งพาอื่น ๆ เช่น Torchtext:
pip install -r requirements.txt
ไปที่รากของโครงการและตรวจสอบความสมบูรณ์ด้วย pytest:
pytest
ติดตั้งโครงการนี้:
python setup.py
Torchnlp ได้รับการออกแบบให้ใช้ภายใน Python Interpreter เพื่อให้ง่ายต่อการทดลองโดยไม่ต้องพิมพ์อาร์กิวเมนต์บรรทัดคำสั่งที่ยุ่งยาก
งาน ner
งาน NER สามารถเรียกใช้ในชุดข้อมูลใด ๆ ที่ยืนยันในรูปแบบ Conll 2003 หากต้องการใช้ชุดข้อมูล Conll 2003 NER ให้วางไฟล์ชุดข้อมูลในโครงสร้างไดเรกทอรีต่อไปนี้ภายในรูทเวิร์กสเปซของคุณ:
.data
|
|---conll2003
|
|---eng.train.txt
|---eng.testa.txt
|---eng.testb.txt
eng.testa.txt ใช้ชุดข้อมูลการตรวจสอบความถูกต้องและ eng.testb.txt ใช้เป็นชุดข้อมูลทดสอบ
เริ่มโมดูล NER ในเชลล์ Python ซึ่งตั้งค่าการนำเข้า:
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)
อาร์กิวเมนต์แรกคือชื่องาน คุณต้องใช้ชื่องานเดียวกันในระหว่างการประเมินผลและการอนุมาน โดยค่าเริ่มต้นฟังก์ชั่นรถไฟจะใช้ตัวชี้วัด F1 กับหน้าต่าง 5 Epochs เพื่อทำการหยุดเร็ว หากต้องการเปลี่ยนเกณฑ์การหยุดก่อนกำหนดให้ตั้งค่าตัวแปรระดับโลก 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
คุณสามารถฝึกอบรมแบบจำลอง LSTM CRF แบบสองทิศทางโดยใช้คลาส BiLSTMTagger การปรับแต่งพารามิเตอร์ hyperparameters ค่อนข้างตรงไปตรงมา มาดู Hyperparameters สำหรับ 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)
พร้อมกับแบบจำลองแล้วพารามิเตอร์ hyperparameters ก็จะถูกบันทึกไว้ดังนั้นจึงไม่จำเป็นต้องผ่านวัตถุ HParams ในระหว่างการประเมินผล โปรดทราบว่าโดยค่าเริ่มต้นจะไม่เขียนทับไดเรกทอรีโมเดลที่มีอยู่ (จะเปลี่ยนชื่อแทน) เพื่อเปลี่ยนพฤติกรรมนั้นตั้งค่าตัวแปร prefs:
>>> PREFS.overwrite_model_dir = True
ตัวแปร PREFS จะคงอยู่โดยอัตโนมัติใน prefs.json
งาน chunking
ชุดข้อมูล Conll 2000 มีให้สำหรับงาน chunking ชุดข้อมูลจะถูกดาวน์โหลดโดยอัตโนมัติจากที่เก็บสาธารณะดังนั้นคุณไม่จำเป็นต้องดาวน์โหลดด้วยตนเอง
เริ่มงาน chunking:
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
โปรดดูความคิดเห็นภายในซอร์สโค้ดสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งาน