Авторы: Макс Оу, Кеннет Лау, Хуан Оспина и Сина Балхи

Этот блог создается и поддерживается студентами программы профессионального магистра в Школе компьютерных наук Университета Саймона Фрейзера в рамках их кредита на курс. Чтобы узнать больше об этой уникальной программе, посетите {sfu.ca/computing/pmp}.

Мотивация и предыстория

Остановитесь и спросите себя: как часто вы сомневаетесь в новостях, которые читаете, смотрите или слушаете, особенно на политические темы? Все средства массовой информации оказывают огромное влияние на формирование общественного мнения масс. Многие из них выпускают новости с определенной политической позицией в соответствии с их повесткой дня или говорят нам то, что мы хотим услышать, укрепляя нашу собственную веру. Есть центральные политические новостные агентства; однако у большинства из них есть предубеждения. Предвзятость - это не плохо. Однако получение новостей только из одного источника; главным образом потому, что люди становятся менее информированными о множестве точек зрения, которые могут возникнуть по одной и той же теме. В качестве заявления о видении мы стремимся предоставить выход людям, которые хотят оставаться в курсе всех сторон политического спектра, для формирования хорошо информированных мнений.

Постановка задачи

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

Первый вопрос - создать модель машинного обучения, которая может предсказать политические предубеждения в новостной статье. Для этого нам нужно найти соответствующий набор данных, который подходит для нашего продукта. Набор данных должен включать саму статью, ее смещение (влево, по центру или вправо) и какую категорию (бизнес , культура и т. д.), к которой он принадлежит. Кроме того, статьи в наборе данных должны иметь равное распределение меток, чтобы наша модель не имела низкой производительности в результате потенциально несбалансированного набора данных.

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

Data Science Pipeline

Рис. 1. Общий обзор всего нашего конвейера обработки данных

Предварительная работа состояла из нескольких модулей предварительной обработки текста, использующих библиотеку Newspaper3k, для обучения статистических моделей spaCy для определения систематической ошибки и классификации категорий. Для классификации политических предубеждений мы использовали набор данных Все новости от Kaggle. Набор данных состоит из около 150 000 статей с 2016 по июль 2017 года. Однако для обучения модели классификации систематических ошибок мы использовали только сбалансированный обучающий набор данных из 30 000 статей, которые состояли из 10 000 выборок для каждой политической ориентации.

Сам набор данных не имеет меток смещения. Вместо этого мы использовали публикацию как свидетельство политической предвзятости статьи. Мы использовали https://mediabiasfactcheck.com/ и https://www.allsides.com, чтобы сопоставить каждую публикацию с ее политическим уклоном. Например, Breitbart и Fox News обозначены как правые, Reuters - центристские, а CNN и BBC - левые. Мы сделали это, потому что не существует небольшого набора данных со статьями, помеченными по их политическим пристрастиям. Тем не менее, мы считаем, что наша эвристика логически верна и что публикация статьи служит надежным показателем ее политической ориентации.

Вот разбивка используемого сопоставления:

Слева: The Atlantic, Buzzfeed News, CNN, The Guardian, New York Times, Talking Points Memo, Washington Post, Vox. (10 000 образцов)

Справа: Брейтбарт, National Review, New York Post, Fox News. (10 000 образцов)

В центре: Business Insider, NPR, Reuters. (10 000 образцов)

Мы использовали Набор данных категорий новостей Kaggle для обучения другой статистической модели классификации категорий новостей. Набор данных в основном состоит из статей Huffington Post, опубликованных между 2012 и 2018 годами. Значительная часть набора данных также состоит из статей других издателей, таких как Vox, The Verge и т. Д. Мы использовали ссылки, предоставленные в наборе данных, чтобы очистить статью. контент около 100 000 статей. Мы отбросили несколько более редких категорий, а другие объединили в их зонтичную категорию, чтобы получить более сбалансированный набор данных. Ниже показаны наши окончательные категории с размерами выборки:

Бизнес: 3 267

Культура: 16 727

Развлечения: 12 849

Проживание: 10 297 (включает Style, Green Living и т. д.)

Политика: 32 722

Наука: 2316

Общество: 14 459

Спорт: 3 544

World: 7 479 (состоит из World News, т. е. за пределами Северной Америки)

Чтобы обучить модели смещения и категоризации, мы загрузили в программу одну из предварительно обученных стартовых моделей spaCy. Мы инициализируем наши модели с помощью стартовой модели, стартового пакета трансферного обучения с предварительно натренированными весами, чтобы добиться большей точности. Мы создали компонент конвейера под названием TextCategorizer, или textcat. Textcat принимает документ и преобразует слова в векторы GloVe. Затем векторы передаются в два слоя свертки и выводят классы меток с их оценками достоверности.

