Пакет на основе PyTorch для обработки, дополнения, обучения и выполнения выводов по наборам данных SOTA Argument Mining.

Анализ аргументов (AM) — это задача извлечения компонентов аргументов из текста, как правило, в рамках систем автоматической оценки письма. Это очень горячая и захватывающая область НЛП. Проще говоря, хорошая модель AM берет необработанный фрагмент текста и правильно маркирует последовательности внутри него как компоненты аргумента, которым они принадлежат (это графически показано на фотографии обложки). Хотя исторически эта проблема рассматривалась как проблема семантической сегментации, современные (SOTA) методы AM рассматривают ее как проблему распознавания именованных объектов (NER) в длинных последовательностях текста.

Несмотря на историю этой области, литературы по наборам данных NER AM относительно мало, а Аргументированные аннотированные эссе Кристиана Стаба и Ирины Гуревич являются единственным вкладом с 2014 года. Совсем недавно (по состоянию на март 2022 года) ситуация улучшилась с выпуском наборов данных PERSUADE (используется в конкурсе Feedback Prize Kaggle Competition) и ARG2020 (страница GitHub). Из-за этого, хотя AM на отдельных наборах данных в прошлом был успешным, очень мало известно о производительности моделей AM на разных наборах данных. Таким образом, также не проводилось исследований того, как состязательное обучение может улучшить производительность моделей AM на разных наборах данных. Также отсутствуют исследования устойчивости моделей AM к состязательным примерам.

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

В этой статье представлен ArgMiner, пакет на основе PyTorch для стандартизации обработки данных, дополнения данных, обучения и логического вывода по наборам данных SOTA Argument Mining с использованием моделей на основе Transformer. Статья начинается с общего описания функций пакета, за которым следует описание наборов данных SOTA. Затем подробно описываются функции обработки и расширения ArgMiner. Наконец, кратко обсуждаются вывод и оценка моделей интеллектуального анализа аргументов (через веб-приложение). Статья заканчивается некоторыми заключительными замечаниями.

ArgMiner в двух словах

Основные функции ArgMiner приведены ниже:

  • Предоставляет процессорам возможность извлекать наборы данных SOTA из источника без написания дополнительной строки кода.
  • Процессоры могут генерировать следующие методы маркировки {io, bio, bieo, bixo} как на уровне слов, так и на уровне подтокенов без дополнительной строки кода.
  • Процессоры имеют встроенную функцию, которая позволяет выполнять пользовательские расширения без изменения конвейера обработки данных.
  • Предоставляет набор данных PyTorch для тонкой настройки интеллектуального анализа аргументов с любой моделью HuggingFace TokenClassification.
  • Обеспечивает эффективный конвейер для обучения и логического вывода

На изображении ниже показано, как ArgMiner работает от начала до конца:

Обработка и увеличение

Наборы данных

  • Аргументированные аннотированные эссе (AAE): это коллекция из 402 эссе, найденных на онлайн-форуме отзывов об эссе essayforum. Он имеет 3 компонента аргумента: Claim, MajorClaim, Premise. Набор данных можно найти в хранилище данных TUDarmstadt; исходный документ находится в ACL, последующий документ находится в MIT Press Direct.
  • УБЕЖДЕНИЕ: это сборник из примерно 15 000 сочинений, написанных учащимися 6–12 классов из США. Он состоит из 7 аргументов: Ведущий, Позиция, Требование, Встречный иск, Опровержение. , Доказательства и Заключение Заключение. Доступ к набору данных можно получить через конкурс Kaggle Feedback Prize.
  • ARG2020: это сборник из 145 сочинений учащихся средней школы. Он имеет 2 компонента аргумента: Утверждение и Предпосылка. Набор данных находится в открытом доступе на GitHub, а документ для этой работы — на ArXiv.

