Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Извлекайте ключевые идеи из текстовых документов с помощью тонкой настройки и HPO с помощью Amazon SageMaker JumpStart.

Организациям в таких отраслях, как розничная торговля, банковское дело, финансы, здравоохранение, производство и кредитование, часто приходится иметь дело с огромным количеством неструктурированных текстовых документов, поступающих из различных источников, таких как новости, блоги, обзоры продуктов, каналы поддержки клиентов и социальные сети. Эти документы содержат критически важную информацию, которая является ключом к принятию важных бизнес-решений. По мере роста организации извлечение важной информации из этих документов становится проблемой. Благодаря развитию методов обработки естественного языка (NLP) и машинного обучения (ML) мы можем быстро и с высокой точностью находить ценные идеи и связи из этих текстовых документов, тем самым помогая компаниям своевременно принимать качественные бизнес-решения. Полностью управляемые услуги НЛП также ускорили внедрение НЛП. Amazon Comprehend — это полностью управляемая служба, позволяющая создавать собственные модели НЛП, отвечающие вашим требованиям, без каких-либо знаний в области машинного обучения.

В этом посте мы покажем, как использовать современные методы машинного обучения для решения пяти различных задач НЛП: обобщение документов, классификация текста, ответы на вопросы, распознавание именованных сущностей и извлечение отношений. Для каждой из этих задач НЛП мы демонстрируем, как использовать Создатель мудреца Амазонки выполнить следующие действия:

  • Развертывание и выполнение логического вывода на предварительно обученной модели
  • Точная настройка предварительно обученной модели на новом пользовательском наборе данных
  • Дальнейшее улучшение производительности тонкой настройки с помощью SageMaker автоматическая настройка модели
  • Оцените производительность модели на данных тестов удержания с помощью различных метрик оценки.

Хотя в этом посте мы рассмотрим пять конкретных задач NLP, вы можете использовать это решение в качестве шаблона для обобщения точной настройки предварительно обученных моделей с вашим собственным набором данных, а затем запустить оптимизацию гиперпараметров для повышения точности.

Шаблоны решений JumpStart

Amazon SageMaker JumpStart предоставляет комплексные решения одним щелчком мыши для многих распространенных случаев использования машинного обучения. Изучите следующие варианты использования для получения дополнительной информации о доступных шаблонах решений:

Шаблоны решений JumpStart охватывают множество вариантов использования, в рамках каждого из которых предлагается несколько различных шаблонов решений (это решение для понимания документов относится к варианту использования «Извлечение и анализ данных из документов»).

Выберите шаблон решения, который лучше всего подходит для вашего варианта использования, на целевой странице JumpStart. Для получения дополнительной информации о конкретных решениях для каждого варианта использования и о том, как запустить решение JumpStart, см. Шаблоны решений.

Обзор решения

На следующем изображении показано, как можно использовать это решение с компонентами SageMaker. Учебные задания SageMaker используются для обучения различных моделей НЛП, а конечные точки SageMaker используются для развертывания моделей на каждом этапе. Мы используем Простой сервис хранения Amazon (Amazon S3) вместе с SageMaker для хранения обучающих данных и артефактов модели, а также Amazon CloudWatch для регистрации результатов обучения и конечной точки.

Откройте решение для понимания документов

Перейдите к решению Document Understanding в JumpStart.

Теперь мы можем более подробно рассмотреть некоторые активы, включенные в это решение, начиная с демонстрационного ноутбука.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Демонстрационный блокнот

Вы можете использовать демонстрационную записную книжку для отправки примеров данных на уже развернутые конечные точки модели для задач суммирования документов и ответов на вопросы. Демонстрационная записная книжка позволяет быстро получить практический опыт, запросив данные примера.

После запуска решения Document Understanding откройте демонстрационную записную книжку, выбрав Использовать конечную точку в записной книжке.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Давайте углубимся в каждый из пяти основных ноутбуков для этого решения.

Предпосылки

In Студия Amazon SageMaker, убедитесь, что вы используете PyTorch 1.10 Python 3.8 CPU Optimized image/kernel, чтобы открыть блокноты. Для обучения используются пять экземпляров ml.g4dn.2xlarge, поэтому вам следует запрос на увеличение лимита услуг если ваша учетная запись требует повышенных лимитов для этого типа.

Классификация текста

Классификация текста относится к классификации входного предложения по одной из меток класса обучающего набора данных. В этом блокноте показано, как использовать API-интерфейс JumpStart для классификации текста.