Для обучения нашей модели мы сначала загрузили наш набор данных, перемешали его и отделили часть, чтобы сохранить для оценки. Затем мы создали словарь, в котором ключи являются метками, а значения устанавливаются как «1», если смещение или категория соответствует метке, в противном случае устанавливаем значение как «0». Вместе с текстом из статьи и словарем модель обучена на 20 итерациях.

Чтобы оценить наши модели, мы применили их к выборке из 10 000 случайных статей из обоих наборов данных. Для каждой статьи достоверность сравнивается с предполагаемой этикеткой. Результат теста показал, что модель смещения имеет точность 91%, а модель категорий - 96%.

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

Мы использовали алгоритм TextRank для извлечения ключевых слов для каждой статьи. TextRank - это алгоритм на основе графиков, который использует PageRank для вычисления важности слов в заданном фрагменте текста. Мы отсылаем читателя к исходной статье для подробного изучения TextRank.

В нашем случае мы извлекли лемматизированные токены, которые были помечены существительными, глаголами, прилагательными и существительными собственными (за исключением «mr.», «Ms.» И «say»). Мы лемматизировали токены, потому что они более устойчивы к вариациям ключевых слов с одинаковым значением. Затем мы создаем неориентированный граф токенов в формате матрицы смежности и запускаем алгоритм PageRank для вычисления ранга (оценки важности) каждого ключевого слова. Затем мы возвращаем 100 самых популярных ключевых слов данной статьи.

В наших экспериментах мы обнаружили, что эту область можно значительно улучшить. Например, мы могли бы найти более информативные ключевые слова, настроив соответствие на основе правил в spaCy. Мы выбрали размер окна 4 и коэффициент демпфирования 0,85 с порогом сходимости 1e-5. Все это гиперпараметры, которые можно настроить для извлечения лучших ключевых слов.

Мы добавили наш модуль TextRank в качестве компонента в конвейер spaCy nlp в производстве. Это означает, что мы можем получить доступ к ключевым словам как к атрибуту объекта документа, созданного путем вызова nlp в статье.

Методология

Определение: мы определяем «братьев и сестер» как статьи, посвященные одной и той же теме, но имеющие разные политические пристрастия.

Отправка статьи - это единственная точка входа в наше приложение. Когда пользователь отправляет URL-адрес статьи, мы используем Newspaper3k для извлечения содержимого статьи и ее метаданных. Мы выбрали Newspaper3k, потому что это был всеобъемлющий парсер для новостной статьи, поэтому нам не нужно было писать отдельные парсеры для каждого издателя. Это позволяет нам работать с новостными статьями любого издателя, которые отправляет пользователь.

После извлечения содержимого и метаданных представленной статьи мы используем две предварительно обученные статистические модели spaCy для прогнозирования смещения и категории. Мы использовали spaCy, потому что он может похвастаться мощной промышленной библиотекой НЛП с широким спектром функций, включая нейронные сети для классификации текста. Обратите внимание, что у нас есть две модели классификации, и поскольку конвейер nlp spaCy не допускает более одного компонента классификации. Мы создали два конвейера: один с тегами, парсером, классификацией смещения и TextRank, другой - только с классификацией по категориям.

После извлечения ключевых слов из представленной статьи и прогнозирования ее предвзятости и категории статья вместе с результатами прогноза сохраняется в MongoDB. Мы выбрали MongoDB в качестве базы данных нашего проекта, потому что она имеет множество преимуществ. Первое преимущество заключается в том, что он предлагает распределение облачных провайдеров, простую и быструю настройку с порталами доступа в Интернет. Во-вторых, MongoDB обладает высокой масштабируемостью - мы можем легко увеличить размер нашей базы данных всего за несколько щелчков мышью через веб-консоль MongoDB Atlas. В-третьих, это база данных, ориентированная на документы, и данные хранятся в формате JSON, который хорошо сочетается с нашими статьями и их метаданными. И наконец, что не менее важно, он обладает высокой производительностью при поиске. После того, как статья сохранена в базе данных, нам больше не нужно ее обновлять. Однако нам нужно просмотреть тысячи статей в базе данных, чтобы найти потенциальных братьев и сестер. В результате производительность чтения базы данных критически важна в нашем проекте.

