Привет, Хабр!

Надеемся, что в Новогодние праздники многие из Вас отлично отдохнули. Но, каникулы закончились. Пора вернуться к машинному обучению и анализу данных. С 25 января мы запускаем третий набор Школы Данных «Билайн».

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

Кстати, если вы уже активно занимаетесь анализом и обработкой текстов и хотите попробовать себя, рекомендуем поиграться с задачей The Allen AI Science Challenge на Kaggle=) и заодно поучаствовать в DeepHack, хакатоне по анализу текстов и построению ответных систем.

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

Автоматическая обработка текстов – это область с высоким порогом вхождения: чтобы сделать интересное бизнес-предложение или принять участие в соревновании по анализу текстов, например, в SemEval или Диалоге, необходимо разбираться в методах машинного обучения, уметь пользоваться специальными библиотеками для обработки текстов, чтобы не программировать с нуля рутинные операции, и иметь базовые представления о лингвистике.

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

Токенизация (от английского слова tokenization) – это процесс разбиения текста на предложения и на слова. Задача токенизации ошибочно может показаться тривиальной на первый взгляд.

На самом деле, понятие слова или токена – элемента текста – размыто: например, название города New York, формально, состоит из двух отдельно стоящих слов. Разумеется, для любой разумной обработки нужно считать эти два слова одним токеном и не обрабатывать их по одиночке.

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

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

К счастью, реализовывать с нуля эти алгоритмы слушателям школы не пришлось: все они реализованы в Natural Language Toolkit, библиотеке для обработки текстов на Python.

Морфологический анализ (англ. Part of speech tagging) заключается в определению морфологических свойств каждого слова: к какой части речи относится слово, если слово – существительное, то в каком числе оно стоит (а также каков его род и падеж, если речь идет о русском языке), если слово – глагол, то каково его время, вид, лицо, залог, и так далее.

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

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

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

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

  • использование методов машинного обучения для выделения ключевых слов и словосочетаний. Предполагается, что существует коллекция текстов, в которой ключевые слова и словосочетания выделены экспертами. Тогда мы можем обучить классификатор выделять ключевые слова и словосочетания по такой размеченной коллекции.
  • выделение ключевых слов и словосочетаний по морфологическим шаблонам. Если размеченной коллекции текстов нет, то можно предположить, что ключевые слова и словосочетания должны быть грамматически осмысленными: например, ключевые слова – это существительные, а словосочетания – пары слова вида существительное + существительное или прилагательное + существительное.
  • выделение ключевых биграмм (пар слов) по статистическим мерам связности. Под статистическими мерами связности обычно понимают либо меру взаимной информации пары слов w1, w2 (англ. pointwise mutual information) и ее производные, заимствованные из теории информации, либо статистические тесты о независимости двух событий “встретилось w1” и “встретилось w2”. Существенное ограничение такого подхода заключается в том, что он применим только для пар слов.
  • выделение ключевых слов и словосочетаний по мерам контрастности. Допустим, что мы собрали 10 статей из Википедии про разных питонов – языки программирования, фильмы, аттракционы. Задача заключается в поиске слов наиболее специфичных для данного текста, а не для всей коллекции в целом. Для решения этой задачи оценивают контрастность слова или словосочетания по сравнению со всей остальной коллекцией. Одна из самых популярных мер контрастности называется tf–idf. Она состоит из двух частей: tf – это частота слова в рассматриваемом тексте, а idf – величина, обратная количеству документов, в которых слово содержится. Использование меры tf–idf позволяет узнать, например, что самое важное слово в тексте про Питон-аттракцион – это горки.



Облако ключевых слов и словосочетаний, построенное по “Алисе в стране Чудес"

Использование tf–idf не ограничивается задачей извлечения ключевых слов и словосочетаний. Другое применение tf–idf – это вычисление сходства между текстами. Если каждый текст из коллекции представить вектором tf–idf слов, в него входящих, то сходство между двумя текстами можно будет определить как косинус между двумя такими векторами в многомерном пространстве слов. Такое косинусное сходство между двумя текстами можно использовать в качестве расстояния для кластерного анализа.

Deep Learning подход к обработке текстов: структура данных word2vec:

Помимо классических методов обработки текстов, о которых мы рассказали выше, в последнее время набирает популярность структура данных word2vec, разработанная компанией Google и использующая подход глубокого обучения (Deep Learning). С помощью нее можно немного поиздеваться над своим мозгом, а именно — отождествить слова (не важно на каком языке) векторами в линейном пространстве. Ну, а после вычитать, складывать, скалярно перемножать последние. Работает эта структура изнутри довольно сложно, но для того, чтобы попробовать ее в действии достаточно лишь научиться настраивать параметры обучения. Этому мы и посвящаем время на наших занятиях. С точки же зрения черного ящика данная структура устроена достаточно просто: мы просто «скармливаем» большое количество текстов, которые у нас есть без какой-либо предобработки. А на выходе получаем для каждого слова из наших текстов вектор (наперед заданной размерности).

У читателя тут же возникает вопрос: и что теперь с этим делать? Вот перечень самых простых задач, которые после можно решать по щелчку пальца:
  • Например, в задаче классификации текстов, можно для каждого документа подсчитать средний вектор входящих в него слов, тем самым получив не самое плохое (но и не самое лучшее) признаковое описание. После чего решив классическую задачу машинного обучения (задачу классификации) мы научимся классифицировать документы
  • Определение опечаток в тексте — делается с помощью «скалярного произведения» — предлагаем читателям на досуге подумать, как именно
  • Кластеризация слов (которую, кстати, также можно применить для задачи классификации текстов)
  • Решение задачи «найди лишнее слово»

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

Это была лишь вводная часть такой сложной и многогранной науки как Natural Language Processing (обработка естественного языка). На наших занятиях мы также рассматриваем множество задач автоматической обработки текстов применимых в том числе на русских корпусах (русских текстах).

Это особенно актуально, т.к. на сегодняшний момент множество вендоров на рынке предлагают решения, протестированные на англо-корпусах и единого решения «купил и поставил» не существует — приходится для каждой задачи разрабатывать продукт практически с нуля.

Примеры применения текстовой аналитики:

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

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

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

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

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

Для всех интересующихся анализом текстов рекомендуем пройти одноименный курс на Coursera — на наш взгляд, один из самых полезных курсов по автоматической обработке текстов. Если же у Вас есть желание побольше попрактиковаться и порешать задач — добро пожаловать в Школу Данных Билайн, третий набор которой стартует уже 25 января.

Комментарии (6)


  1. rushter
    15.01.2016 16:29
    +11

    Сергей, Вы бы лучше рассказали об итогах вашего «гениального» конкурса.
    Нормально инфопродукт Ваш стрельнул, после такого пиара? :)


  1. ReRayne
    15.01.2016 17:01
    +3

    Эмммм, а чем обоснована такая цена?)

    Стоимость курса — 100 000 Р


    1. 0x0FFF
      15.01.2016 17:55
      +1

      Возможно, «Билайн» захантил чересчур много специалистов на позицию «Data Scientist», а так как задач для них особенно нет, должны же они как-то отрабатывать свой хлеб? 50 человек по 100к с каждого пару раз в год — вот и бюджет команды из 4х специалистов

      В целом согласен с замечанием: мероприятие непродолжительное (12 занятий по 2 часа) и после программы ШАД (бесплатной, кстати) выглядит немного смешно, наподобие вечерних курсов программистов. Похоже, что оно 100% нацелено на хантинг


      1. 7voprosov
        15.01.2016 18:22
        +2

        Кажется странным устраивать мероприятие, нацеленное на хантинг, с таким жестким ценовым цензом.


    1. gurux13
      15.01.2016 18:44
      +4

      100k / 12 уроков / 2 часа ~= 4200р/час. Это очень крутая цена для групповых занятий. Из плана вижу, что эксперту в области анализа данных будет скучно, школа на новичков скорее. А для них это слегка лучше соответствующих курсов на курсере или чтения того же Andrew Ng.
      Кстати, судя по учебному плану, обработке текстов посвящено одно занятие (9е).
      Одно занятие (1) вводное, ещё одно (12) про kaggle. Это мало отношения к ML имеет.
      Да, и я так понимаю, что никакого питания даже не включено («Рядом есть кафе и рестораны, где вы сможете перекусить до или после занятий.»)

      Ну и ради прикола. 50 человек, 100к с каждого. 24 человеко-часа преподавателей. 208333 рубля человеко-час. Даже если половину отдать оргам, это почти 19 миллионов рублей в месяц зарплаты преподавателю. Карл!
      Пройти обучение в школе данных Билайн — 100000 рублей по карте Мастеркард. Выйти в топ и «получить рекомендацию на работу мечты» — бесценно.

      P.S. «Если вы приходите в восторг от слов «дата», ...» — это сильно.


  1. mephistopheies
    15.01.2016 19:54

    был бы вход на лекцию рублей пицот, я бы на некоторые сходил бы