Эта статья является частью учебной серии о txtai , Семантический поисковый платформ с AI с AI.
Объятие модели лица Model Hub Имеет широкий спектр моделей, которые могут выполнять многие задачи. В то время как эти модели работают хорошо, лучшая производительность часто встречается при тонкой настройке модели с данными для конкретных задач.
Объятное лицо обеспечивает Количество полнофункциональных примеров Чтобы помочь с учебными моделями, специфичными для задачи. При создании моделей из командной строки эти сценарии – отличный способ начать работу.
TXTAI предоставляет тренировочный трубопровод, который можно использовать для программного обучения новых моделей с использованием структуры тренеров Transformers.
Этот пример обучает небольшой модели QA, а затем дополнительно настраивает ее с парой новых примеров (несколько выстрелов).
Установить txtai
и все зависимости.
pip install txtai datasets pandas
Первым шагом является обучение модели Squad 2.0. Отряд-это набор данных с ответом на вопрос, который ставит вопрос с контекстом вместе с идентифицированным ответом. Также возможно не иметь ответа. Смотрите Сайт набора данных отряда за дополнительной информацией.
Мы будем использовать крошечную модель Bert с частью отряда 2.0 для целей эффективности.
from datasets import load_dataset from txtai.pipeline import HFTrainer ds = load_dataset("squad_v2") trainer = HFTrainer() trainer("google/bert_uncased_L-2_H-128_A-2", ds["train"].select(range(3000)), task="question-answering", output_dir="bert-tiny-squadv2") print("Training complete")
Далее мы добавим несколько дополнительных примеров. Точная настройка модели QA поможет создать определенный тип вопроса или улучшить производительность для конкретного варианта использования.
Для более мелких моделей с узким вариантом использования это помогает модели нулевым в типах вопросов, которые должны быть заданы. В этом случае мы хотим сообщить модели именно о типах информации, которую мы ищем при просьбе ингредиентов. Это поможет улучшить уверенность в ответах, которые генерирует модель.
# Training data data = [ {"question": "What ingredient?", "context": "Pour 1 can whole tomatoes", "answers": "tomatoes"}, {"question": "What ingredient?", "context": "Dice 1 yellow onion", "answers": "onion"}, {"question": "What ingredient?", "context": "Cut 1 red pepper", "answers": "pepper"}, {"question": "What ingredient?", "context": "Peel and dice 1 clove garlic", "answers": "garlic"}, {"question": "What ingredient?", "context": "Put 1/2 lb beef", "answers": "beef"}, ] model, tokenizer = trainer("bert-tiny-squadv2", data, task="question-answering", num_train_epochs=10)
Теперь мы готовы проверить результаты! В следующих разделах запускается вопрос против исходной модели, обученной только с командой 2.0, и еще одной тонкой модели.
from transformers import pipeline questions = pipeline("question-answering", model="bert-tiny-squadv2") questions("What ingredient?", "Peel and dice 1 shallot")
{'answer': 'dice 1 shallot', 'end': 23, 'score': 0.05128436163067818, 'start': 9}
from transformers import pipeline questions = pipeline("question-answering", model=model.to("cpu"), tokenizer=tokenizer) questions("What ingredient?", "Peel and dice 1 shallot")
{'answer': 'shallot', 'end': 23, 'score': 0.13187439739704132, 'start': 16}
Посмотрите, как результаты более уверены и имеют лучший ответ. Этот метод позволяет использовать меньшую модель с узким набором функциональности с ростом повышенной скорости. Попробуйте свои собственные данные!
Оригинал: “https://dev.to/neuml/train-a-qa-model-1l08”