Использование машинного обучения для понимания и прогнозирования предвзятости СМИ в статьях.

Задний план

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

Термин предвзятость СМИ подразумевает повсеместное или широко распространенное предубеждение, противоречащее стандартам журналистики, а не точку зрения отдельного журналиста или статьи. Направленность и степень предвзятости СМИ в разных странах широко обсуждаются. [ВИКИПЕДИЯ]

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

Это прискорбно. Как это часто бывает с такими вещами, правда может находиться где-то посередине. [PUB_DISCOURSE]

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

Вы можете найти несколько таких примеров здесь.

Получение данных

Чтобы начать наш анализ, нам нужно получить набор данных из разных медиа-домов, которые были предварительно помечены как предвзятые или нет.

Набор данных, который я буду использовать, взят из Ad Fontes Media. Несмотря на то, что они не предоставляют фактический текст для статей, экспорт csv включает URL-адреса статей.

Я создал простой скрипт на Python, используя Beautiful Soup и библиотеку запросов, чтобы получить фактический текст статьи.

Чтобы следовать коду, вы можете просмотреть записную книжку Colab здесь

Теперь данные выглядят так, как показано ниже.

  • url - общедоступный URL статьи
  • источник - Медиа Хаус
  • text - текст статьи
  • bias - оценка смещения, где ‹0 - смещение влево, а› 0 - смещение вправо
  • качество - качество статьи по оценке ручного читателя.

Всего у нас 1646 статей.

Давайте посмотрим на исходный столбец . У нас есть около 95 различных медиа-домов, в том числе New York Times, Washington Post и т.д.

Есть несколько источников, в которых очень мало статей, таких как Daily Mail, и было бы лучше избавиться от таких источников, поскольку они увеличивают перекос.

У нас есть два столбца, которые помогают в нашем анализе - текст и предвзятость.

Теперь давайте посмотрим, что на самом деле представляет собой эта переменная смещения.

Мы видим, что в большинстве статей смещение очень близко к нулю и есть значения от -40 до +40.

Регрессия или классификация?

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

Отсечка +5, -5 основана на наблюдении за вышеупомянутым графиком плотности смещения.

После биннинга мы видим ниже, что наиболее частым бункером является центр.

Извлечение функций

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

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

Поэтому сначала мы группируем фрейм данных, используя метку «bias_bin», а затем объединяем «text_pos» для каждой метки.

По сути, мы объединили все статьи для каждой категории в одну большую статью, а затем запустили для нее TfIdf Vectorizer.

Обратите внимание, что мы указываем min_df = 1 и max_df = 1, чтобы фразы из разных категорий могли вносить свой вклад в дискриминационные функции.

max_df

При создании словаря игнорируйте термины, частота которых в документе строго превышает заданный порог (стоп-слова для конкретного корпуса). Если значение с плавающей запятой находится в диапазоне [0,0, 1,0], параметр представляет долю документов, целые абсолютные значения. Этот параметр игнорируется, если словарь не равен None.

min_df

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

После этого мы можем получить функции для каждого документа, используя метод .get_feature_names в векторизаторе TfIdf. Ниже представлена ​​случайная выборка функций.

Мы также удаляем n-граммы, которые являются подмножеством других n-граммов.

То есть предположим, что у нас есть две функции вроде

«Политическая безопасность» и «политическая безопасность требует»

затем мы удаляем «политическую безопасность», чтобы объем словарного запаса оставался управляемым.

Теперь мы можем использовать найденные функции и передать их другому векторизатору TfIdf и векторизовать все доступные статьи.

Теперь у нас есть числовое представление всех статей, и мы можем приступить к моделированию.

Моделирование

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

Классификатор гауссовских процессов

Гауссовский процесс - это случайный процесс, ядро ​​которого является нормальным распределением Гаусса. Другими словами, в гауссовском процессе каждая (линейная) комбинация переменных-предикторов многомерно нормально распределена. И, следовательно, если пойти другим путем, любые целевые переменные, прогнозирующие переменные которых в основном аппроксимируют это основополагающее свойство распределения, могут быть смоделированы с использованием гауссовского процесса! Это расширение гауссовских процессов на регрессию и отдельно на классификацию существует в sklearn как GaussianProcessRegressor и GaussianProcessClassifier соответственно. [KAGGLE_RESIDENT_MARIO]

Мы получаем только приличные баллы при 5-кратной перекрестной проверке

Если мы запустим отдельно поезд и тестовые наборы, мы получим

Классификатор стекирования

Составной классификатор состоит из суммирования выходных данных отдельного оценщика и использования классификатора для вычисления окончательного прогноза. Стекинг позволяет использовать силу каждого отдельного оценщика, используя их выходные данные в качестве входных данных для окончательного оценщика [SKLEARN_STK]

Итак, мы пытаемся объединить классификатор гауссовских процессов с классификатором Ada Boost.

Мы получаем лишь незначительное улучшение результатов

Результаты и компромисс между отклонением и смещением

Несмотря на то, что точность почти ужасна, следует отметить один факт: разница в наборах для обучения и тестирования не так велика, поэтому у нас не проблема с дисперсией, а проблема смещения.

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

Поэтому наиболее вероятной причиной низкой производительности в этом случае является качество функций или данных. Использование простого представления текста, такого как TfIdf, может способствовать этому или быть неотъемлемой частью данных, поскольку «Media Bias» является чем-то семантическим, а Tfidf, будучи чрезмерно синтаксическим, не может улавливать правильные сигналы.

Надеюсь, статья была для вас полезной. Найди меня на @linkedin

Источники

[PUB_DISCOURSE] - https://www.thepublicdiscourse.com/2019/05/51698/

[ВИКИПЕДИЯ] - https://en.wikipedia.org/wiki/Media_bias

[KAGGLE_RESIDENT_MARIO] - https://www.kaggle.com/residentmario/gaussian-process-regression-and-classification

[SKLEARN_STK] - https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.StackingClassifier.html

[WIKIPEDIA_BIAS_VARIANCE] - https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff#