Мы разрабатываем этот проект для помечения задач, которые NLPER всегда встречается.
Используйте XLnet для выполнения задач
Тревога, эти коды еще не закончены. Будьте осторожны в использовании.
Например, запустите Scipts, используя:
python2.7 /home/dev/Documents/xlnet-master/run_blstm_crf-run_race.py
--use_tpu
--model_config_path /home/dev/Documents/xlnet_models/xlnet_cased_L-12_H-768_A-12/xlnet_config.json
--spiece_model_file /home/dev/Documents/xlnet_models/xlnet_cased_L-12_H-768_A-12/spiece.model
--model_dir /home/dev/Documents/xlnet_models/finetuned/
--data_dir /home/dev/Documents/udify-master/data/ud/xlnet_data/
--do_train True
--save_steps 2
--output_dir /home/dev/Documents/xlnet_models/output_dir https://universaldependencies.org/
Вы можете использовать «Найти ./ -name *test/dev/train.conll», чтобы найти все файлы conll и использовать Xargs для копирования их в data_dir
https://github.com/yuchenlin/ontonotes-5.0-ner-bio
Просто скопируйте английские файлы в data_dir, используя файл скрипта Python: onotonotes_conll_copyfile.py (вам может потребоваться изменить пути)
PR S приветствуются! Пожалуйста, помогите разработчивому проекту, чтобы улучшить нашу мощность НЛП!
XLnet - это новый метод обучения языковым представлениям, основанный на неконтролируемом языке, основанный на новой целевой задаче моделирования языка перестановки. Кроме того, XLnet использует Transformer-XL в качестве модели магистра, демонстрируя отличную производительность для языковых задач, включающих длинный контекст. В целом, XLnet достигает самых современных результатов (SOTA) по различным языковым задачам, включая ответ на вопросы, вывод естественного языка, анализ настроений и рейтинг документов.
Для получения подробного описания технических деталей и экспериментальных результатов, пожалуйста, обратитесь к нашей статье:
XLnet: генерализованная авторегрессивная предварительная подготовка для понимания языка
Zhilin Yang*, Zihang Dai*, Yiming Yang, Haime Carbonell, Ruslan Salakhutdinov, Quoc V. le
(*: Равный вклад)
Препринт 2019
По состоянию на 19 июня 2019 года XLnet превосходит Bert по 20 задачам и достигает самых современных результатов по 18 задачам. Ниже приведено некоторое сравнение между XLnet-Large и Bert-Large, которые имеют аналогичные размеры модели:
| Модель | Точность расы | Squad1.1 Em | Squad2.0 Em |
|---|---|---|---|
| Берт-широкий | 72,0 | 84.1 | 78.98 |
| Xlnet-base | 80.18 | ||
| XLnet-Large | 81.75 | 88,95 | 86.12 |
Мы используем Squad Dev приводит к тому, что таблица для исключения других факторов, таких как использование дополнительных учебных данных или других методов увеличения данных. Смотрите таблицу лидеров отряда для тестовых номеров.
| Модель | IMDB | Yelp-2 | Yelp-5 | Dbpedia | Amazon-2 | Amazon-5 |
|---|---|---|---|---|---|---|
| Берт-широкий | 4.51 | 1.89 | 29,32 | 0,64 | 2.63 | 34.17 |
| XLnet-Large | 3.79 | 1,55 | 27,80 | 0,62 | 2.40 | 32.26 |
Вышеуказанные номера являются частотой ошибок.
| Модель | Mnli | Qnli | QQP | Rte | SST-2 | MRPC | Кола | STS-B |
|---|---|---|---|---|---|---|---|---|
| Берт-широкий | 86.6 | 92.3 | 91.3 | 70.4 | 93.2 | 88.0 | 60.6 | 90.0 |
| Xlnet-base | 86.8 | 91.7 | 91.4 | 74.0 | 94,7 | 88.2 | 60.2 | 89,5 |
| XLnet-Large | 89,8 | 93,9 | 91.8 | 83,8 | 95,6 | 89,2 | 63,6 | 91.8 |
Мы используем одно задание DEV, результаты в таблице, чтобы исключить другие факторы, такие как многозадачное обучение или использование ансамблей.
По состоянию на 16 июля 2019 года были предоставлены следующие модели:
XLNet-Large, Cased : 24-слойный, 1024-скрытый, 16 головXLNet-Base, Cased : 12-слойный, 768 скрытый, 12 голов. Эта модель обучена полным данным (отличается от той, что в статье).На данный момент мы только выпускаем модели Cassed, потому что в заданиях мы рассмотрим, мы обнаружили: (1) для базовых настройки, модели SACED и UNCADE имеют аналогичные характеристики; (2) Для больших настройки модели LACE немного лучше в некоторых задачах.
Каждый файл .zip содержит три элемента:
xlnet_model.ckpt ), содержащая предварительно обученные веса (что на самом деле 3 файла).spiece.model ), используемая для (DE) токенизации.xlnet_config.json ), который указывает гиперпараметры модели.Мы также планируем постоянно выпускать более предварительно предварительно проведенные модели в различных настройках, включая:
Чтобы получить уведомления об обновлениях, объявлениях и новых выпусках, мы рекомендуем подписаться на XLnet в группах Google.
По состоянию на 19 июня 2019 года эта база кода была протестирована с Tensorflow 1.13.1 под Python2.
XLNet-Large приводит к тому, что в статье с использованием графических процессоров с 12 ГБ-16 ГБ оперативной памяти, поскольку графический процессор 16 ГБ способен удерживать только одну последовательность с длиной 512 для XLNet-Large . Следовательно, большое количество (в диапазоне от 32 до 128, равное batch_size ) GPU, необходимо для воспроизведения многих результатов в статье. Учитывая проблему памяти, упомянутая выше, используя скрипты по умолчанию по умолчанию ( run_classifier.py и run_squad.py ), мы оценивали максимальный размер партии на одном графическом процессоре 16 ГБ с Tensorflow 1.13.1 :
| Система | Длина SEQ | Максимальный размер партии |
|---|---|---|
XLNet-Base | 64 | 120 |
| ... | 128 | 56 |
| ... | 256 | 24 |
| ... | 512 | 8 |
XLNet-Large | 64 | 16 |
| ... | 128 | 8 |
| ... | 256 | 2 |
| ... | 512 | 1 |
В большинстве случаев можно уменьшить размеры пакета train_batch_size или максимальную длину последовательности max_seq_length , чтобы соответствовать данному аппаратному обеспечению. Снижение производительности зависит от задачи и доступных ресурсов.
Код, используемый для выполнения классификации/регрессионного процесса, находится в run_classifier.py . Он также содержит примеры для стандартной классификации в один закусок, регрессии с одним документом и классификации пары документов. Здесь мы приводим два конкретных примера того, как можно использовать run_classifier.py .
С этого момента мы предполагаем, что XLnet-Large и Xlnet-Base были загружены на $LARGE_DIR и $BASE_DIR соответственно.
Загрузите данные клей, запустив этот скрипт и распакуйте его в какой -то каталог $GLUE_DIR .
Выполнить многопользовательское (4 V100-графические процессоры) с XLnet-Large, работая
CUDA_VISIBLE_DEVICES=0,1,2,3 python run_classifier.py
--do_train=True
--do_eval=False
--task_name=sts-b
--data_dir= ${GLUE_DIR} /STS-B
--output_dir=proc_data/sts-b
--model_dir=exp/sts-b
--uncased=False
--spiece_model_file= ${LARGE_DIR} /spiece.model
--model_config_path= ${LARGE_DIR} /xlnet_config.json
--init_checkpoint= ${LARGE_DIR} /xlnet_model.ckpt
--max_seq_length=128
--train_batch_size=8
--num_hosts=1
--num_core_per_host=4
--learning_rate=5e-5
--train_steps=1200
--warmup_steps=120
--save_steps=600
--is_regression=TrueОценить результаты создания с одним графическим процессором
CUDA_VISIBLE_DEVICES=0 python run_classifier.py
--do_train=False
--do_eval=True
--task_name=sts-b
--data_dir= ${GLUE_DIR} /STS-B
--output_dir=proc_data/sts-b
--model_dir=exp/sts-b
--uncased=False
--spiece_model_file= ${LARGE_DIR} /spiece.model
--model_config_path= ${LARGE_DIR} /xlnet_config.json
--max_seq_length=128
--eval_batch_size=8
--num_hosts=1
--num_core_per_host=1
--eval_all_ckpt=True
--is_regression=True
# Expected performance: "eval_pearsonr 0.916+ "Примечания :
num_core_per_host обозначает количество графических процессоров для использования.train_batch_size относится к размеру партии за GPU.eval_all_ckpt позволяет оценивать все сохраненные контрольные точки (частота сохранения контролируется с помощью save_steps ) после обучения отделки и выбирать лучшую модель, основанную на производительности DEV.data_dir и output_dir относятся к каталогам «необработанных данных» и «предварительно обработанных tfrecords» соответственно, в то время как model_dir является рабочим каталогом для сохранения контрольных точек и событий Tensorflow. model_dir должна быть установлена в виде отдельной папки в init_checkpoint .--train_batch_size=32 и --num_core_per_host=1 вместе с изменениями в init_checkpoint и model_config_path .train_batch_size и увеличьте num_core_per_host , чтобы использовать ту же настройку обучения.Скачать и распаковать набор данных IMDB, запустив
wget http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz
tar zxvf aclImdb_v1.tar.gzЗапустите экземпляр Google Cloud TPU V3-8 (см. Учебное пособие Google Cloud TPU для того, как настроить Cloud TPU).
Установите свой путь ведра Google Storage $GS_ROOT и переместите набор данных IMDB и предварительную контрольную точку в ваше хранилище Google.
Выполните TPU PeneTuning с XLnet-Large, работая
python run_classifier.py
--use_tpu=True
--tpu= ${TPU_NAME}
--do_train=True
--do_eval=True
--eval_all_ckpt=True
--task_name=imdb
--data_dir= ${IMDB_DIR}
--output_dir= ${GS_ROOT} /proc_data/imdb
--model_dir= ${GS_ROOT} /exp/imdb
--uncased=False
--spiece_model_file= ${LARGE_DIR} /spiece.model
--model_config_path= ${GS_ROOT} / ${LARGE_DIR} /model_config.json
--init_checkpoint= ${GS_ROOT} / ${LARGE_DIR} /xlnet_model.ckpt
--max_seq_length=512
--train_batch_size=32
--eval_batch_size=8
--num_hosts=1
--num_core_per_host=8
--learning_rate=2e-5
--train_steps=4000
--warmup_steps=500
--save_steps=500
--iterations=500
# Expected performance: "eval_accuracy 0.962+ "Примечания :
data_dir и spiece_model_file используют локальный путь, а не путь Google. Причина в том, что предварительная обработка данных фактически выполняется локально. Следовательно, использование локальных путей приводит к более высокой скорости предварительной обработки. Код для набора данных команды включен в run_squad.py .
Чтобы запустить код:
(1) Загрузите набор данных Squad2.0 в $SQUAD_DIR by:
mkdir -p ${SQUAD_DIR} && cd ${SQUAD_DIR}
wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json
wget https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json (2) Выполните предварительную обработку данных, используя scripts/prepro_squad.sh .
Это займет довольно много времени, чтобы точно отобразить позиции символов (необработанные данные) на позиции предложения (используемые для обучения).
Для быстрой параллельной предварительной обработки, пожалуйста, обратитесь к флагам --num_proc и --proc_id в run_squad.py .
(3) выполнять обучение и оценку.
Для наилучшей производительности XLnet-Large использует длину последовательности 512 и размер партии 48 для обучения.
В результате воспроизведение наилучшего результата с помощью графических процессоров довольно сложно.
Для обучения с одним TPU V3-8 можно просто запустить scripts/tpu_squad_large.sh после установки как TPU, так и Google Storage.
run_squad.py автоматически выполнит пороговый поиск в наборе команды DEV и выведет счет. Со scripts/tpu_squad_large.sh ожидаемый балл F1 должен составлять около 88,6 (медиана наших множественных пробежек).
В качестве альтернативы можно использовать xlnet-базу с графическими процессорами (например, три v100). Один набор разумных гиперпараметров можно найти в scripts/gpu_squad_base.sh .
Код для гонки задачи по пониманию прочитанного включен в run_race.py .
Чтобы запустить код:
(1) Загрузите набор данных гонки с официального веб -сайта и распакуйте необработанные данные до $RACE_DIR .
(2) выполнять обучение и оценку:
script/tpu_race_large_bsz32.sh для этого настройки.script/tpu_race_large_bsz8.sh ).Был предоставлен пример использования Google Colab с графическими процессорами. Обратите внимание, что, поскольку оборудование ограничено в примере, результаты хуже, чем лучшее, что мы можем получить. В основном он служит примером и должен быть изменен соответственно, чтобы максимизировать производительность.
Для создания вполне вероятно, что вы сможете изменить существующие файлы, такие как run_classifier.py , run_squad.py и run_race.py для вашей задачи под рукой. Тем не менее, мы также предоставляем абстракцию XLnet, чтобы обеспечить более гибкое использование. Ниже приведен пример:
import xlnet
# some code omitted here...
# initialize FLAGS
# initialize instances of tf.Tensor, including input_ids, seg_ids, and input_mask
# XLNetConfig contains hyperparameters that are specific to a model checkpoint.
xlnet_config = xlnet . XLNetConfig ( json_path = FLAGS . model_config_path )
# RunConfig contains hyperparameters that could be different between pretraining and finetuning.
run_config = xlnet . create_run_config ( is_training = True , is_finetune = True , FLAGS = FLAGS )
# Construct an XLNet model
xlnet_model = xlnet . XLNetModel (
xlnet_config = xlnet_config ,
run_config = run_config ,
input_ids = input_ids ,
seg_ids = seg_ids ,
input_mask = input_mask )
# Get a summary of the sequence using the last hidden state
summary = xlnet_model . get_pooled_out ( summary_type = "last" )
# Get a sequence output
seq_out = xlnet_model . get_sequence_output ()
# build your applications based on `summary` or `seq_out`Ниже приведен пример выполнения токенизации в XLnet:
import sentencepiece as spm
from prepro_utils import preprocess_text , encode_ids
# some code omitted here...
# initialize FLAGS
text = "An input text string."
sp_model = spm . SentencePieceProcessor ()
sp_model . Load ( FLAGS . spiece_model_file )
text = preprocess_text ( text , lower = FLAGS . uncased )
ids = encode_ids ( sp_model , text ) где FLAGS.spiece_model_file - это файл модели предложения в том же молнии, что и предварительно предварительно проведенная модель, FLAGS.uncased - это лопатка, указывающая, выполнять ли непревзойденные.
Обратитесь к train.py для предварительной подготовки на tpus и train_gpu.py для предварительной подготовки на графических процессорах. Сначала нам нужно предварительно обработать текстовые данные в tfrecords.
python data_utils.py
--bsz_per_host=32
--num_core_per_host=16
--seq_len=512
--reuse_len=256
--input_glob= * .txt
--save_dir= ${SAVE_DIR}
--num_passes=20
--bi_data=True
--sp_path=spiece.model
--mask_alpha=6
--mask_beta=1
--num_predict=85 Где input_glob определяет все текстовые файлы ввода, save_dir является выходным каталогом для tfrecords, а sp_path - модель предложения. Вот наш сценарий для обучения модели предложения
spm_train
--input= $INPUT
--model_prefix=sp10m.cased.v3
--vocab_size=32000
--character_coverage=0.99995
--model_type=unigram
--control_symbols= < cls > , < sep > , < pad > , < mask > , < eod >
--user_defined_symbols= < eop > ,.,(,), " ,-,–,£,€
--shuffle_input_sentence
--input_sentence_size=10000000 Используются специальные символы, включая control_symbols и user_defined_symbols . Мы используем <eop> и <eod> для обозначения конца абзаца и конца документа соответственно.
Входные текстовые файлы в data_utils.py должны использовать следующий формат:
<eop> может быть вставлен в конце определенных строк (без какого -либо места), чтобы указать, что соответствующее предложение заканчивается абзацем.Например, входной файл текста может быть:
This is the first sentence.
This is the second sentence and also the end of the paragraph.<eop>
Another paragraph.
Another document starts here.
После предварительной обработки мы готовы предварительно обработать XLnet. Ниже приведены гиперпараметры, используемые для предварительной подготовки XLnet-Large:
python train.py
--record_info_dir= $DATA /tfrecords
--train_batch_size=2048
--seq_len=512
--reuse_len=256
--mem_len=384
--perm_size=256
--n_layer=24
--d_model=1024
--d_embed=1024
--n_head=16
--d_head=64
--d_inner=4096
--untie_r=True
--mask_alpha=6
--mask_beta=1
--num_predict=85где мы перечисляем только наиболее важные флаги, а другие флаги могут быть скорректированы на основе конкретных вариантов использования.