1 Аннотация
В эпоху Интернета нам дали роскошь бесконечных потоков быстро доступной информации. Хотя эта скорость передачи данных позволила нам продвинуться вперед с беспрецедентной скоростью, бремя сортировки того, что является правдой, а что нет, возросло для потребителя информации. Эта ложная информация или «фейковые новости» становится все более распространенной. Задача сортировки этой информации имеет монументальный масштаб, поэтому многие государственные учреждения и организации применяют искусственный интеллект для такой сортировки, чтобы облегчить часть потребительского бремени.
Организаторы Fake News Challenge, конкурса искусственного интеллекта, созданного для решения этой проблемы сортировки, считают, что полезным первым шагом к выявлению фейковых новостей является понимание того, что другие новостные организации говорят по теме. Этот процесс, называемый определением стойки, может служить полезным строительным блоком в конвейере проверки фактов с помощью ИИ. Они предоставляют набор данных и указывают цель маркировки того, согласуются ли конкретный заголовок и основная часть статьи, не согласны ли они, обсуждают ли они друг друга или не связаны между собой. Модель машинного обучения должна уметь различать метки.
Для решения этой задачи я использовал новейшие алгоритмы естественного языка. Включив эти модели, а также применив умное мышление, я смог как побить базовый уровень, так и выиграть баллы в соревновании (см. часть 5!). Этот пост призван стать всеобъемлющим рассказом о том, что я сделал для достижения таких результатов. Для быстрого чтения ознакомьтесь с разделами 3 и 5, и если вы не знакомы с набором данных, который я использовал, раздел 2 также является отличным введением.
Код можно найти на моем GitHub здесь.
Надеюсь, вам всем понравится! :)
2 Фон
2.1 Обзор литературы
Набор данных FNC был доступен в течение некоторого времени, поэтому для этого проекта был проведен значительный объем предыдущей работы, которую необходимо изучить и использовать. С момента выпуска данных FNC в 2017 году также произошли значительные улучшения в архитектуре языковой модели для задач классификации текста, таких как в этом проекте. Я использовал знания из предыдущей работы, чтобы экспериментировать и совершенствовать свою методологию, и я включил в процесс некоторые современные методы/модели.
Я начал с изучения методологий тех, кто добился лучших результатов на соревнованиях, и прочитал их соответствующие статьи. Papers With Code — отличный ресурс для изучения лучших статей и соответствующего кода для наборов данных о соревнованиях [1]. На сайте представлены самые современные результаты (SOTA) для набора данных FNC. На Рисунке 1 наилучший результат взвешенной точности для данных FNC составил ~90%, а остальная часть пакета достигла результатов взвешенной точности ниже 80-х.
При дальнейшем изучении литературы я заметил, что лучшим подходом к выбору модели является выбор современной нейронной сети, такой как преобразователь (BERT и связанные с ним модели). Я также поэкспериментирую с суммированием постов и буду наблюдать за любыми улучшениями в результатах моделирования.
2.2 Исследовательский анализ данных
Чтобы лучше понять данные, с которыми я работал, я начал этот проект с исследовательского анализа данных моих текстовых примеров и их позиции. Я хотел найти взаимосвязи и закономерности, которые затем можно было превратить в стратегии создания модели для предсказания позиции.
Учитывая, что это проблема классификации нескольких классов, мы должны сначала наблюдать за распределением несвязанных ярлыков, соглашаться, не соглашаться, обсуждать. На рисунке 2 по оси абсцисс указан конкретный класс, а по оси ординат количество каждого класса, представленное длиной каждого столбца. Над каждой полосой указан процент примеров, имеющих соответствующую метку класса в наборе обучающих данных.
На верхней гистограмме мы видим разбивку между связанными и несвязанными примерами. Я заметил, что набор обучающих данных несбалансирован в пользу несвязанного класса. Внизу мы видим дальнейшую разбивку связанных примеров на классы согласия, несогласия и обсуждения. Снова диаграмма внизу доказывает, что проблема несбалансированной классификации сохраняется при дальнейшем разбиении меток. Учитывая распределение меток, кажется, что наилучшей стратегией было бы разбить проблему классификации стойки на два этапа, чтобы помочь преодолеть дисбаланс. Модель первого этапа будет классифицировать примеры на несвязанные и связанные корзины, а другая модель будет классифицировать связанные сообщения на корзины согласия, несогласия, обсуждения. Я буду называть две части методологии классификации этапом 1 и этапом 2 соответственно.
Сначала сосредоточившись на этапе 1, я хотел определить, какие языковые аспекты связаны с заголовком и основной частью статьи. Что роднит их? Что делает их не связанными? Я изучил это и пришел к интересному выводу. Используя два примера на рисунке 3, я могу объяснить свое открытие.
Первая строка представляет собой связанный пример. Итак, какова связь между ними? Интересно, что их связывают существительные, которые являются общими между заголовком и телом статьи! Существительные Мишель Обама, Саудовская Аравия, связывают эти два фрагмента текста. Аналогично, вторая строка содержит несвязанный пример. Между заголовком и телом нет нарицательных существительных, в одном обсуждается событие Боко Харам, в другом — событие в Ираке. Очевидно, что эти два понятия не связаны между собой, но упомянутые существительные являются ключевыми словами, определяющими эту связь! Учитывая успех первого анализа, я перешел к Этапу 2 с целью определение того, что заставляет заголовок и основную часть статьи согласовываться, обсуждать или не соглашаться друг с другом. Я визуализирую некоторые примеры на рисунке 4.
В отличие от первой стадии, паттерн цели не ясен. Вероятно, в этом случае существует более сложная базовая функция, которая определяет классы. Для этого этапа, вероятно, потребуется более продвинутая модель.
3 Методология
3.1 Общий подход
Как указывалось ранее, я использовал двухэтапный подход к этой проблеме классификации. Я рассматриваю первый этап как проблему бинарной классификации, классифицируя пары статей и заголовков как связанные или не связанные. Второй этап рассматривается как задача классификации нескольких классов, принимая в качестве входных данных пары статья/тело, которые были помечены как связанные на этапе 1, а затем классифицируя их как согласующиеся, несогласные или обсуждаемые. Рисунок 5 иллюстрирует этот процесс вместе с промежуточными этапами.
3.2 Этап 1
На этапе 1 я выбрал менее традиционный подход для решения этой проблемы бинарной классификации. Обычно я использовал модель трансформатора для решения проблемы и точно настраивал ее на моем наборе данных и получал относительно хорошие результаты без особых усилий (когда я попробовал это, я достиг 92% точности без особых усилий). Используя «безмодельный» подход (методологию), мы действительно можем добиться большего успеха и стать конкурентоспособными с моделями SOTA из обзора литературы. Я решил, что этот подход будет интереснее/приятнее попробовать, что-то, что отличает мой подход от текущих методологий. Как показано в разделе 5 этого поста, я довольно успешно его использовал.
В моем EDA я узнал, что существительные (например, шляпа, мальчик, мать), имена собственные (например, Карен, Канада), а иногда и числа дают сильный сигнал о том, связаны ли пара заголовок/основная часть. В моем подходе я оставляю только эти существительные и выбрасываю все остальное. Я использую WordNet NLTK и распознавание сущностей для пометки, удаления не-существительных, выделения корней и лемматизации. Я заметил, что специальные символы ($, #, %) могут быть обнаружены в процессе пометки, поэтому я удаляю их на этапе очистки текста перед выполнением пометки. На рисунках 6 и 7 показаны примеры окончания этого процесса. Мы можем заметить, что в переменных headline_ents и body_ents остаются существительные и числа.
Теперь, когда я извлек существительные, мне нужно каким-то образом сравнить два набора существительных на предмет сходства. У меня было несколько вариантов подсчета баллов, однако самый простой вариант — индекс сходства Жаккара [3] — оказался самым сильным сигналом относительно связи между заголовком и основной частью. Индекс Жаккара, также известный как коэффициент сходства Жаккара, представляет собой статистику, используемую для оценки сходства и разнообразия выборочных наборов, которая дает значение от 0 (нет общих элементов набора) до 1 (наборы являются точными копиями). Для моей задачи я, по сути, подсчитываю количество общих существительных, нормализованных по размеру общего набора существительных. Индекс Жаккара между заголовком (A) и основной частью (B) рассчитывается по следующему уравнению:
Когда я впервые экспериментировал с этой методологией, я надеялся увидеть две отдельные группы показателей Жаккара. Группа с более высокими баллами Жаккара соответствует примерам, помеченным как связанные, а другая группа с более низкими баллами Жаккара соответствует несвязанным примерам. Наблюдая за рисунком 8, я получил именно то, что искал! Я наблюдал две отдельные группы с небольшим перекрытием.
Это свидетельствует о том, что я могу выполнить задачу маркировки на этапе 1, используя пороговую линию без модели. Все, что мне нужно сделать, это оптимизировать расположение этой линии, максимально увеличив точность обучающих данных! Наблюдая за правым подграфиком на рисунке 8, я мог бы, например, разместить эту линию около 0,04. Все, что превышает пороговую линию, связанную с меткой, иначе не связанную. Я обнаружил, что могу дополнительно оптимизировать оценку Жаккара, оптимизировав количество существительных, включенных в оценку. Я помещаю эту шапку в текст статьи, потому что обычно мы находим больше существительных. Я обнаружил, что оптимизация этого числа улучшила прогностическую точность безмодельного подхода, и поэтому включила его в качестве параметра в блок-схему, показанную на рисунке 9. Подробная информация о точности этого подхода этапа 1 включена в раздел 5 этого отчета.
3.3 Этап 2
Как указано в разделе EDA этого отчета, сложность проблемы маркировки нескольких классов на этапе 2 потребовала, чтобы я отошел от интересного подхода без моделей на этапе 1 к основанному на моделях подходу на этапе 2. Чтобы использовать возможности для передачи обучения и обеспечения быстрого экспериментирования. Я использовал библиотеку HuggingFace Transformers для разработки модели 2-го этапа. Путем экспериментов я обнаружил, что модель RoBERTa обеспечивает наилучшие результаты на данном тестовом наборе. RoBERTa [4] в целом такой же, как BERT, обсуждавшийся в классе, но с лучшими приемами перед обучением [5]:
- динамическое маскирование: токены маскируются по-разному в каждую эпоху, тогда как BERT делает это раз и навсегда
- без потери NSP (предсказание следующего предложения) и вместо того, чтобы соединять всего два предложения, объединяйте фрагменты смежных текстов, чтобы получить 512 токенов (таким образом, предложения расположены в том порядке, в котором они могут охватывать несколько документов)
- тренироваться с большими партиями
- использовать BPE с байтами в качестве субъединицы, а не с символами (из-за символов юникода)
RoBERTa довольно большой, поэтому я не буду показывать здесь его архитектуру. Подробности можно найти в репозитории моделей HuggingFace. Я настроил предварительно обученную модель RoBERTa для классификации последовательностей в нашем наборе обучающих данных со следующими параметрами:
Библиотека HuggingFace предоставляет полезный API для токенизации многотекстовых входных данных, как показано на рис. 11. Предложение 1 представляет заголовок, предложение 2 — основную часть статьи.
Мы видим, как token_type_ids указывает, какому фрагменту текста принадлежат токены. Блок-схема на рис. 12 суммирует процесс этапа 2.
4 эксперимента
4.1 Оптимизация этапа 1
Тегирование существительных оказалось дорогостоящим в вычислительном отношении из-за размера набора данных FNC. Оптимизация проводилась на выборке из 1000 обучающих данных. Результаты были рассчитаны на предоставленном обучающем наборе, и были приняты решения в отношении эффективности методологий на нем. Из-за того, что эта методология не требует моделей, статистически нет необходимости смотреть на производительность на отдельном наборе тестов. В этом случае поезд по сути является тестовым, потому что нет процесса подгонки. Функция распознавания сущностей NLTK позволила мне специально выбирать разные категории существительных [7]. В список вошли:
«ЛИЦО», «NORP», «FAC», «ORG», «GPE», «LOC», «PRODUCT», «EVENT», «WORK_OF_ART», «ЗАКОН», «ЯЗЫК», «ДАТА», «ДЕНЬГИ» ', 'СУЩЕСТВИТЕЛЬНОЕ','PROPN','ЧИСЛО'
Подробную информацию о том, к чему относится каждый конкретный тег существительного, можно найти в словаре данных в ссылке 7 в этом отчете. Сначала я оптимизировал, какой набор выбранных категорий привел к наилучшей производительности тестового набора. Пространство поиска было бы слишком большим, чтобы перепробовать все возможные комбинации, поэтому я выбрал шесть комбинаций, которые, по нашему мнению, будут всеобъемлющими. Результаты представлены в таблице 1.
Из таблицы 1 видно, что наличие существительных и имен собственных было необходимо. Включение дат, организаций и чисел немного повысило точность. Лемматизация и стемминг применялись к существительным в первом случае.
Я хотел определить, изменилась ли производительность без использования этих методов (лем и ствол). Результаты этих следующих испытаний показаны в таблице 2.
Мы видим, что только использование стемминга приводит к оптимальному результату. Кроме того, я хотел оптимизировать размещение пороговой линии, а не просто «на глаз», чтобы максимизировать точность классификации на этом этапе. Для этого я использовал функцию оптимизации библиотеки SciPy и назвал это пороговое размещение target_a. Кроме того, я хочу добиться максимальной точности в зависимости от количества существительных, которые мы допускаем в счет Жаккара из основной части статьи. Я называю это target_b. На рис. 13 эти функции показаны в том виде, как они реализованы в коде Python.
В своих экспериментах я наблюдал в среднем увеличение точности на 1 % в тренировочном наборе, связанное с каждой оптимизацией (общий прирост ~2 %).
4.2 Оптимизация этапа 2
Результаты в этом разделе были рассчитаны на тестовом наборе, предоставленном конкурсом FNC, НЕ на образце обучающего набора, как в разделе 4.1. В ходе этих экспериментов я поддерживал параметры тренировки в соответствии с параметрами, показанными на рисунке 10. Хочу отметить, что более высокое снижение веса приводит к повышению точности, но я не исследовал этот параметр полностью в этом проекте.
Стремясь соответствовать производительности Sepúlveda-Torres et. др. (2021) Я использовал модель преобразователя RoBERTa, чтобы сначала обобщить тела статей, прежде чем тренироваться на них, а затем делать прогнозы на тестовом наборе, предоставленном конкурсом. Я не заметил улучшения производительности, скорее я увидел падение точности примерно на 4% по сравнению с базовым уровнем 2. Учитывая падение производительности, я не буду приводить эти результаты в этом разделе.
Учитывая распределение меток, показанное на рис. 2, я сразу понял, что дисбаланс классов окажется проблемой. Чтобы преодолеть эту типичную проблему классификации, я применил методы избыточной и недостаточной выборки к обучающим данным. Сначала я обучил базовую модель с помощью BERT на полном наборе обучающих данных. Впоследствии я попытался выполнить недостаточную выборку, уменьшив количество примеров обсуждения до 4000, чтобы распределение классов было более равномерным, но все же немного напоминало данные обучения. После этого я попытался увеличить выборку класса меньшинства (метка «не согласен»), удвоив количество соответствующих ему обучающих примеров (увеличив с ~ 1000 до ~ 2000). Стратегия избыточной выборки, которую я использовал, включала использование библиотеки Python NLPAug для случайной замены слов в примере, заменяя выбранные слова их синонимами. Я использовал испытание Бернулли, чтобы определить, следует ли увеличить заголовок или основную часть статьи. Наконец, я попробовал комбинацию избыточной выборки класса меньшинства (несогласие, удвоение) и недостаточной выборки класса большинства (обсуждение, сокращение до 4000 строк, увеличение синонимов). В таблице 3 представлены результаты этих испытаний.
В этом первом эксперименте я увидел падение точности как минимум на 1% при применении любой из описанных стратегий выборки. Несмотря на небольшое падение точности, избыточная выборка, по-видимому, немного лучше уравновешивает отзыв во всех классах. Затем я предлагаю использовать стратегию избыточной выборки в пользу получения правильных значений большего количества расхождений за небольшой счет других классов.
Без передискретизации я экспериментировал с несколькими типами моделей, многие из которых доступны в репозитории HuggingFace. Каждый из них имеет различные сильные стороны, как описано в литературе, поэтому я решил попробовать их. Я точно настроил 3 архитектуры предварительно обученных моделей, в частности, distil-bert, известную как облегченная модель BERT, что ускорило обучение, BERT, исходный преобразователь, и RoBERTa, популярное расширение исходной модели BERT. В таблице 4 представлены результаты этих испытаний.
5. Вывод
5.1 Результаты
5.1.1 Результаты набора тестов
В этом разделе я представляю результаты моей методологии на тестовом наборе для соревнований. Начиная с первого этапа, в Таблице 5 я представляю оптимизированные параметры этапа 1 для пороговой линии (используемой для классификации введенной оценки Жаккара) и максимальное количество существительных в артиклях, используемых (размер токена) при расчете оценки Жаккара.
Мы можем визуализировать пороговую линию вместе с показателями Жаккара на рисунке 14. Мы видим, что тренировочное распределение показателей Жаккара на рисунке 8 очень похоже на 14. Следовательно, у меня есть методология, которая работает вне выборки!
Параметры модели этапа 2 были представлены в разделе 3 и не изменились. На рис. 15 я визуализирую матрицы путаницы на этапе 1 слева, а затем на этапе 2 справа. Я рассчитал матрицу путаницы на этапе 2, используя только сообщения, которые попали на этап 2 из этапа 1 (те, которые помечены как связанные). На первом этапе была некоторая ошибка, поэтому не все истинно связанные тестовые примеры дошли до этапа 2. Отображаемые матрицы путаницы содержат две метрики в каждой ячейке, первое число — количество примеров, попадающих в ячейку, второе число — процентная доля этого количества по отношению к набору данных. Если бы вы добавили это второе число вдоль главной диагонали, вы бы получили общую точность на соответствующем тестовом наборе.
Я суммирую эти результаты, чтобы сформировать общую матрицу путаницы, показанную на рисунке 16, и свести в таблицу точность класса по классу в таблице 6. Я также использую функцию подсчета очков соревнования FNC для расчета взвешенной точности наших методологий на тестовом наборе и добавляю это в таблицу 6. .
5.1.2 Сравнение с SOTA
Я могу сделать вывод, что мой общий подход вполне конкурентоспособен даже в подходах SOTA. Сведение в таблицу трех лучших конкурентов из документов с кодом вместе с моей моделью, показанной в сравнении, дает Таблицу 7. Мои результаты представлены жирным шрифтом вместе с новым рейтингом (по взвешенной точности FNC) с добавлением моего подхода [1].
Мое выступление на сцене по сравнению с результатами работ, занявших второе и третье место, приближает меня ко второму месту в рейтинге. У меня также неплохо получается в колонке несвязанных элементов, однако в конкурсе она оценивается меньше, поэтому на втором этапе мне помогло более частое вспоминание ярлыка «связанный» на первом этапе. Больше возможностей получить ярлыки прямо здесь. Я очень горжусь своим подходом, не используя модель для первого этапа и ограниченное время, потраченное на настройку RoBERTa на втором этапе. Я воспользовался преимуществами статистики (передискретизации) только на втором этапе и использовал наши знания английского языка на первом этапе для разработки простой методологии.
5.2 Рекомендации для будущей работы
В заключение этого поста я определенно добился отличных результатов, учитывая наш подход к гибридному моделированию. Я представил новый метод для этапа 1 классификации, не встречающийся в текущей литературе для набора данных FNC. Этот этап был конкурентоспособным с некоторыми топовыми моделями, состоящими из передовых архитектур. Было интересно наблюдать, что простые вычисления со знанием шаблона могут превзойти эти другие методы. В будущем кому-нибудь было бы интересно расширить вычисление Жаккара до взвешенной оценки. Присваивание определенным типам существительных большего веса, чем другим, для подсчета баллов. Например, если один и тот же человек, скажем, Мишель Обама, был отмечен и в теле статьи, и в заголовке, эти два текста, скорее всего, связаны. Было бы интересно добавить некоторый вес к именам, чтобы в некоторых случаях усилить Жаккара и действительно отделить эти распределения от рисунков 8 и 14. Теоретически это облегчило бы задачу определения порога. Кроме того, я, вероятно, мог бы объединить эту сцену с моделью на основе трансформатора. Как правило, сборка увеличивает точность классификации, поэтому это может быть интересным экспериментом на следующем этапе.
Что касается этапа 2, я не тратил много времени на оптимизацию гиперпараметров модели и гиперпараметров метода передискретизации при обучении. Другие статьи, занявшие первое место, действительно сильно оптимизировали свои модели, что дало им довольно высокую оценку. Если бы в моем распоряжении было больше ресурсов графического процессора, я, вероятно, мог бы сделать то же самое и приблизиться к высшему рангу.
Надеюсь, вам понравился этот пост! Обратная связь всегда приветствуется! :)
6 ссылок
[1] https://paperswithcode.com/sota/fake-news-detection-on-fnc-1
[2] https://link.springer.com/chapter/10.1007/978- 3-030-80599-9_22
[3] https://scikit-learn.org/stable/modules/generated/sklearn.metrics.jaccard_score.html#:~:text=Jaccard%20similarity% 20коэффициент%20score.,set%20of%20labels%20in%20y_true%20.
[4] https://arxiv.org/abs/1907.11692
[5] https://huggingface .co/docs/transformers/model_summary
[6] https://huggingface.co/course/chapter2/4?fw=pt
[7] https://pahulpreet86.github .io/name-entity-recognition-pre-trained-models-review/