Эти наборы данных хранятся и обрабатываются по-разному. Например, наборы данных AAE и ARG2020 имеют файлы .ann, которые содержат два типа информации: 1) компоненты аргументов, которые имеют форму: [argument_component_id, arguments_component_text, span_start, span_end, text] и 2) отношения аргументов, которые имеют форма: [идентификатор_отношения, тип_отношения, компонент_аргумента_1, компонент_аргумента_2]. Отношения аргументов не требуются для интеллектуального анализа аргументов, поэтому их необходимо удалить. Кроме того, фактические идентификаторы эссе — это имена самих файлов, поэтому код для анализа должен это учитывать. Данные также поставляются с файлами .txt для необработанных текстов эссе. В отличие от ARG2020, набор данных AAE поставляется с идентификаторами тестов поезда, которые можно использовать для разделения данных.

С другой стороны, набор данных PERSUADE имеет более сложную структуру каталогов с каталогами обучения и тестирования, которые включают необработанные эссе в формате .txt. Актуальная информация о компонентах аргумента содержится в файле train.csv, который имеет следующий вид: [essay_id, discourse_id, span_start, span_end, discourse_text, discourse_type, discourse_type_num, Predictionstring].

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

Чтобы обработать эти сильно различающиеся необработанные тексты в стандартном формате, ArgMiner использует 3 этапа: предварительная обработка, обработка и постобработка. Они описаны более подробно в следующих разделах.

Предварительная обработка: извлечение данных из источника

На этом этапе данные берутся в необработанном формате (для каждого набора данных) и используются функции span_start и span_end, а также необработанные тексты для создания DataFrame со следующей структурой: >[идентификатор_эссе, текст, компонент_аргумента].

Это позволяет использовать стандартный метод продвижения вперед для создания меток NER или добавления данных. Все процессоры основаны на базовом классе DataProcessor, который имеет встроенные функции для сохранения и применения обучения, тестирования и разделения, поэтому на его основе можно легко создавать новые процессоры.

Обработка: создание меток и (необязательно) добавление данных

Теперь, когда данные представлены в стандартном формате, пользователь может запросить создание меток в стиле NER для данных. К концу этого шага набор данных будет выглядеть следующим образом: [essay_id, text, arguments_component, NER_labels].

Однако иногда может быть интересно увеличить данные либо для обучения состязательности, либо для проверки надежности на примерах состязательности. В этом случае пользователь может просто предоставить любую функцию, которая берет фрагмент текста и возвращает дополненный фрагмент текста. Это означает, что другие библиотеки дополнений НЛП, такие как textattack и nlpaug, могут быть легко использованы. Когда используется аугментер, данные сначала дополняются до

Постобработка: объединение последовательностей в документы

Последний шаг теперь очень прост, когда этикетки созданы. Здесь задача состоит в том, чтобы просто соединить сегменты по их doc_id. Результатом этого этапа является DataFrame в форме: [essay_id, full_essay_text, NER_labels]. Выполнение сплит-тестов также очень просто с использованием встроенных функций обучения и тестирования.

Набор данных PyTorch

Я не буду вдаваться в подробности о том, как работает этот код, но подчеркну, почему это здорово:

  • Набор данных PyTorch предназначен для получения входных данных с этапа .postprocess(). На этом этапе переменная strategy_level может определить, должна ли стратегия маркировки применяться к уровню word или token (см. конец раздела).
  • Набор данных расширяет метки классов до подэлементов. Это огромное улучшение по сравнению с примерами на Kaggle, потому что он векторизован и может эффективно использовать графический процессор.
  • Набор данных создает сопоставление, чтобы свести расширенные метки к их основным меткам для вывода (например, B-Claim, I-Claim, E-Claim — все они сокращаются до утверждения для целей вывода, если вы не уверены, я настоятельно рекомендую мой учебник по выводу NER)

Он также очень прост в использовании, и, поскольку он основан на PyTorch, вы можете легко интегрировать его для обучения. В качестве примера:

