TOCHNLP - это библиотека глубокого обучения для задач NLP. Построенный на питорхе и Torchtext, это попытка предоставить многоразовые компоненты, которые работают по задачам. В настоящее время его можно использовать для задач распознавания объектов (NER) и Chunking с двунаправленной моделью CRF LSTM и моделью сети трансформатор. Он может поддерживать любой набор данных, который использует формат Conll 2003. Вскоре будет добавлено больше задач
Model и реализовать методы forward() и loss() для возврата прогнозов и потерь соответственноHParams , чтобы легко определить гиперпараметры для моделиEvaluator и Trainer , чтобы использовать модель, итераторы набора данных и метрики. Проверьте NER.PY для получения подробной информацииModel : обрабатывает загрузку и сохранение моделей, а также связанных гиперпараметровHParams : общий класс для определения гиперпараметров. Может быть упорноTrainer : Тренируйте данную модель на наборе данных. Поддерживает такие функции, как предопределенные графики распада скорости обучения и ранняя остановкаEvaluator : оценивает модель на наборе данных и несколько предопределенных или пользовательских метрик.get_input_processor_words : используйте во время вывода, чтобы быстро преобразовать входные строки в формат, который можно обработать с помощью модели transformer.Encoder , transformer.Decoder : реализация трансфмера сети от внимания - это все, что вам нужноCRF : условный случайный слой поля, который можно использовать в качестве конечного результатаTransformerTagger : модель тега последовательности реализована с использованием сети трансформатора и CRFBiLSTMTagger : модель тега последовательности, реализованная с использованием двунаправленных LSTM и CRF TOCHNLP требует минимума Python 3.5 и Pytorch 0.4.0 для работы. Проверьте Pytorch на шаги установки. Клонировать этот репозиторий и установить другие зависимости, такие как Torchtext:
pip install -r requirements.txt
Перейдите к корню проекта и проверьте честность с Pytest:
pytest
Установите этот проект:
python setup.py
TOCHNLP предназначен для использования внутри интерпретатора 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 набора данных.
Запустите модуль 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 эпох для ранней остановки. Чтобы изменить критерии ранней остановки, установили глобальную переменную PREFS следующим образом:
>>> PREFS.early_stopping='lowest_3_loss'
Теперь это будет использовать потерю проверки в качестве критериев остановки с окном из 3 эпох. Файлы модели сохраняются в каталоге TaskName-ModelName . В этом случае это ner-conll2003-transformertggger
Оцените обученную модель на разделении набора данных 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
Аналогичным образом вы можете обучить модель CRF двунаправленной CRF, используя класс BiLSTMTagger . Настройка гиперпараметров довольно проста. Давайте посмотрим на гиперпараметры для 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 доступен для задачи 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
Пожалуйста, обратитесь к комментариям в исходном коде для получения более подробной информации об использовании