Развертывание и выполнение логического вывода на предварительно обученной модели

Модель классификации текста, которую мы выбрали для использования, основана на встраивании текста (tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2) модель из Концентратор TensorFlow, который предварительно обучен на наборах данных Wikipedia и BookCorpus.

Модель, доступная для развертывания, создается путем присоединения слоя двоичной классификации к выходным данным модели встраивания текста, а затем точной настройки всей модели на SST-2 набор данных, состоящий из положительных и отрицательных отзывов о фильмах.

Чтобы выполнить вывод для этой модели, нам сначала нужно загрузить контейнер вывода (deploy_image_uri), сценарий вывода (deploy_source_uri) и предварительно обученная модель (base_model_uri). Затем мы передаем их в качестве параметров для создания экземпляра объекта модели SageMaker, который затем можно развернуть:

model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name_tc,
)
# deploy the Model.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    endpoint_name=endpoint_name_tc,
)

После развертывания модели мы собираем некоторые примеры входных данных и запрашиваем конечную точку:

text1 = "astonishing ... ( frames ) profound ethical and philosophical questions in the form of dazzling pop entertainment" 
text2 = "simply stupid , irrelevant and deeply , truly , bottomlessly cynical "

Следующий код показывает наши ответы:

Inference:
Input text: 'astonishing ... ( frames ) profound ethical and philosophical questions in the form of dazzling pop entertainment'
Model prediction: [0.000452966779, 0.999547064]
Labels: [0, 1]
Predicted Label: 1 # value 0 means negative sentiment and value 1 means positive sentiment

Inference:
Input text: 'simply stupid , irrelevant and deeply , truly , bottomlessly cynical '
Model prediction: [0.998723, 0.00127695734]
Labels: [0, 1]
Predicted Label: 0

Точная настройка предварительно обученной модели на пользовательском наборе данных

Мы только что рассмотрели выполнение логического вывода на предварительно обученной модели BERT, которая была точно настроена на SST-2 набор данных.

Далее мы обсудим, как точно настроить модель для пользовательского набора данных с любым количеством классов. Набор данных, который мы используем для тонкой настройки, по-прежнему SST-2 набор данных. Вы можете заменить этот набор данных любым интересующим вас набором данных.

Мы получаем обучающий контейнер Docker, исходный код обучающего алгоритма и предварительно обученную модель:

from sagemaker import image_uris, model_uris, script_uris, hyperparameters

model_id, model_version = model_id, "*" # all the other options of model_id are the same as the one in Section 2.
training_instance_type = config.TRAINING_INSTANCE_TYPE

# Retrieve the docker image
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,
)
# Retrieve the training script
train_source_uri = script_uris.retrieve(
    model_id=model_id, model_version=model_version, script_scope="training"
)
# Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(
    model_id=model_id, model_version=model_version, model_scope="training"
)

Для специфичных для алгоритма гиперпараметров мы начинаем с извлечения словаря Python обучающих гиперпараметров, которые алгоритм принимает со значениями по умолчанию. Вы можете переопределить их с помощью пользовательских значений, как показано в следующем коде:

from sagemaker import hyperparameters

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["batch-size"] = "64"
hyperparameters["adam-learning-rate"] = "1e-6"

Набор данных (SST-2) разделен на обучающий, проверочный и тестовый наборы, где обучающий набор используется для подбора модели, проверочный набор используется для вычисления показателей оценки, которые можно использовать для HPO, а тестовый набор используется в качестве удерживаемых данных. для оценки производительности модели. Затем набор данных для обучения и проверки загружается в Amazon S3 и используется для запуска задания тонкой настройки обучения:

# Create SageMaker Estimator instance
tc_estimator = Estimator(
    role=role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    base_job_name=training_job_name,
)

training_data_path_updated = f"s3://{config.S3_BUCKET}/{prefix}/train"
# Launch a SageMaker Training job by passing s3 path of the training data
tc_estimator.fit({"training": training_data_path_updated}, logs=True)

После завершения работы по тонкой настройке мы развертываем модель, запускаем логический вывод на наборе тестовых данных и вычисляем метрики оценки. Поскольку это задача бинарной классификации, мы используем показатель точности и Счет F1 в качестве показателей оценки. Большее значение указывает на лучшую производительность. На следующем снимке экрана показаны наши результаты.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Дальнейшее повышение производительности тонкой настройки с помощью автоматической настройки модели SageMaker.