Небольшой пример маркировки: рассмотрим классический пример NER (без анализа аргументов) с предложением «Я Йоханнес Шмидт». Предположим, что маркерами являются I, am, Jo, hann, es, Sch, mi, dt. Стандартная схема биомаркировки будет давать: I → O, am → O, Jo → B-PER, hann → I-PER, es → I-PER, Sch → I-PER, mi → I-PER, dt → I- ПЕР. Однако вы можете захотеть присвоить меткам всего, что является токеном слова B-{}, метку B-{}. Это будет уровень слова. Таким образом, hann и es оба получают ярлыки B-PER. Наконец, ArgMiner поддерживает схему маркировки bixo, которая присваивает X всем вложенным токенам компонентов аргументов, что означает, что все hann, >es, mi и dt получают метку «X».

Вывод

ArgMiner также предоставляет функции для обучения моделей и создания логических выводов. Однако вы также можете написать свои собственные тренировочные циклы.

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

Цикл логического вывода также может быть очень полезен для обучения отладке данных, поскольку он позволяет добавлять другие метрики, которые вы хотите измерить. Затем они применяются к тензорам и к тензорам после преобразования подэлементов в слова, что может дать вам представление о том, где именно вы теряете производительность.

Еще одна функция, которая отличает этот цикл вывода от других, которые я видел, — это возможность легко выбирать уровень агрегации при обратном отображении токенов на слова. Например, имея два токена «Unit» и «ed» с вероятностями для каждого класса, вы можете объединить их в «United», используя только наилучшую вероятность для слова «Unit», наилучшую среднюю вероятность или наилучшую максимальную вероятность.

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

Подробное руководство по выводу, используемому для этого проекта, можно найти в другой моей статье на Medium.

Веб-приложение

ArgMiner поставляется с веб-приложением для просмотра результатов ваших моделей (или любой модели из HuggingFace), а также для оценки производительности моделей в пользовательских наборах данных, которые вы пишете сами. Это полезный (неформальный) способ проверки модели на конкретных примерах, чтобы увидеть, что она делает.

Заключительные замечания

  • В течение долгого времени литература по интеллектуальному анализу аргументов была очень скудной по наборам данных, но это изменилось с выпусками PERSUADE и ARG2020.
  • Необходимо провести много исследований по передаче знаний при анализе аргументов, а также по надежности. Обычно это сложно со стороны обработки данных из-за разных форматов исходных данных, нескольких методов представления данных и проблем с эффективностью из-за работы с неравными сегментами для представления и вывода.
  • ArgMiner — это пакет в раннем выпуске, который стандартизирует обработку, дополнение, обучение и выполнение логических выводов на наборах данных SOTA Argument Mining.

Некоторые ограничения и текущая работа

Хотя ядро ​​пакета готово, есть некоторые детали, которые необходимо сгладить, а также некоторые недостающие функции. Они описаны ниже:

  • DataProcessor для набора данных ARG2020
  • Функция расширения на данный момент может иметь только текст в качестве входных данных. Дальнейшие улучшения будут направлены на стандартизацию и других функций, например, если дополнения будут выполняться только для определенных классов. Это будет очень полезно для понимания модели, особенно для определения того, как конкретные преобразования могут повлиять на выходные данные модели.
  • Расширение класса DataProcessor, позволяющее проводить стратифицированные разбиения на поезда и тесты, а также разбиения на основе других функций, например. длина для обучения по учебной программе, класс для обучения с нулевым выстрелом

Обращение к энтузиастам НЛП

Если вы интересуетесь анализом аргументов и НЛП, и эта статья показалась вам интересной, я буду рад поболтать с вами и добавить вас в число соавторов проекта. Я надеюсь продвинуть этот проект намного дальше, выйдя за пределы выпуска раннего доступа, и реорганизовать часть кодовой базы в более общие библиотеки утилит НЛП, а также библиотеки/приложения для диагностики НЛП и надежности данных (я заинтересован во включении следующих проектов : Картография данных и Теоретико-информационная сложность набора данных). Это долгосрочные планы, которыми я очень взволнован, но не могу реализовать их как единственный разработчик. Если вы заинтересованы, пожалуйста, свяжитесь со мной через LinkedIn.

Репозиторий этого проекта находится в открытом доступе на GitHub.

Все изображения принадлежат автору, если не указано иное.