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

Google Cloud Natural Language API - отличная платформа для использования в этом проекте. Просто загрузите набор данных, обучите модель и используйте ее для прогнозирования новых статей.

Но прежде чем мы загрузим набор данных Kaggle и приступим к взлому в Google Cloud, в наших интересах предварительная обработка набора данных.

Что такое предварительная обработка?

Предварительная обработка текста означает просто привести его в форму, которая является предсказуемой и анализируемой для вашей задачи.

Цель предварительной обработки - удалить шум. Удалив ненужные функции из нашего текста, мы можем снизить сложность и повысить предсказуемость (т.е. наша модель быстрее и лучше). Удаление знаков препинания, специальных символов и слов-заполнителей (the, a и т. Д.) Существенно не меняет смысла текста.

Подход

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

  • Строчный текст
  • Удаление URL
  • Сокращение Расщепление
  • Токенизация
  • Стемминг
  • Лемматизация
  • Остановить удаление слова

Мы будем использовать python из-за доступности и мощности его анализа данных и библиотек NLP. Не стесняйтесь запускать блокнот jupyter и писать код!

Строчные буквы и удаление URL

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

Разделенные схватки

Подобно URL-адресам, сокращения могут привести к непредвиденным результатам, если их оставить в покое. На помощь приходит метко названная библиотека python сокращений! Он ищет сокращения и разбивает их на корневые слова.

Токенизация

Проще говоря, токенизация - это разбиение текста на части.

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

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

Наша вводимая строка разбивается на группы буквенно-цифровых символов. Обратите внимание на символы «$» и «!» символы не появляются в нашем токенизированном списке.

Основание

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

Например, «прыжки», «прыжки» и «прыжок» сводятся к «прыжку».

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

Подводка также вызывает беспокойство. Посмотрите, как слова, которые должны иметь один и тот же корень, не имеют - ложноотрицательный.

Давайте рассмотрим более тонкий подход к нормализации текста, лемматизации.

Лемматизация

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

Лемматизация отличается от определения корней тем, что она определяет словесную часть речи, глядя на окружающие слова в поисках контекста. В этом примере мы используем nltk.pos_tag для присвоения токенам частей речи. Затем мы передаем токен и назначенный ему тег в WordNetLemmatizer, который решает, как лемматизировать токен.

Используя следующий текст, мы можем сравнить результаты наших подходов к стеммингу и лемматизации.

Обратите внимание, что слово «враги» было преобразовано в «враг», но лемматизировано как «враг». Интересно, что «храбрость» произошло от слова «braveri», но лемматизатор не изменил первоначального слова. В целом лемматизация более точна, но за счет сложности.

Остановить удаление слова

Давайте начнем с примера. Что приходит вам в голову, когда вы читаете следующее?

“quick brown fox lazy dog”

Надеюсь, вы прочитали это и подумали об общеанглийской панграмме:

“the quick brown fox jumped over the lazy dog”

Если вы его поняли, вам не нужны были пропущенные слова, чтобы понять, на что я ссылаюсь. «The» не придает никакого значения предложению, и у вас было достаточно контекста, чтобы слова «прыгнул» и «перепрыгнули» были ненужными. По сути, я удалил стоп-слова.

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

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

Все вместе сейчас

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

LAKEWOOD, OH — Following a custom born out of cooperation and respect, local drivers reportedly pulled over to the side of the road Friday to let a pizza delivery guy through. “Gee, I hope it’s nothing serious like a big, hungry party,” said 48-year-old Rosanna Tuttle, who was just one of the dozens of drivers who quickly moved to the shoulder of the road after catching sight of the speeding pizza-delivery vehicle swerving through traffic in the rearview mirror. “It’s honestly just a reflex. Sure, it slows everyone down, but wouldn’t you want others to pull over for you if that was your pizza in there? I don’t care if I’m late; I just hope that pizza is okay. Let’s pray they get there safe.” At press time, drivers at the scene had stopped their cars again to rubberneck as the delivery guy rushed into an apartment building carrying a large stack of pizzas and mozzarella sticks.

Возвращает следующее.

oh follow custom bear respect local driver reportedly pull side road let pizza delivery guy gee hope nothing serious like big hungry party say year old one dozen driver quickly move shoulder road catch sight speed pizza delivery vehicle swerve traffic mirror honestly reflex sure slow everyone would want pull pizza care I late hope pizza let us pray get safe press time driver scene stop car rubberneck delivery guy rush apartment building carry large stack pizza stick

Это обертка

Обработка естественного языка - мощный инструмент для решения некоторых действительно интересных вопросов. Предварительная обработка текста - это неотъемлемый этап процесса, помогающий нам найти сигнал через шум. «Мусор в мусоре выброшен», как говорится. Надеюсь, эта статья ответила на некоторые вопросы и подняла еще несколько - это лишь верхушка айсберга!

Источники

Https://towardsdatascience.com/tokenization-for-natural-language-processing-a179a891bad4

Https://simonhessner.de/lemmatize-whole-sentences-with-python-and-nltks-wordnetlemmatizer/

Https://www.kdnuggets.com/2019/04/text-preprocessing-nlp-machine-learning.html