Благодаря этим двум статьям:
Обобщение — курс «Обнимание лица
В этом разделе мы рассмотрим, как модели Transformer можно использовать для сжатия длинных документов в резюме,…обнимание лица .co»
Суммирование текста является одной из самых интересных задач в машинном обучении, а также сложной задачей, в таких задачах, как суммирование текста, где мы должны генерировать текст, мы используем модели seq2seq, и благодаря современным моделям Transformer, доступным на HuggingFace, мы можем достичь современных результатов и для наших целей.
Давайте разберемся с нашей задачей для этой статьи:
У нас есть текст, и мы хотим создать его резюме, если быть точным, Абстрактное резюме.
Абстрактные резюме — это те, где мы генерируем новый текст, новые предложения, противоположные экстрактивным, где мы используем те же строки из входного текста.
Давайте начнем код,
Сначала давайте посмотрим, какой набор данных мы будем использовать для нашей задачи,
Я использовал Google Colab для запуска, поэтому давайте сначала импортируем библиотеки, которые мы будем использовать.
Загрузите необходимый набор данных из библиотеки HuggingFace, используя ‘load_dataset()’
Подробнее об этом методе:
В load_dataset() передаются два параметра: один — ссылка для xlsum, а второй — «english», то есть версию набора данных, которую вы хотите использовать.
Давайте посмотрим на набор данных
Итак, в datasetdict у нас есть информация о наборе данных, где у нас есть набор данных для обучения, тестирования и проверки.
а затем получить доступ к DatasetDict в качестве словаря, а затем вы можете увидеть сводку и текст из новостных статей BBC.
Используя t5-маленькую модель трансформатора,
T5, или преобразователь преобразования текста в текст, представляет собой архитектуру на основе преобразователя, в которой используется подход преобразования текста в текст. Каждая задача, включая перевод, ответы на вопросы и классификацию, представляет собой подачу модельного текста в качестве входных данных и обучение его созданию некоторого целевого текста.
Прежде чем мы сможем передать эти тексты нашей модели, нам нужно их предварительно обработать. Это делается с помощью 🤗 Transformers Tokenizer
, которые (как следует из названия) токенизируют входные данные (включая преобразование токенов в соответствующие идентификаторы в предварительно обученном словаре) и помещают их в формат, ожидаемый моделью, а также генерируют другие входные данные. что требует модель.
Для всего этого мы создаем экземпляр нашего токенизатора с помощью метода AutoTokenizer.from_pretrained
, который обеспечит:
- мы получаем токенизатор, соответствующий архитектуре модели, которую мы хотим использовать,
- мы загружаем словарный запас, используемый при предварительном обучении этой конкретной контрольной точки.
Этот словарь будет кэширован, поэтому он не будет загружаться снова при следующем запуске ячейки.
Если вы используете одну из пяти контрольных точек T5, мы должны снабдить входные данные префиксом «summarize:» (модель также может переводить, и ей нужен префикс, чтобы знать, какую задачу она должна выполнить).
Затем мы можем написать функцию, которая будет предварительно обрабатывать наши образцы. Мы просто скармливаем их tokenizer
с аргументом truncation=True
. Это гарантирует, что входные данные, длина которых превышает возможности выбранной модели, будут усечены до максимальной длины, допустимой моделью.
Чтобы применить эту функцию ко всем парам предложений в нашем наборе данных, мы просто используем метод map
нашего объекта dataset
, который мы создали ранее. Это применит функцию ко всем элементам всех расщеплений в dataset
, поэтому наши данные обучения, проверки и тестирования будут предварительно обработаны одной единственной командой.
Теперь мы преобразовали наши входы в токены, и теперь мы готовы передать их в модель.
Обратите внимание, что мы передали batched=True
для кодирования текстов пакетами вместе. Это сделано для того, чтобы в полной мере использовать преимущества быстрого токенизатора, который мы загрузили ранее, который будет использовать многопоточность для одновременной обработки текстов в пакете.
Как я упоминал ранее, это задача для Seq2Seq, поэтому мы соответствующим образом импортировали модель,
Теперь что такое DataCollatorForSeq2Seq:
Сопоставители данных — это объекты, которые образуют пакет, используя в качестве входных данных список элементов набора данных. Эти элементы того же типа, что и элементы train_dataset
или eval_dataset
.
Чтобы иметь возможность создавать пакеты, сортировщики данных могут применять некоторую обработку (например, заполнение). Некоторые из них (например, DataCollatorForLanguageModeling) также применяют некоторую аугментацию случайных данных (например, случайное маскирование) к формируемому пакету.
Создание данных обучения и проверки для обучения модели
Обратите внимание, что я использовал данные проверки для обучения, потому что хотел обучить его быстрее и только в учебных целях.
Исправление некоторых параметров!
Компиляция модели и вход в модель Hugging Face, чтобы мы могли загрузить ее для дальнейшего использования для вывода.
Тренировочная модель и отталкивание ее от Hugging Face Hub
Использование этой модели с методом Transformer Pipeline и использование ее для вывода.
Теперь просто передайте статью, которую вы хотите обобщить, и БУМ, вот ваш обобщающий текст.
ПРИМЕЧАНИЕ. Я не показывал здесь матрицу румян, потому что здесь я просто хотел показать шаблон для точной настройки модели.
И ребята! Это моя первая статья на Medium, надеюсь, она будет полезна.