Визначайте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Визначте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart

Організаціям у таких галузях, як роздрібна торгівля, банківська справа, фінанси, охорона здоров’я, виробництво та кредитування, часто доводиться мати справу з величезною кількістю неструктурованих текстових документів, які надходять із різних джерел, таких як новини, блоги, огляди продуктів, канали підтримки клієнтів і соціальні мережі. Ці документи містять важливу інформацію, яка є ключовою для прийняття важливих бізнес-рішень. У міру зростання організації стає складним завданням отримати важливу інформацію з цих документів. Завдяки вдосконаленню технологій обробки природної мови (NLP) і машинного навчання (ML) ми можемо швидко й з високою точністю виявляти цінну інформацію та зв’язки з цих текстових документів, допомагаючи компаніям своєчасно приймати якісні бізнес-рішення. Повністю керовані послуги НЛП також прискорили впровадження НЛП. «Амазонка» – це повністю керована послуга, яка дає вам змогу створювати користувацькі моделі НЛП відповідно до ваших вимог без будь-яких знань у ML.

У цьому дописі ми демонструємо, як використовувати найсучасніші методи ML для вирішення п’яти різних завдань NLP: узагальнення документів, класифікація тексту, відповіді на запитання, розпізнавання іменованих сутностей і вилучення зв’язків. Для кожного з цих завдань НЛП ми демонструємо, як використовувати Amazon SageMaker виконати такі дії:

  • Розгорніть і запустіть висновок на попередньо навченій моделі
  • Тонко налаштуйте попередньо навчену модель на новому спеціальному наборі даних
  • Подальше вдосконалення продуктивності тонкого налаштування за допомогою Автоматичне налаштування моделі SageMaker
  • Оцініть продуктивність моделі на основі даних тестування за допомогою різних оціночних показників

Незважаючи на те, що в цій публікації ми розглядаємо п’ять конкретних завдань NLP, ви можете використовувати це рішення як шаблон для узагальнення точного налаштування попередньо навчених моделей за допомогою вашого власного набору даних, а потім запустити оптимізацію гіперпараметрів для підвищення точності.

Шаблони рішень JumpStart

Amazon SageMaker JumpStart надає наскрізні рішення в один клік для багатьох поширених випадків використання машинного навчання. Ознайомтеся з такими варіантами використання, щоб отримати додаткові відомості про доступні шаблони рішень:

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

На цільовій сторінці JumpStart виберіть шаблон рішення, який найкраще підходить для вашого випадку використання. Щоб отримати додаткові відомості про конкретні рішення для кожного випадку використання та про те, як запустити рішення JumpStart, див Шаблони рішень.

Огляд рішення

На наступному зображенні показано, як можна використовувати це рішення з компонентами SageMaker. Навчальні завдання SageMaker використовуються для навчання різних моделей NLP, а кінцеві точки SageMaker використовуються для розгортання моделей на кожному етапі. Ми використовуємо Служба простого зберігання Amazon (Amazon S3) разом із SageMaker для зберігання навчальних даних і артефактів моделі, а також Amazon CloudWatch для реєстрації виходів навчання та кінцевих точок.

Відкрийте рішення «Розуміння документа».

Перейдіть до рішення «Розуміння документів» у JumpStart.

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

Визначайте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

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

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

Після запуску рішення Document Understanding відкрийте демонстраційний блокнот, вибравши Використовуйте кінцеву точку в блокноті.

Визначайте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

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

Передумови

In Студія Amazon SageMaker, переконайтеся, що ви використовуєте PyTorch 1.10 Python 3.8 CPU Optimized зображення/ядро, щоб відкрити блокноти. Навчання використовує п’ять екземплярів ml.g4dn.2xlarge, тому вам слід підняти a запит на збільшення ліміту послуги якщо ваш обліковий запис вимагає збільшених лімітів для цього типу.

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

Класифікація тексту відноситься до класифікації вхідного речення за однією з міток класу навчального набору даних. Цей блокнот демонструє, як користуватися 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. Вертикальний пошук. Ai.

Ще більше покращте ефективність точного налаштування за допомогою автоматичного налаштування моделі SageMaker

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

