Коллекция API и модели обработки естественного языка

Я нахожусь на 6-й неделе программы GA Data Science Immersive. До сих пор мы рассмотрели хорошие основы машинного обучения с учителем, а именно модели регрессии и классификации.

В центре внимания проекта этой недели — обработка естественного языка. Проект включает в себя сбор данных с Reddit и применение методов векторизации текста для обработки машинного обучения.

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

Первое на первом месте: сбор данных и использование API

API (интерфейс прикладного программирования) — это способ для приложений общаться или работать друг с другом. Мы можем не знать об этом, но мы используем эту интеграцию всякий раз, когда выбираем вход на определенный веб-сайт или в приложение через наши существующие учетные записи Google, Facebook, LinkedIn или другие. Это стало возможным благодаря использованию общедоступных API Google, Facebook и т. д.

По разным причинам государственные учреждения и корпорации делают свои API общедоступными. Это чрезвычайно удобно для нас, специалистов по данным, поскольку дает нам доступ к значительному объему данных для наших упражнений по машинному обучению бесплатно и почти без хлопот. API создан для удобного доступа к информации на языке Jason, объекте JavaScript, который легко читается другими языками, в нашем случае Python. Удобство еще больше повышается благодаря своего рода соглашению о том, что представляет собой хороший дизайн API, что делает наши запросы очень похожими на разных веб-сайтах.

Выбор векторизаторов (преобразователей): CountVectorizer и TFIDF

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

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

Выбор метода оценки: логистическая регрессия или мультиномиальный наивный байесовский метод

Давайте возьмем пример слов или выражений, которые мы хотим классифицировать среди двух субреддитов, «worldnews» и «funny»:

In[ ]: examples = [‘школа’, ‘стрельба в школе’, ‘французский’, ‘французский парень’,
‘мама’, ‘молодая мать’]

Модель Наивного Байеса работает так, что она опирается на теорию условной вероятности, которая в данном случае преобразуется в определение вероятности того, что, скажем, «молодая мать» принадлежит субреддиту «worldnews», а «мать» принадлежит субреддиту. «забавный» субреддит.

Обученный около 2500 сабреддитов, результат Multinomial NB был следующим:

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

Результат модели логистической регрессии был следующим:

Как видно из приведенного выше примера, наивная байесовская модель менее подвержена ошибкам. Это в основном из-за условной вероятности, встроенной в его алгоритм. Наивный Байес смог распознать, что, хотя слово «мать», скорее всего, используется в контексте шутки, «молодая мать», скорее всего, будет частью заголовка новостей. С другой стороны, логистическая регрессия не смогла уловить этот нюанс. Однако, к сожалению, обе модели не распознали «стрельбу в школе» как часть «мировых новостей» Reddit.

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