На этом шаге мы покажем, как можно еще больше повысить производительность модели путем точной настройки модели с помощью автоматической настройки модели SageMaker. Автоматическая настройка модели, также известная как оптимизация гиперпараметров (HPO), находит наилучшую версию модели, выполняя несколько заданий обучения в наборе данных с указанным диапазоном гиперпараметров. Затем он выбирает значения гиперпараметров, которые приводят к модели, которая работает лучше всего, согласно выбранной вами метрике, в наборе данных проверки.

Во-первых, мы устанавливаем цель как оценку точности данных проверки (val_accuracy) и определить метрики для задания настройки, указав имя целевого показателя и регулярное выражение (регулярное выражение). Регулярное выражение используется для сопоставления выходных данных журнала алгоритма и захвата числовых значений метрик. Затем мы указываем диапазоны гиперпараметров, из которых нужно выбрать наилучшие значения гиперпараметров. Мы устанавливаем общее количество заданий по настройке равным шести и распределяем эти задания по трем разным Эластичное вычислительное облако Amazon (Amazon EC2) для выполнения параллельных заданий по настройке. См. следующий код:

# Define objective metric per framework, based on which the best model will be selected.
metric_definitions_per_model = {
    "tensorflow": {
        "metrics": [{"Name": "val_accuracy", "Regex": "val_accuracy: ([0-9.]+)"}],
        "type": "Maximize",
    }
}

# You can select from the hyperparameters supported by the model, and configure ranges of values to be searched for training the optimal model.(https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html)
hyperparameter_ranges = {
    "adam-learning-rate": ContinuousParameter(0.00001, 0.01, scaling_type="Logarithmic")
}

# Increase the total number of training jobs run by AMT, for increased accuracy (and training time).
max_jobs = 6
# Change parallel training jobs run by AMT to reduce total training time, constrained by your account limits.
# if max_jobs=max_parallel_jobs then Bayesian search turns to Random.
max_parallel_jobs = 3

Мы передаем эти значения для создания экземпляра объекта SageMaker Estimator, аналогично тому, что мы делали на предыдущем шаге тонкой настройки. Вместо того, чтобы позвонить в fit функции Estimator объект, мы передаем Estimator объект в качестве параметра для Гиперпараметртюнер конструктор и вызвать fit его функция для запуска заданий настройки:

hp_tuner = HyperparameterTuner(
    tc_estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=tuning_job_name,
)

# Launch a SageMaker Tuning job to search for the best hyperparameters
hp_tuner.fit({"training": training_data_path_updated})

После завершения заданий по настройке мы развертываем модель, которая дает наилучший показатель метрики оценки в наборе данных проверки, выполняем вывод на том же наборе данных проверки удержания, который мы сделали в предыдущем разделе, и вычисляем метрики оценки.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Результаты показывают, что модель, выбранная с помощью автоматической настройки модели, значительно превосходит модель, точно настроенную в предыдущем разделе, на наборе данных тестовой задержки.

Распознавание именованных объектов

Распознавание именованных сущностей (NER) — это процесс обнаружения и классификации именованных сущностей по предопределенным категориям, таким как имена людей, организаций, местоположения и количества. Существует множество реальных вариантов использования NER, таких как механизмы рекомендаций, категоризация и назначение заявок в службу поддержки в нужный отдел, извлечение важной информации из отчетов пациентов в здравоохранении и классификация контента из новостей и блогов.

Развертывание и выполнение логического вывода на предварительно обученной модели

Мы разворачиваем En_core_web_md модель из ошалевший библиотека. spaCy — это библиотека NLP с открытым исходным кодом, которую можно использовать для различных задач и которая имеет встроенные методы для NER. Мы используем контейнер глубокого обучения (DLC) AWS PyTorch с режимом сценария и устанавливаем библиотеку spaCy в качестве зависимости поверх контейнера.

Далее точка входа для скрипта (аргумент entry_point.py), содержащий весь код для загрузки и загрузки En_core_web_md моделировать и выполнять логические выводы по данным, отправляемым в конечную точку. Наконец, нам все еще нужно предоставить model_data как предварительно обученная модель для вывода. Потому что предварительно обученный En_core_web_md Модель скачивается на лету, что указано в скрипте входа, мы предоставляем пустой файл архива. После развертывания конечной точки вы можете вызывать конечную точку непосредственно из записной книжки с помощью SageMaker Python SDK. Predictor, Смотрите следующий код:

