NLP для человека. Быстрый и простой в использовании инструментарий для обработки естественного языка (NLP), удовлетворяя ваше воображение о НЛП.
→ английская версия

Основное введение • Установка • Руководство по началу работы • Подробный учебник • Награды • Как внести свой вклад • Цитаты • Благодарности
Fancy-NLP -это текстовый инструмент для добычи знаний для создания портретов продукта, созданных командой Tencent по рекламе продуктов. Он поддерживает множество общих задач NLP, таких как извлечение сущности, классификация текста и сопоставление сходства текста. По сравнению с текущими часто используемыми структурами в отрасли он может поддерживать пользователей в реализации быстрой функциональной реализации: она может не только соответствовать глубокой настройке моделей передовыми пользователями, но и позволить обычным пользователям быстро использовать предварительно обученные модели для быстрого практики функциональной практики. В текущем сценарии рекламного бизнеса продукта мы используем этот инструмент для быстрого изучения характеристик массовых данных о продукте, тем самым вспомогательные модули, такие как рекомендации по рекламе продуктов.
Первоначальное намерение проекта состоит в том, чтобы предоставить набор простых в использовании инструментов НЛП, которые непосредственно направлены на сценарии использования и удовлетворение потребностей пользователей в задачах НЛП, так что пользователям не нужно справляться со сложной предварительной обработкой и другими промежуточными процессами и непосредственно выполнять несколько задач НЛП для ввода на естественном языке, осознавая, что они думают, что они получают!
Что такое фантазии? Для многих текущих задач NLP, таких как распознавание именованных объектов (NER), классификация текста и сопоставление сходства текста (сопоставление пары предложений (SPM), большинство инструментов предназначены для поддержки обучения и оценки модели. каждой ссылки задачи NLP в Fancy-NLP и эффективно примените модель к фактическим сценариям спроса.
Fancy-NLP в настоящее время поддерживается для использования в средах Python 3 и был полностью протестирован в Python 3.6. Tensorflow 2.x полностью зависит от текущей версии. Если у вас есть какие -либо опасения по поводу совместимости модулей, мы рекомендуем использовать VirtualEnv для создания виртуальной среды для использования этого инструмента.
Fancy-NLP поддерживает установку одного клика с помощью pip :
pip install fancy-nlpВ руководстве по началу работы мы будем использовать предварительно обученные модели, чтобы быстро понять и испытать основные функции Fancy-NLP.
ПРИМЕЧАНИЕ. Мы продолжим оптимизировать модель распознавания объектов нескольких сценариев (разные аннотированные данные), чтобы пользователи могли бы непосредственно использовать. Если у вас есть соответствующие наборы данных, вы также можете дать нам положительные отзывы в этом вопросе.
Текущая версия Fancy-NLP может загрузить модель NER, обученную с использованием данных MSRA NER подмножества по умолчанию. Он может идентифицировать организационные структуры (ORG), местоположения (LOCS) и лица (PER) в китайском тексте. Основная модель, загруженная по умолчанию, заключается в том, чтобы пользователи могли испытать напрямую. Если вы хотите напрямую использовать свою собственную индивидуальную модель, вы можете обратиться к введению в последующем подробном учебном пособии для создания вашей системы извлечения объектов.
> >> from fancy_nlp . applications import NER
> >> ner_app = NER ()Когда вы запускаете приведенный выше код в первый раз, предварительно обученная модель NER будет загружена из облака.
> >> ner_app . analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '上海市' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 6 ,
'endOffset' : 9 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} > >> ner_app . restrict_analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} >>> ner_app.predict('同济大学位于上海市杨浦区,校长为陈杰')
['B-ORG',
'I-ORG',
'I-ORG',
'I-ORG',
'O',
'O',
'B-LOC',
'I-LOC',
'I-LOC',
'B-LOC',
'I-LOC',
'I-LOC',
'O',
'O',
'O',
'O',
'B-PER',
'I-PER']
Fancy-NLP загружается по умолчанию с моделью классификации текста, обученной в настоящее время опубликованным в настоящее время набор данных китайских новостей, которые могут предсказать категорию новостей, к которой он принадлежит для текста заголовка новостей.
> >> from fancy_nlp . applications import TextClassification
> >> text_classification_app = TextClassification ()Когда вы запускаете вышеуказанную программу в первый раз, предварительно обученная модель будет загружена из облака.
> >> text_classification_app . predict ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
'科技' > >> text_classification_app . analyze ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
( '科技' , 0.9996544 )Fancy-NLP загружается по умолчанию в модели соответствия сходства текста, обученной в настоящее время опубликованным набором данных о сопоставлении вопросов обслуживания клиентов Webank, который может предсказать, выражает ли он такое же намерение для предоставленных текстовых пар.
> >> from fancy_nlp . applications import SPM
> >> spm_app = SPM ()Когда вы запускаете вышеуказанную программу в первый раз, модель соответствия сходства текста будет загружена из облака.
> >> spm_app . predict (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
'1' В результате прогнозирования 1 представляет одно и то же намерение или аналогичный текст, 0 представляет собой различное намерение или другой текст.
> >> spm_app . analyze (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
( '1' , array ([ 1.6599501e-09 , 1.0000000e+00 ], dtype = float32 ))В подробном учебном пособии вы можете узнать, как использовать Fancy-NLP для создания пользовательских моделей, которые соответствуют пользовательским сценариям с использованием собственных наборов данных, и иметь более полное понимание интерфейса Fancy-NLP.
Чтобы полностью испытать следующий учебник, вам необходимо загрузить набор данных и модель BERT, которые мы используем:
86geqk7e6rb7 Вы можете переместить загруженные данные на тот же уровень, что и каталог examples , а структура окончательной каталога выглядит следующим образом:
.
├── datasets
│ ├── ner
│ │ └── msra
│ │ ├── test_data
│ │ └── train_data
│ ├── spm
│ │ └── webank
│ │ ├── BQ_dev.txt
│ │ ├── BQ_test.txt
│ │ └── BQ_train.txt
│ └── text_classification
│ └── toutiao
│ ├── toutiao_cat_data.txt
│ └── toutiao_label_dict.txt
├── examples
│ ├── bert_combination.py
│ ├── bert_fine_tuning.py
│ ├── bert_single.py
│ ├── ner_example.py
│ ├── spm_example.py
│ └── text_classification_example.py
└── pretrained_embeddings
└── chinese_L-12_H-768_A-12
├── bert_config.json
├── bert_model.ckpt.data-00000-of-00001
├── bert_model.ckpt.index
├── bert_model.ckpt.meta
└── vocab.txt
Таким образом, вы можете запустить образец программы напрямую. Например, python examples/ner_example.py .
Мы по -прежнему используем данные MSRA NER подмножества, упомянутые выше в качестве примера, чтобы представить, как использовать существующие наборы данных для обучения нашей собственной модели распознавания объектов. Для полной версии всех следующих фрагментов кода, пожалуйста, см. examples/ner_example.py .
В Fancy-NLP приложения распознавания объектов поддерживают использование стандартных форматов наборов данных NER, каждый символ, который должен быть идентифицирован, и его соответствующий тег разделяется t , а предложения разделены пустыми линиями. Формат тега может быть общим стандартным форматом, таким как BIO и BIOES .
Используя интерфейс, предоставленный Fancy-NLP, мы можем напрямую загружать набор данных и обработать его в формат, требуемый моделью.
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' ) load_ner_data_and_labels реализует эффективную загрузку наборов данных NER. Вы можете напрямую использовать путь файла данных (обучающий набор, набор проверки или набор тестов) для загрузки в качестве параметров. Испытательный набор используется в качестве набора валидации. В реальных задачах у вас должны быть собственные независимые наборы проверки и наборы тестирования, чтобы получить ценные результаты оценки теста.
После получения допустимых данных приложение NER может начать обучение модели напрямую.
checkpoint_dir = 'pretrained_models'
model_name = 'msra_ner_bilstm_cnn_crf'
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
load_swa_model = True ) Для интерфейса fit приложения NER вам необходимо пройти в учебном наборе и выборочных образцах, которые были обработаны ранее. Значения оставшихся параметров следующие:
ner_model_type : указывает имя модели, которое будет использоваться. В этом примере используется модель bilstm_cnn ;char_embed_trainable : может ли слой слоя вектора быть точной настройкой. В этом примере он настроен на True , указывая на то, что тонкая настройка может быть выполнена;callback_list : имя функции обратного вызова, которую необходимо использовать. Функции обратного вызова, используемые в этом примере:modelcheckpoint : используйте функцию контрольной точки модели. После каждой итерации сохраните обученную модель;earlystopping : используйте функцию ранней остановки. Если производительность модели не улучшается после n round итераций (по умолчанию n = 5), обучение будет закончено;swa : SWA означает стохастическое усреднение веса, которая является общей стратегией интеграции модели, которая может эффективно повысить производительность модели. Для получения более подробной информации, пожалуйста, обратитесь к введению в оригинальной статье;checkpoint_dir : путь каталога для сохранения файла модели;model_name : имя файла файла модели;load_swa_model : Загрузить вес вес модели SWA после обучения модели. Установите True здесь, указывая на использование модели SWA; test_data , test_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . score ( test_data , test_labels ) Здесь load_ner_data_and_labels все еще используется для обработки данных тестового набора. После получения допустимого формата данных используйте интерфейс score приложения NER, чтобы получить оценку модели в тестовом наборе.
После обучения модели все файлы, связанные с моделью, необходимые для задачи, необходимо сохранить, чтобы облегчить использование моделей, обученных фантазии, в других внешних приложениях.
import os
ner_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) Интерфейс save приложения NER может использоваться для сохранения файла структуры модели (JSON), весового файла (HDF5) и результатов, связанных с предварительной обработкой (Pickle):
modelcheckpoint ; ner_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) В настоящее время ner_app уже имеет возможность предсказать образцы, и вы можете выполнить соответствующие функции прогнозирования, упомянутые во вводном руководстве . Например, analyze , restrict_analyze .
Мы по -прежнему используем набор данных классификации заголовков Китая, упомянутый выше в качестве примера, чтобы представить, как использовать существующий набор данных для обучения нашей собственной модели классификации текста. Для полной версии всех следующих фрагментов кода, пожалуйста, см. examples/text_classification_example.py .
В Fancy-NLP приложения для классификации текстовых приложений поддерживают форматы наборов данных, разделенные фиксированными делимитерами с использованием исходного текста. У них могут быть избыточные столбцы, которые не зависят от задач классификации текста. Им нужно только убедиться, что как столбец метки, так и вводной текстовый столбец находятся в единой фиксированной позиции.
Кроме того, для классификационных тегов также требуется отображение файла тегов и идентификаторов тегов, которое состоит из двух столбцов: Первый столбец - это исходное имя тега в наборе данных, обычно некоторые кодированные идентификаторы; Второй столбец - это читаемое имя, соответствующее исходному имени тега. Переписка этого файла будет использоваться для непосредственного вывода имен читаемых меткой, когда модель прогнозируется.
Используя интерфейс, предоставленный Fancy-NLP, мы можем напрямую загружать набор данных и обработать его в формат, требуемый моделью.
from fancy_nlp . applications import TextClassification
text_classification_app = TextClassification ( use_pretrained = False )
data_file = 'datasets/text_classification/toutiao/toutiao_cat_data.txt'
from fancy_nlp . utils import load_text_classification_data_and_labels
train_data , train_labels , valid_data , valid_labels , test_data , test_labels =
load_text_classification_data_and_labels ( data_file ,
label_index = 1 ,
text_index = 3 ,
delimiter = '_!_' ,
split_mode = 2 ,
split_size = 0.3 ) load_ner_data_and_labels реализует эффективную загрузку наборов данных классификации текста. Вы можете напрямую использовать путь файла данных (обучающий набор, набор проверки или набор тестов) для загрузки в качестве параметров. Полные данные используются здесь для разделения обучающего набора, набора валидации и набора тестов. В дополнение к файлу данных, конкретное значение оставшихся выше параметров:
label_index : положение тега классификации в файле данных (номер позиции начинается с 0);text_index : местоположение текста, которое будет классифицировать в файле данных;delimiter : разделитель между столбцами файла данных;split_mode : указывает, как разделить исходные данные, изменяя параметры. в:split_size : отношение деления данных. Когда split_mode=1 это означает, что данные, которые делят соотношение split_size от исходных данных, будут использоваться в качестве набора проверки; Когда split_mode=2 это означает, что данные, которые делят соотношение split_size от исходных данных, будут использоваться в качестве суммы набора проверки и набора тестов, а также пропорции набора проверки и набора тестов для каждой учетной записи для половины. После получения допустимых данных приложение Text Classification может начать обучение модели напрямую.
dict_file = 'datasets/text_classification/toutiao/toutiao_label_dict.txt'
model_name = 'toutiao_text_classification_cnn'
checkpoint_dir = 'pretrained_models'
text_classification_app . fit (
train_data , train_labels , valid_data , valid_labels ,
text_classification_model_type = 'cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
label_dict_file = dict_file ,
max_len = 60 ,
load_swa_model = True ) Для интерфейса fit приложения Text Classification вам необходимо пройти в учебном наборе и выборочных образцах, которые были обработаны ранее. Значения оставшихся параметров следующие:
text_classification_model_type : указывает имя модели, которое будет использоваться. В этом примере используется модель cnn ;char_embed_trainable : может ли слой слоя вектора быть точной настройкой. В этом примере он настроен на True , указывая на то, что тонкая настройка может быть выполнена;callback_list : имя функции обратного вызова, которую необходимо использовать. Функции обратного вызова, используемые в этом примере:modelcheckpoint : используйте функцию контрольной точки модели. После каждой итерации сохраните обученную модель;earlystopping : используйте функцию ранней остановки. Если производительность модели не улучшается после n round итераций (по умолчанию n = 5), обучение будет закончено;swa : SWA означает стохастическое усреднение веса, которая является общей стратегией интеграции модели, которая может эффективно повысить производительность модели. Для получения более подробной информации, пожалуйста, обратитесь к введению в оригинальной статье;checkpoint_dir : путь каталога для сохранения файла модели;model_name : имя файла файла модели;label_dict_file : файл словаря метки, который состоит из двух столбцов: Первый столбец - это исходное имя метки в наборе данных, обычно некоторые кодированные идентификаторы; Второй столбец - это читаемое имя, соответствующее исходному имени метки;max_len : для максимальной длины, сохраняемой входным текстом, текст за этой длиной будет усечен;load_swa_model : Загрузить вес вес модели SWA после обучения модели. Установите True здесь, указывая на использование модели SWA; text_classification_app . score ( test_data , test_labels ) Здесь вы можете напрямую использовать интерфейс score приложения классификации текста, чтобы получить оценку модели в тестовом наборе.
После обучения модели все файлы, связанные с моделью, необходимые для задачи, необходимо сохранить, чтобы облегчить использование моделей, обученных фантазии, в других внешних приложениях.
import os
text_classification_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) Интерфейс save of Text Classification может использоваться для сохранения файла структуры модели (JSON), веса файла (HDF5) и связанных с результатами предварительной обработки (Pickle):
modelcheckpoint . text_classification_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) В настоящее время text_classification_app уже есть возможность прогнозировать образцы, и вы можете выполнить соответствующие функции прогнозирования, упомянутые во вводном руководстве . Например, predict , analyze .
Мы по -прежнему используем набор данных по сопоставлению вопросов обслуживания клиентов Webank, упомянутый выше в качестве примера, чтобы представить, как использовать существующий набор данных для обучения нашей собственной модели соответствия сходства текста. Для полной версии всех следующих фрагментов кода, пожалуйста, см. examples/spm_example.py .
В Fancy-NLP приложение задачи соответствия текста поддерживает использование исходного текста в формате набора данных, разделенного t , который состоит из трех столбцов: Первый столбец и второй столбец представляют собой набор текстовых пар соответственно; Третий столбец - это метка образца, 1 означает текстовую семантику похожи, а 0 означает разнородность.
Используя интерфейс, предоставленный Fancy-NLP, мы можем напрямую загружать набор данных и обработать его в формат, требуемый моделью.
from fancy_nlp . applications import SPM
spm_app = applications . SPM ( use_pretrained = False )
train_file = 'datasets/spm/webank/BQ_train.txt'
valid_file = 'datasets/spm/webank/BQ_dev.txt'
from fancy_nlp . utils import load_spm_data_and_labels
train_data , train_labels = load_spm_data_and_labels ( train_file )
valid_data , valid_labels = load_spm_data_and_labels ( valid_file ) load_spm_data_and_labels реализует эффективную загрузку наборов данных сходства текста. Вы можете напрямую использовать путь файла данных (обучающий набор, набор проверки или набор тестов) для загрузки в качестве параметров.
После получения допустимых данных приложение для сопоставления сходства текста может начать обучение модели напрямую.
model_name = 'spm_siamese_cnn'
checkpoint_dir = 'pretrained_models'
spm_app . fit ( train_data , train_labels , valid_data , valid_labels ,
spm_model_type = 'siamese_cnn' ,
word_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
max_len = 60 ,
load_swa_model = True ) Для интерфейса fit приложения соответствующего приложения для приложения вам необходимо пройти в подготовленных и валидационных образцах, которые были обработаны ранее. Значение оставшихся параметров заключается в следующем:
spm_model_type : указывает имя модели, которое будет использоваться. В этом примере используется модель siamese_cnn ;word_embed_trainable : может ли слой слоя вектора быть точной настройкой. В этом примере он настроен на True , указывая на то, что тонкая настройка может быть выполнена;callback_list : имя функции обратного вызова, которую необходимо использовать. Функции обратного вызова, используемые в этом примере:modelcheckpoint : используйте функцию контрольной точки модели. После каждой итерации сохраните обученную модель;earlystopping : используйте функцию ранней остановки. Если производительность модели не улучшается после n round итераций (по умолчанию n = 5), обучение будет закончено;swa : SWA означает стохастическое усреднение веса, которая является общей стратегией интеграции модели, которая может эффективно повысить производительность модели. Для получения более подробной информации, пожалуйста, обратитесь к введению в оригинальной статье;checkpoint_dir : путь каталога для сохранения файла модели;model_name : имя файла файла модели;max_len : для максимальной длины, сохраняемой входным текстом, текст за этой длиной будет усечен;load_swa_model : Загрузить вес вес модели SWA после обучения модели. Установите True здесь, указывая на использование модели SWA; test_file = 'datasets/spm/webank/BQ_test.txt'
test_data , test_labels = load_spm_data_and_labels ( test_file )
spm_app . score ( test_data , test_labels ) Здесь вы можете непосредственно использовать интерфейс score сходства приложения, чтобы получить оценку модели в тестовом наборе.
После обучения модели все файлы, связанные с моделью, необходимые для задачи, необходимо сохранить, чтобы облегчить использование моделей, обученных фантазии, в других внешних приложениях.
import os
spm_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) Интерфейс save приложения соответствия сходства текста может использоваться для сохранения файла структуры модели (JSON), веса (HDF5) и результатов, связанных с предварительной обработкой (Pickle):
modelcheckpoint . spm_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) В настоящее время spm_app уже имеет возможность предсказать образцы, и вы можете продолжать выполнять соответствующие функции прогнозирования, упомянутые во вводном руководстве . Например, predict , analyze .
FaceN-NLP предоставляет различные методы для использования модели BERT :
Чтобы использовать BERT в Fancy-NLP, вам нужно только загрузить предварительно обученную модель BERT (такую как китайская модель BERT, предоставленная Google, модель Ernie, предоставленную Baidu (код извлечения: IQ74), и модель Bert-WWM, предоставленная Институтом технологии Харбина). После этого вы можете перенести путь словарного файла модели BERT, файла конфигурации и файла модели в метод fit соответствующего приложения. Ниже приведен пример приложения распознавания объектов. Для получения полного примера, пожалуйста, обратитесь к examples/bert_fine_tuning.py , examples/bert_single.py и examples/bert_combination.py .
Обратите внимание, что модель BERT может использоваться только с векторами символов, а не с векторами слов.
import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bert' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bert_crf' ,
load_swa_model = True )В приведенном выше фрагменте кода важно отметить:
ner_model_type : установить тип модели на bert ;use_char : не использовать векторы на уровне символов;use_word : не использовать векторы уровня слов в качестве вспомогательного ввода;use_bert : при тонкой настройке модели BERT, установленной для использования только входов BERT;bert_vocab_file , bert_config_file , bert_checkpoint_file : Путь к файлам, связанным с моделью BERTbert_trainable : установите параметры модели BERT в тренировочное состояние, то есть тонкая настройка;optimizer : установите оптимизатор для модели BERT. При тонкой настройке модели BERT скорость обучения оптимизатора должна быть скорректирована до меньшего уровня. from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = False ,
optimizer = 'adam' ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_bert_crf' ,
load_swa_model = True )В приведенном выше фрагменте кода важно отметить:
ner_model_type : установите тип модели на bilstm_cnn , и здесь должна использоваться модель без берта;use_char : не использовать векторы на уровне символов;use_word : не использовать векторы уровня слов в качестве вспомогательного ввода;use_bert : установить для использования только векторов BERT в качестве ввода функции;bert_vocab_file , bert_config_file , bert_checkpoint_file : Путь к файлам, связанным с моделью BERTbert_trainable : установите параметр модели BERT в невысокое состояние, и также можно установить его на True здесь;optimizer : установите оптимизатор. Если модель BET обучается, рекомендуется отрегулировать скорость обучения оптимизатора до меньшего. import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = True ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_char_bert_crf' ,
load_swa_model = True )В приведенном выше фрагменте кода важно отметить:
ner_model_type : установите тип модели на bilstm_cnn , и здесь должна использоваться модель без берта;use_char : установить вектор на уровне символов;use_word : не использовать векторы уровня слов в качестве вспомогательного ввода;use_bert : установите использование Bert Vector, который объединяет векторы Word и Bert Vectors в качестве входов функций;bert_vocab_file , bert_config_file , bert_checkpoint_file : Путь к файлам, связанным с моделью BERTbert_trainable : установите параметры модели Bert в тренировочное состояние, и также можно установить его на False здесь;optimizer : установите оптимизатор. Если модель BET обучается, рекомендуется отрегулировать скорость обучения оптимизатора до меньшего. Разработчики, которые заинтересованы в улучшении причудливого кода NLP, должны следовать следующим спецификациям, чтобы отправить запросы на привлечение:
Если вы используете причудливый NLP во время соответствующего процесса исследования, вы можете добавить следующее в список цитирования
@misc{tencent2019fancynlp,
title={Fancy-NLP},
author={Li Yang and Shiyao Xu and Shijia E},
howpublished={ url {https://github.com/boat-group/fancy-nlp}},
year={2019}
}▴ Вернуться к вершине
Этот проект вдохновлен многими отличными проектами с открытым исходным кодом, особенно керами. Как сказал лозунг Керас: глубокое обучение для человека , мы надеемся, что причудливый НЛП - это НЛП для человека , особенно в китайской области.