По-перше, ми встановили мету як показник точності даних перевірки (val_accuracy) і визначив метрики для завдання налаштування, вказавши ім’я цільової метрики та регулярний вираз (регулярний вираз). Регулярний вираз використовується для узгодження вихідних даних алгоритму та запису числових значень показників. Далі ми вказуємо діапазони гіперпараметрів, щоб вибрати найкращі значення гіперпараметрів. Ми встановлюємо загальну кількість завдань налаштування як шість і розподіляємо ці завдання на три різні Обчислювальна хмара Amazon Elastic (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 об'єкт як параметр для HyperparameterTuner конструктор і викличте 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. Вертикальний пошук. Ai.

Результати показують, що модель, вибрана за допомогою автоматичного налаштування моделі, значно перевершує модель, налаштовану в попередньому розділі на наборі даних для тестування.

Розпізнавання іменованих об’єктів

Розпізнавання іменованих об’єктів (NER) — це процес виявлення та класифікації іменованих об’єктів за попередньо визначеними категоріями, такими як імена осіб, організацій, місцезнаходження та кількості. Існує багато реальних прикладів використання NER, таких як механізми рекомендацій, категоризація та призначення запитів на підтримку клієнтів потрібному відділу, вилучення важливої ​​інформації зі звітів пацієнтів у сфері охорони здоров’я та класифікація вмісту з новин і блогів.

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

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

Далі, точка входу для сценарію (аргумент entry_point.py), містить увесь код для завантаження En_core_web_md моделювати та робити висновки щодо даних, які надсилаються до кінцевої точки. Нарешті, нам ще потрібно забезпечити model_data як попередньо підготовлену модель для висновку. Тому що попередньо навчені En_core_web_md модель завантажується на льоту, що вказано в скрипті входу, надаємо порожній архівний файл. Після розгортання кінцевої точки ви можете викликати її безпосередньо з блокнота за допомогою SDK SageMaker Python 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()
)

