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 : Transformer Network 및 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 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)
첫 번째 인수는 작업 이름입니다. 평가 및 추론 중에 동일한 작업 이름을 사용해야합니다. 기본적으로 열차 기능은 F1 메트릭을 5 개의 에포크로 사용하여 조기 정지를 수행합니다. 초기 중지 기준을 변경하려면 PREFS Global 변수를 다음과 같이 설정하십시오.
>>> 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
사용법에 대한 자세한 내용은 소스 코드의 주석을 참조하십시오.