model = PyTorchModel(
    model_data=f"{config.SOURCE_S3_PATH}/artifacts/models/empty.tar.gz",
    entry_point="entry_point.py",
    source_dir="../containers/entity_recognition",
    role=config.IAM_ROLE,
    framework_version="1.5.0",
    py_version="py3",
    code_location="s3://" + config.S3_BUCKET + "/code",
    env={
        "MMS_DEFAULT_RESPONSE_TIMEOUT": "3000"
    }
)
predictor = model.deploy(
    endpoint_name=endpoint_name,
    instance_type=config.HOSTING_INSTANCE_TYPE,
    initial_instance_count=1,
    serializer=JSONSerializer(),
    deserializer=JSONDeserializer()
)

Входными данными для модели является текстовый документ. Модель именованных объектов извлекает фрагменты существительных и именованные объекты в текстовом документе и классифицирует их по ряду различных типов (таких как люди, места и организации). Пример ввода и вывода показан в следующем коде. start_char параметр указывает смещение символа для начала диапазона, и end_char указывает на конец промежутка.

data = {'text': 'Amazon SageMaker is a fully managed service that provides every developer and data scientist with the ability to build, train, and deploy machine learning (ML) models quickly.'}
response = predictor.predict(data=data)

print(response['entities'])
print(response['noun_chunks'])

[{'text': 'Amazon SageMaker', 'start_char': 0, 'end_char': 16, 'label': 'ORG'}]
[{'text': 'Amazon SageMaker', 'start_char': 0, 'end_char': 16}, {'text': 'a fully managed service', 'start_char': 20, 'end_char': 43}, {'text': 'that', 'start_char': 44, 'end_char': 48}, {'text': 'every developer and data scientist', 'start_char': 58, 'end_char': 92}, {'text': 'the ability', 'start_char': 98, 'end_char': 109}, {'text': 'ML', 'start_char': 156, 'end_char': 158}]

Точная настройка предварительно обученной модели на пользовательском наборе данных

На этом этапе мы демонстрируем, как точно настроить предварительно обученные языковые модели для NER в вашем собственном наборе данных. Шаг тонкой настройки обновляет параметры модели, чтобы зафиксировать характеристики ваших собственных данных и повысить точность. Мы используем ВикиЭНН (PAN-X) для точной настройки DistilBERT-база-без корпуса Модель-трансформер от Hugging Face.

Набор данных разделен на наборы для обучения, проверки и тестирования.

Далее мы указываем гиперпараметры модели и используем DLC AWS Hugging Face с режимом скрипта (аргумент entry_point) для запуска задания тонкой настройки:

hyperparameters = {
    "pretrained-model": "distilbert-base-uncased",
    "learning-rate": 2e-6,
    "num-train-epochs": 2,
    "batch-size": 16,
    "weight-decay": 1e-5,
    "early-stopping-patience": 2,
}

ner_estimator = HuggingFace(
    pytorch_version='1.10.2',
    py_version='py38',
    transformers_version="4.17.0",
    entry_point='training.py',
    source_dir='../containers/entity_recognition/finetuning',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=training_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    base_job_name = training_job_name
)

После завершения тонкой настройки мы развертываем конечную точку и запрашиваем эту конечную точку с тестовыми данными удержания. Чтобы запросить конечную точку, каждую текстовую строку необходимо преобразовать в один или несколько маркеров и отправить в модель преобразователя. Каждый токен получает предсказанный именованный тег сущности. Поскольку каждая текстовая строка может быть разделена на один или несколько токенов, нам нужно продублировать именованный тег сущности строки для всех токенов, которые с ней связаны. Предоставленный блокнот проведет вас через шаги, чтобы достичь этого.

Наконец, мы используем встроенные метрики оценки Hugging Face. последовательный вычислить оценочные баллы по данным теста задержки. Используемые метрики оценки: общая точность, общий отзыв, общий F1 и точность. На следующем снимке экрана показаны наши результаты.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Дальнейшее повышение производительности тонкой настройки с помощью автоматической настройки модели SageMaker.

Как и в случае с текстовой классификацией, мы демонстрируем, как можно еще больше повысить производительность модели путем точной настройки модели с помощью автоматической настройки модели SageMaker. Чтобы запустить задание по настройке, нам нужно определить объективную метрику, которую мы хотим использовать для оценки производительности модели в наборе данных проверки (в данном случае оценка F1), диапазоны гиперпараметров для выбора лучших значений гиперпараметров, а также конфигурации задания настройки, такие как максимальное количество заданий по настройке и количество параллельных заданий, запускаемых одновременно:

hyperparameters_range = {
    "learning-rate": ContinuousParameter(1e-5, 0.1, scaling_type="Logarithmic"),
    "weight-decay": ContinuousParameter(1e-6, 1e-2, scaling_type="Logarithmic"),
}

tuner = HyperparameterTuner(
    estimator,
    "f1",
    hyperparameters_range,
    [{"Name": "f1", "Regex": "'eval_f1': ([0-9.]+)"}],
    max_jobs=6,
    max_parallel_jobs=3,
    objective_type="Maximize",
    base_tuning_job_name=tuning_job_name,
)

tuner.fit({
    "train": f"s3://{bucket}/{prefix}/train/",
    "validation": f"s3://{bucket}/{prefix}/validation/",
}, logs=True)

После завершения заданий по настройке мы развертываем модель, которая дает наилучший показатель метрики оценки в наборе данных проверки, выполняем вывод на том же наборе данных проверки удержания, который мы сделали в предыдущем разделе, и вычисляем метрики оценки.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Мы видим, что модель с HPO обеспечивает значительно лучшую производительность по всем показателям.

Ответ на вопрос

Ответы на вопросы полезны, когда вы хотите запросить большой объем текста для получения конкретной информации. Это позволяет пользователю задать вопрос на естественном языке и получить немедленный и краткий ответ. Системы ответов на вопросы, основанные на НЛП, могут использоваться в поисковых системах и телефонных разговорных интерфейсах.

Развертывание и выполнение логического вывода на предварительно обученной модели

Наша предварительно обученная модель представляет собой модель ответов на извлекающие вопросы (EQA). Берт-большой-необработанный-целое-слово-маскирующий-тонкая-отряд построен на модели Трансформера от Hugging Face. Мы используем DLC AWS PyTorch в режиме сценария и устанавливаем трансформеры библиотека как зависимость поверх контейнера. Как и в задаче NER, мы предоставляем пустой файл архива в аргументе model_data потому что предварительно обученная модель загружается на лету. После развертывания конечной точки вы можете вызывать конечную точку непосредственно из записной книжки с помощью SageMaker Python SDK. Predictor, Смотрите следующий код:

model = PyTorchModel(
    model_data=f"{config.SOURCE_S3_PATH}/artifacts/models/empty.tar.gz",
    entry_point="entry_point.py",
    source_dir="../containers/question_answering",
    role=config.IAM_ROLE,
    framework_version="1.5.0",
    py_version="py3",
    code_location="s3://" + config.S3_BUCKET + "/code",
    env={
        "MODEL_ASSETS_S3_BUCKET": config.SOURCE_S3_BUCKET,
        "MODEL_ASSETS_S3_PREFIX": f"{config.SOURCE_S3_PREFIX}/artifacts/models/question_answering/",
        "MMS_DEFAULT_RESPONSE_TIMEOUT": "3000",
    },
)

После успешного развертывания конечной точки и настройки предиктора мы можем опробовать модель ответов на вопросы на примерах входных данных. Эта модель была предварительно обучена на Стэнфордский набор данных вопросов и ответов (SQuAD) набор данных. Этот набор данных был представлен в надежде на дальнейшее развитие области моделирования ответов на вопросы. Это набор данных для понимания прочитанного, состоящий из отрывков, вопросов и ответов.

Все, что нам нужно сделать, это создать объект словаря с двумя ключами. context это текст, из которого мы хотим получить информацию. question — это запрос на естественном языке, указывающий, какую информацию мы хотим извлечь. Мы называем predict на наш предиктор, и мы должны получить ответ от конечной точки, который содержит наиболее вероятные ответы:

data = {'question': 'what is my name?', 'context': "my name is thom"}
response = predictor.predict(data=data)

У нас есть ответ, и мы можем распечатать наиболее вероятные ответы, извлеченные из предыдущего текста. Каждый ответ имеет показатель достоверности, используемый для ранжирования (но этот показатель не следует интерпретировать как истинную вероятность). В дополнение к дословному ответу вы также получаете индексы начального и конечного символов ответа из исходного контекста:

print(response['answers'])
[{'score': 0.9793591499328613, 'start': 11, 'end': 15, 'answer': 'thom'}, 
{'score': 0.02019440196454525, 'start': 0, 'end': 15, 'answer': 'my name is thom'}, 
{'score': 4.349117443780415e-05, 'start': 3, 'end': 15, 'answer': 'name is thom'}]

Теперь мы настраиваем эту модель с помощью нашего собственного пользовательского набора данных, чтобы получить лучшие результаты.

Точная настройка предварительно обученной модели на пользовательском наборе данных

На этом этапе мы демонстрируем, как точно настроить предварительно обученные языковые модели для EQA в вашем собственном наборе данных. Шаг тонкой настройки обновляет параметры модели, чтобы зафиксировать характеристики ваших собственных данных и повысить точность. Мы используем SQUAD2.0 набор данных для точной настройки модели встраивания текста bert-base-без кожуха от обнимающего лица. Модель, доступная для тонкой настройки, прикрепляет слой извлечения ответов к модели встраивания текста и инициализирует параметры слоя случайными значениями. На этапе точной настройки настраиваются все параметры модели, чтобы свести к минимуму ошибку прогнозирования входных данных, и возвращается настроенная модель.

Подобно задаче классификации текста, набор данных (SQuAD2.0) разделен на обучающий, проверочный и тестовый наборы.

Далее мы указываем гиперпараметры модели и используем API-интерфейс JumpStart для запуска задания тонкой настройки:

hyperparameters = {'epochs': '3', 'adam-learning-rate': '2e-05', 'batch-size': '16'}

eqa_estimator = Estimator(
    role=role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    base_job_name=training_job_name,
    debugger_hook_config=False,
)

training_data_path_updated = f"s3://{config.S3_BUCKET}/{prefix}/train"
# Launch a SageMaker Training job by passing s3 path of the training data
eqa_estimator.fit({"training": training_data_path_updated}, logs=True)

После завершения работы по тонкой настройке мы развертываем модель, запускаем логический вывод на наборе тестовых данных и вычисляем метрики оценки. В качестве показателей оценки используются средний балл точного совпадения и средний балл F1. На следующем снимке экрана показаны результаты.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Дальнейшее повышение производительности тонкой настройки с помощью автоматической настройки модели SageMaker.

Как и в предыдущих разделах, мы используем HyperparameterTuner объект для запуска заданий настройки:

hyperparameter_ranges = {
    "adam-learning-rate": ContinuousParameter(0.00001, 0.01, scaling_type="Logarithmic"),
    "epochs": IntegerParameter(3, 10),
    "train-only-top-layer": CategoricalParameter(["True", "False"]),
}

hp_tuner = HyperparameterTuner(
    eqa_estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=training_job_name,
)

# Launch a SageMaker Tuning job to search for the best hyperparameters
hp_tuner.fit({"training": training_data_path_updated})

После завершения заданий по настройке мы развертываем модель, которая дает наилучший показатель метрики оценки в наборе данных проверки, выполняем вывод на том же наборе данных проверки удержания, который мы сделали в предыдущем разделе, и вычисляем метрики оценки.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Мы видим, что модель с HPO показывает значительно лучшую производительность на тестовых данных удержания.

Извлечение отношений

Извлечение отношений — это задача извлечения семантических отношений из текста, которые обычно возникают между двумя или более объектами. Извлечение отношений играет важную роль в извлечении структурированной информации из неструктурированных источников, таких как необработанный текст. В этой записной книжке мы демонстрируем два варианта использования извлечения отношений.

Точная настройка предварительно обученной модели на пользовательском наборе данных

Мы используем модель извлечения отношений, построенную на BERT-база-без корпуса модель с использованием трансформаторов от Трансформеры «Обнимающее лицо» библиотека. Модель для тонкой настройки присоединяется к линейному классификационному слою, который принимает пару вложений токенов, выведенных моделью встраивания текста, и инициализирует параметры слоя случайными значениями. На этапе точной настройки настраиваются все параметры модели, чтобы свести к минимуму ошибку прогнозирования входных данных, и возвращается настроенная модель.

Набор данных, который мы настраиваем для модели, СемЭвал-2010 Задание 8. Модель, возвращенная тонкой настройкой, может быть дополнительно развернута для логического вывода.

Набор данных содержит обучающие, проверочные и тестовые наборы.

Мы используем AWS PyTorch DLC с режимом сценария из SageMaker Python SDK, где transformers библиотека устанавливается как зависимость поверх контейнера. Мы определяем SageMaker PyTorch оценщик и набор гиперпараметров, таких как предварительно обученная модель, скорость обучения и номера эпох, для выполнения точной настройки. Код для тонкой настройки модели извлечения отношений определен в entry_point.py, Смотрите следующий код:

hyperparameters = {
    "pretrained-model": "bert-base-uncased",
    "learning-rate": 0.0002,
    "max-epoch": 2,
    "weight-decay": 0,
    "batch-size": 16,
    "accumulate-grad-batches": 2,
    "gradient-clip-val": 1.0
}

re_estimator = PyTorch(
    framework_version='1.5.0',
    py_version='py3',
    entry_point='entry_point.py',
    source_dir='../containers/relationship_extraction',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=train_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    base_job_name=training_job_name,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    debugger_hook_config=False
)

re_estimator.fit(
    {
        "train": f"s3://{bucket}/{prefix}/train/",
        "validation": f"s3://{bucket}/{prefix}/validation/",
    }
)

Учебное задание занимает примерно 31 минуту. Мы используем эту модель, чтобы сделать вывод о наборе тестов удержания и оценить результаты, используя точность, Макрос F1и F1 микро баллы. На следующем снимке экрана показаны оценки.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Дальнейшее повышение производительности тонкой настройки с помощью автоматической настройки модели SageMaker.

Как и в предыдущих разделах, мы используем HyperparameterTuner объект для взаимодействия с API настройки гиперпараметров SageMaker. Мы можем начать работу по настройке гиперпараметров, вызвав метод fit Метод:

hyperparameters = {
    "max-epoch": 2,
    "weight-decay": 0,
    "batch-size": 16,
    "accumulate-grad-batches": 2,
    "gradient-clip-val": 1.0
}

estimator = PyTorch(
    framework_version='1.5.0',
    py_version='py3',
    entry_point='entry_point.py',
    source_dir='../containers/relationship_extraction',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=train_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    base_job_name=tuning_job_name,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    debugger_hook_config=False
    
    re_tuner = HyperparameterTuner(
    estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=tuning_job_name,
)

re_tuner.fit({
    "train": f"s3://{bucket}/{prefix}/train/",
    "validation": f"s3://{bucket}/{prefix}/validation/",
})

Когда работа по настройке гиперпараметров завершена, мы делаем вывод и проверяем оценку.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Мы видим, что модель с HPO показывает лучшую производительность на тестовых данных удержания.

Резюме документа

Резюме документа или текста — это задача объединения больших объемов текстовых данных в меньшее подмножество осмысленных предложений, представляющих наиболее важную или релевантную информацию в исходном содержании. Резюме документа — это полезная техника для извлечения важной информации из больших объемов текстовых данных в несколько предложений. Обобщение текста используется во многих случаях, таких как обработка документов и извлечение информации из блогов, статей и новостей.

В этой записной книжке показано развертывание модели суммирования документов. T5-база из Трансформеры «Обнимающее лицо» библиотека. Мы также тестируем развернутые конечные точки с помощью текстовой статьи и оцениваем результаты с помощью встроенной метрики оценки Hugging Face. RED.

Как и в тетрадях для ответов на вопросы и NER, мы используем PyTorchModel из SageMaker Python SDK вместе с entry_point.py сценарий для загрузки базовой модели T5 в конечную точку HTTPS. После успешного развертывания конечной точки мы можем отправить текстовую статью в конечную точку, чтобы получить прогнозный ответ:

ARTICLE = """ Documents are a primary tool for communication,
collaboration, record keeping, and transactions across industries,
including financial, medical, legal, and real estate. The format of data
can pose an extra challenge in data extraction, especially if the content
is typed, handwritten, or embedded in a form or table. Furthermore,
extracting data from your documents is manual, error-prone, time-consuming,
expensive, and does not scale. Amazon Textract is a machine learning (ML)
service that extracts printed text and other data from documents as well as
tables and forms. We’re pleased to announce two new features for Amazon
Textract: support for handwriting in English documents, and expanding
language support for extracting printed text from documents typed in
Spanish, Portuguese, French, German, and Italian. Many documents, such as
medical intake forms or employment applications, contain both handwritten
and printed text. The ability to extract text and handwriting has been a
need our customers have asked us for. Amazon Textract can now extract
printed text and handwriting from documents written in English with high
confidence scores, whether it’s free-form text or text embedded in tables
and forms. Documents can also contain a mix of typed text or handwritten
text. The following image shows an example input document containing a mix
of typed and handwritten text, and its converted output document.."""

data = {'text': ARTICLE}
response = predictor.predict(data=data)
print(response['summary'])

"""Amazon Textract is a machine learning (ML) service that extracts printed text 
and other data from documents as well as tables and forms . 
customers can now extract and process documents in more languages .
support for handwriting in english documents and expanding language support for extracting 
printed text ."""

Далее мы оцениваем и сравниваем текстовую статью и результат обобщения с помощью метрики ROUGE. Рассчитываются три оценочных показателя: rougeN, rougeLи rougeLsum. rougeN измеряет количество совпадений n-grams между сгенерированным моделью текстом (результатом суммирования) и reference (введите текст). Метрики rougeL и rougeLsum измерить самые длинные совпадающие последовательности слов, ища самые длинные общие подстроки в сгенерированных и справочных сводках. Для каждой метрики рассчитываются доверительные интервалы для точности, полноты и оценки F1. См. следующий код:

results = rouge.compute(predictions=[response['summary']], references=[ARTICLE])

rouge1: AggregateScore(low=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823), 
mid=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823), high=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823))

