Выводы из ядра НЛП Абхишека Тхакура

Краткая биография

До того, как Абхишек Такур много работал специалистом по обработке данных в компаниях, разбросанных по всей Германии, он получил степень бакалавра электротехники в NIT Surat и степень магистра компьютерных наук в Боннском университете. В настоящее время он занимает должность главного специалиста по данным в норвежской boost.ai, «компании-разработчике программного обеспечения, специализирующейся на диалоговом искусственном интеллекте (ИИ)». Но больше всего меня впечатлило влияние Абхишека на Kaggle.

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

  • Гроссмейстер соревнований (17 золотых медалей и неизменно высокое место # 3 в мире)
  • Kernels Expert (он входит в 1% лучших Kagglers)
  • Обсуждение гроссмейстера (65 золотых медалей и 2-е место в мире за все время)

Я хочу взглянуть на учебник Абхишека Приближение (почти) к любой задаче НЛП на Kaggle. Я выбрал это ядро ​​Абхишека, потому что я сам пытался узнать больше об обработке естественного языка, и как я мог сопротивляться обучению с помощью набора данных Kaggle Жуткие авторы на тему Хэллоуина?

Подход Абхишека к НЛП

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

Просто чтобы не забыть - наша задача - определить автора (EAP - Эдгар Аллен По; HPL - Г. П. Лавкрафт; MWS - Мэри Уоллстонкрафт Шелли) каждого предложения в тестовой выборке.

1. Изучение данных и понимание проблемы

После импорта необходимых модулей Python и данных Абхишек вызывает метод head () для данных, чтобы посмотреть, как выглядят первые пять строк. Поскольку Абхишек - профессионал, и это проблема НЛП, исследовательский анализ данных (чаще всего он называется EDA) является поверхностным по сравнению с проблемами, связанными с числовыми данными. Новички в области науки о данных могут извлечь выгоду из более тщательного EDA. Тщательное изучение данных может выявить любые недостающие значения, дать вам знать, какой объем очистки данных вам потребуется, и помочь в принятии решений по построению модели на более позднем этапе проблемы.

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

2. Предварительная обработка

Затем Абхишек использует метод LabelEncoder () из scikit-learn, чтобы присвоить целочисленное значение каждому автору. Кодируя текстовые метки значений в столбце автор с помощью целочисленных значений (0, 1, 2), Абхишек упрощает понимание данных для своей модели классификации.

После кодирования меток автора Абхишек разбивает данные на наборы для обучения и проверки, используя train_test_split из scikit-learn. Он выбирает разделение «поезд / проверка» 90:10 (наиболее часто используемые разделения в науке о данных Python обычно находятся в диапазоне от 70:30 до 80:20). Поэтому он намеревается обучить модели на 90% предложений в наборе данных, а затем он оценит точность своих моделей на оставшихся 10% данных.

3. Построение модели

Перед созданием своей первой модели Абхишек использует для данных TF-IDF (Term Frequency - Inverse Document Frequency). TF-IDF присвоит вес словам, которые появляются в предложениях в столбце текст. Таким образом, TF-IDF поможет нам понять, какие слова важны, когда мы пытаемся определить, какой автор написал конкретное предложение - такие слова, как the, не будут важны для классификации любого автора, потому что Появляется часто и не раскрывает много информации, но такое слово, как Ктулху , например, было бы очень важно при классификации предложений, написанных HP. Лавкрафт. Подробнее о TF-IDF можно прочитать здесь и здесь.

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

После установки TF-IDF как на обучающий, так и на проверочный набор, Абхишек готовит модель логистической регрессии. Если этот тип модели классификации является для вас новым, прочтите this, прежде чем продолжить. После подбора модели логистической регрессии Абхишек вычисляет логарифм потери своей модели логистической регрессии (напомним, что он написал функцию многоклассовых логарифмических потерь в начале ядра). Функция потери журнала для нескольких классов возвращает значение потери журнала 0,626 для модели логистической регрессии. Хотя подгонка TF-IDF и модели логистической регрессии дала нам хорошее начало, мы можем улучшить этот показатель потери журнала.

4. Настройка модели

Поэтому нас не устраивает оценка потерь журнала 0,626, и мы хотим оптимизировать этот оценочный показатель. Отсюда мы могли бы выбрать несколько маршрутов, и это именно то, что делает Абхишек. После того, как мы изучили и предварительно обработали наши данные, у нас остается множество различных комбинаций извлечения признаков и подбора модели. Например, Абхишек использует подсчет слов для извлечения признаков вместо TF-IDF. Благодаря этому методу извлечения признаков показатель потерь журнала его модели логистической регрессии улучшился с 0,626 до 0,528 - колоссальное улучшение на 0,098!

Резюме

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

Вот что мы обсуждали:

  • EDA: исследовательский анализ данных имеет решающее значение, если мы хотим понять набор данных, и EDA может сэкономить нам время, когда мы начнем строить модели.
  • Проблемы мультиклассовой классификации. Задача этого типа требует от нас предсказать, какие наблюдения попадают в какой класс, где каждое наблюдение может относиться к любому одному классу из трех или более классов.
  • Предварительная обработка: мы должны предварительно обработать наши данные, прежде чем строить какие-либо модели. В этом примере нам нужно было использовать LabelEndcoder () для преобразования текстовых меток в целочисленные значения для наших моделей.
  • Извлечение признаков. Всякий раз, когда у нас есть набор необработанных данных (отрывки предложений в нашем примере), нам нужно получить некоторый предиктор, который поможет нам определить, как классифицировать наши наблюдения. Абхишек показал нам, как использовать TF-IDF и подсчет слов

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

Приложение

Профиль Kaggle Абхишека

Ядро НЛП Абхишека

Набор данных Spooky Authors

Что такое потеря журнала?

Что такое TF-IDF?

TF-IDF простыми словами

Что такое логистическая регрессия?

Вот весь код Абхишека, который упоминается в этой статье. Я хочу повторить, что это не моя собственная работа - эта суть предназначена для того, чтобы помочь новичкам следовать руководству Абхишека по НЛП.