Чтобы получить родственников поданной статьи, мы запрашиваем в базе данных статьи с другими политическими пристрастиями. Например, если в отправленной статье осталось смещение, мы получим статьи с метками смещения вправо и по центру. Теперь мы понимаем, почему нам нужна категория: чтобы сократить объем вычислений, выбирая только статьи с той же категорией. Например, нет смысла искать правого развлекательного собрата левой политической статьи.

Для каждого родственника-кандидата представленной статьи мы вычисляем сумму рейтингов их общих ключевых слов. Другими словами, мы находим их общие ключевые слова и суммируем все их значения. Тогда в нашем алгоритме младший брат с максимальной суммой - это ближайшая пара представленной статьи. Фактически, это мера расстояния, и мы пытаемся вычислить сходство документов с помощью этого подхода.

Мы выбрали такой способ применения TextRank в основном потому, что думали, что это будет интересный эксперимент. TextRank обычно используется для извлечения ключевых слов и извлекающего обобщения, но мы не смогли найти ни одной предыдущей работы, в которой он использовался бы для целей схожести документов. Мы использовали эвристику, согласно которой, если похожие статьи имеют похожие ключевые слова, то рейтинг этих ключевых слов должен давать нам довольно разумную меру расстояния между этими статьями. Поскольку TextRank использует PageRank для вычисления этих оценок важности, у нас есть эмпирический метод вычисления расстояния между двумя статьями. Фактически, мы считаем, что это потенциальная тема для исследования.

После того, как мы таким образом вычислили ближайших братьев и сестер представленной статьи, мы публикуем все три родственных статьи с их метаданными в веб-приложении Dash / Flask. Для нашего проекта мы выбрали Dash / Flask, потому что это простая в использовании библиотека пользовательского интерфейса для создания аналитических веб-приложений. Мы разработали веб-приложение на основе Dash, которое позволяет пользователю вводить URL-адрес новостной статьи. Затем наше приложение Dash, выступающее в качестве компонента View-Controller в шаблоне разработки программного обеспечения Model-View-Controller (MVC), берет статью со всеми ее метаданными и передает в серверную часть. Серверная часть определяет политическую предвзятость статьи, категорию и ее родственные связи. Затем эта информация возвращается во внешний интерфейс для просмотра пользователем. На заключительных этапах нашего проекта мы сократили часть реализации Dash и использовали собственный Flask для большей гибкости при проектировании и разработке нашего окончательного приложения.

Оценка

Чтобы оценить наши модели, мы применили их к выборке из 10 000 случайных статей из обоих наборов данных. Для каждой статьи достоверность сравнивается с предполагаемой этикеткой. После обучения наших моделей машинного обучения, реализованных в spaCy, с использованием образцов статей и меток для прогнозирования политической предвзятости, мы провели несколько тестов над этими моделями и получили оценки точности от 91% до 96% на тестовых данных. Эти показатели точности означают, что наши модели хорошо справляются с выявлением политической пристрастия новостных статей.

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

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

Данные продукта

После вставки URL-адреса статьи в строку поиска наш интерфейс отправляет его в программу Newspaper3k, которая очищает данные для извлечения содержимого статьи.

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

Справа от каждой статьи пользователь может просмотреть информацию о своей публикации, политическую предвзятость, предвзятость и уверенность в себе, а также 10 основных ключевых слов с их оценками.

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

Уроки выучены

Справедливости ради стоит сказать, что это непростой проект. Создавая наш продукт, мы узнали о многих различных технологиях и их применении. Реализация конвейера NLP и создание пользовательских компонентов с помощью spaCy были для нас первым делом. Мы хотели использовать промышленный процессор естественного языка вместо традиционных библиотек NLTK. По сравнению с NLTK, spaCy поддерживает интегрированные словесные векторы и модели нейронных сетей, тогда как NLTK не имеет этих функций.

Изучение и использование TextRank для поиска родственных статей - уникальный способ решить нашу вторую задачу. TextRank используется для оценки каждого предложения в тексте, затем он может взять первые n предложений и отсортировать их по мере их появления в тексте, чтобы построить автоматическое резюме. Однако вместо этого мы использовали TextRank как метод поиска статей с похожим текстом и рейтингом.

Мы обнаружили, что Dash был хорошим выбором для реализации нашей области визуализации из-за его собственных компонентов визуализации и его простой интеграции с конвейерами обработки данных, разработанными на Python.

Резюме

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

Кроме того, используя алгоритм TextRank, мы находим братьев и сестер статьи с разными политическими предубеждениями. Вся входная информация фиксируется, а соответствующие результаты представляются в веб-приложении Dash / Flask, которое является лидером в области визуализации науки о данных.