rouge2: AggregateScore(low=Score(precision=0.9565217391304348, recall=0.1004566210045662, fmeasure=0.18181818181818182), 
mid=Score(precision=0.9565217391304348, recall=0.1004566210045662, fmeasure=0.18181818181818182), high=Score(precision=0.9565217391304348, recall=0.1004566210045662, 
fmeasure=0.18181818181818182))

rougeL: AggregateScore(low=Score(precision=0.8085106382978723, recall=0.08656036446469248, fmeasure=0.15637860082304528), 
mid=Score(precision=0.8085106382978723, recall=0.08656036446469248, fmeasure=0.15637860082304528), high=Score(precision=0.8085106382978723, recall=0.08656036446469248, 
fmeasure=0.15637860082304528))

rougeLsum: AggregateScore(low=Score(precision=0.9787234042553191, recall=0.10478359908883828, fmeasure=0.18930041152263374), 
mid=Score(precision=0.9787234042553191, recall=0.10478359908883828, fmeasure=0.18930041152263374), high=Score(precision=0.9787234042553191, recall=0.10478359908883828, 
fmeasure=0.18930041152263374))

Убирать

Ресурсы, созданные для этого решения, можно удалить с помощью Удалить все ресурсы кнопку из SageMaker Studio IDE. Каждая записная книжка также содержит раздел очистки с кодом для удаления конечных точек.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Заключение

В этом посте мы продемонстрировали, как использовать современные методы машинного обучения для решения пяти различных задач НЛП: обобщение документов, классификация текста, вопросы и ответы, распознавание именованных сущностей и извлечение отношений с помощью Jumpstart. Начните работу с Jumpstart прямо сейчас!


Об авторах

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Доктор Синь Хуан — научный сотрудник Amazon SageMaker JumpStart и встроенных алгоритмов Amazon SageMaker. Он занимается разработкой масштабируемых алгоритмов машинного обучения. Его исследовательские интересы лежат в области обработки естественного языка, объяснимого глубокого обучения на табличных данных и надежного анализа непараметрической пространственно-временной кластеризации. Он опубликовал множество статей на конференциях ACL, ICDM, KDD и в журнале Royal Statistical Society: Series A.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Вивек Гангасани является старшим архитектором решений для машинного обучения в Amazon Web Services. Он помогает стартапам создавать и внедрять приложения AI/ML. В настоящее время он сосредоточен на объединении своего опыта работы с контейнерами и машинным обучением для предоставления решений для MLOps, ML Inference и low-code ML. В свободное время он любит посещать новые рестораны и изучать новые тенденции в области искусственного интеллекта и глубокого обучения.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Джереми Коэн является архитектором решений в AWS, где он помогает клиентам создавать передовые облачные решения. В свободное время он любит короткие прогулки по пляжу, исследует залив со своей семьей, ремонтирует вещи в доме, ломает вещи в доме и готовит барбекю.

Выявляйте ключевые данные из текстовых документов посредством тонкой настройки и HPO с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Нилам Кошия является архитектором корпоративных решений в AWS. В настоящее время она сосредоточена на том, чтобы помочь корпоративным клиентам в принятии ими облачных решений для достижения стратегических результатов в бизнесе. В свободное время она любит читать и гулять на свежем воздухе.

Отметка времени:

Больше от Машинное обучение AWS