Вхідними даними для моделі є текстовий документ. Модель іменованих сутностей виділяє фрагменти іменників і іменовані сутності в текстовому документі та класифікує їх за різними типами (такими як люди, місця та організації). Приклади введення та виведення показані в наступному коді. The 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 на вашому власному наборі даних. Етап тонкого налаштування оновлює параметри моделі, щоб охопити характеристики ваших власних даних і підвищити точність. Ми використовуємо WikiANN (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. Вертикальний пошук. Ai.

Ще більше покращте ефективність точного налаштування за допомогою автоматичного налаштування моделі 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. Вертикальний пошук. Ai.

Ми бачимо, що модель з HPO досягає значно кращої продуктивності за всіма показниками.

Відповідь на запитання

Функція відповіді на запитання корисна, коли потрібно запитати велику кількість тексту для отримання конкретної інформації. Це дозволяє користувачеві поставити запитання природною мовою та отримати негайну та коротку відповідь. Системи відповідей на запитання, що працюють на базі НЛП, можна використовувати в пошукових системах та інтерфейсах телефонної розмови.

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

Наша попередньо навчена модель – це модель екстрактивних відповідей на питання (EQA). bert-large-uncased-whole-word-masking-finetuned-squad побудований на моделі Transformer від Hugging Face. Ми використовуємо DLC AWS PyTorch із режимом сценарію та встановлюємо Трансформатори бібліотека як залежність поверх контейнера. Подібно до завдання NER, ми надаємо порожній файл архіву в аргументі model_data оскільки попередньо навчена модель завантажується на льоту. Після розгортання кінцевої точки ви можете викликати її безпосередньо з блокнота за допомогою SDK SageMaker Python 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-uncased від Hugging Face. Модель, доступна для точного налаштування, приєднує шар вилучення відповіді до моделі вбудовування тексту та ініціалізує параметри шару до випадкових значень. Етап тонкого налаштування точно налаштовує всі параметри моделі, щоб мінімізувати помилку передбачення вхідних даних, і повертає точно налаштовану модель.

Подібно до завдання класифікації тексту, набір даних (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. Вертикальний пошук. Ai.

Ще більше покращте ефективність точного налаштування за допомогою автоматичного налаштування моделі SageMaker

Подібно до попередніх розділів, ми використовуємо a 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. Вертикальний пошук. Ai.

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

Вилучення відносин

Вилучення зв’язків — це завдання вилучення семантичних зв’язків із тексту, які зазвичай виникають між двома або більше об’єктами. Вилучення зв’язків відіграє важливу роль у вилученні структурованої інформації з неструктурованих джерел, таких як необроблений текст. У цьому блокноті ми демонструємо два варіанти використання вилучення зв’язків.

Тонко налаштуйте попередньо навчену модель на спеціальному наборі даних

Ми використовуємо модель вилучення зв’язків, побудовану на a BERT-основа без корпусу моделі з використанням трансформаторів від Трансформери Hugging Face бібліотека. Модель для точного налаштування приєднує рівень лінійної класифікації, який приймає пару вбудованих маркерів, виведених моделлю вбудованого тексту, і ініціалізує параметри шару до випадкових значень. Етап тонкого налаштування точно налаштовує всі параметри моделі, щоб мінімізувати помилку передбачення вхідних даних, і повертає точно налаштовану модель.

Набір даних, який ми налаштовуємо на модель SemEval-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. Вертикальний пошук. Ai.

Ще більше покращте ефективність точного налаштування за допомогою автоматичного налаштування моделі SageMaker

Подібно до попередніх розділів, ми використовуємо a 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. Вертикальний пошук. Ai.

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

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

Резюмування документа або тексту — це завдання конденсації великої кількості текстових даних у меншу підмножину осмислених речень, які представляють найважливішу або відповідну інформацію в оригінальному вмісті. Резюмування документів є корисною технікою для виділення важливої ​​інформації з великої кількості текстових даних у кілька речень. Резюмування тексту використовується в багатьох випадках використання, таких як обробка документів і отримання інформації з блогів, статей і новин.

Цей блокнот демонструє розгортання моделі підсумовування документів Т5-основа від Трансформери Hugging Face бібліотека. Ми також тестуємо розгорнуті кінцеві точки за допомогою текстової статті та оцінюємо результати за допомогою вбудованої метрики оцінки Hugging Face ЧЕРВОНИЙ.

Подібно до зошитів для відповідей на запитання та 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 між створеним моделлю текстом (результатом підсумовування) і a 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))

Прибирати

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

Визначайте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Висновок

У цьому дописі ми продемонстрували, як використовувати найсучасніші методи ML для вирішення п’яти різних завдань NLP: узагальнення документів, класифікація тексту, запитання та відповіді, розпізнавання іменованих об’єктів і вилучення зв’язків за допомогою Jumpstart. Почніть роботу з Jumpstart зараз!


Про авторів

Визначайте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Доктор Синь Хуан є прикладним науковцем для вбудованих алгоритмів Amazon SageMaker JumpStart і Amazon SageMaker. Він зосереджується на розробці масштабованих алгоритмів машинного навчання. Його наукові інтереси пов’язані з обробкою природної мови, глибоким вивченням табличних даних та надійним аналізом непараметричної просторово-часової кластеризації. Він опублікував багато робіт у конференціях ACL, ICDM, KDD та журналі Royal Statistical Society: Series A.

Визначайте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Вівек Гангасані є старшим архітектором рішень машинного навчання в Amazon Web Services. Він допомагає стартапам створювати та вводити в дію програми AI/ML. Зараз він зосереджений на поєднанні свого досвіду в контейнерах і машинному навчанні, щоб надавати рішення щодо MLOps, ML Inference і ML з низьким кодом. У вільний час він любить пробувати нові ресторани та досліджувати нові тенденції в штучному інтелекті та глибокому навчанні.

Визначайте ключову інформацію з текстових документів за допомогою точного налаштування та HPO за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Джеремі Коен є архітектором рішень з AWS, де він допомагає клієнтам створювати передові хмарні рішення. У вільний час він любить короткі прогулянки по пляжу, досліджуючи район затоки з родиною, лагодити речі по дому, ламати речі по дому та готувати барбекю.

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

Часова мітка:

Більше від AWS Машинне навчання