Освойте текстовую аналитику
«Стремитесь к успеху, но готовьтесь к овощам»
В нескольких предыдущих главах мы говорили о данных в их традиционном понимании. Для большинства людей наборы данных представляют собой таблицы, состоящие из строк и столбцов. Это структурированные данные. Однако в реальном мире большая часть данных, с которыми вы взаимодействуете каждый день, является неструктурированной. Эти данные содержатся в текстах, которые вы читаете, в словах и предложениях электронных писем, новостных статей, сообщений в социальных сетях, обзоров продуктов на Amazon, статей в «Википедии» и книги, которую вы держите в руках.
Эти неструктурированные текстовые данные также можно проанализировать, но с ними нужно обращаться несколько иначе – о чем мы и поговорим в этой главе.
Ожидания от текстовой аналитики
Прежде чем углубиться в тему, мы хотели бы поговорить об ожиданиях от текстовой аналитики. На протяжении многих лет этому виду аналитики уделялось достаточно большое внимание. Одним из способов ее применения является анализ настроений, позволяющий определять эмоции автора публикации в социальных сетях, комментария или жалобы. Однако, как вы увидите далее, проанализировать текст не так-то просто. К концу этой главы вы поймете, почему некоторые компании преуспевают в использовании текстовой аналитики, а другие – нет.
Многие люди уже представляют, на что способны компьютеры, анализирующие человеческий язык, благодаря огромному успеху компьютера IBM Watson в викторине Jeopardy! в 2011 году[106] и более поздним достижениям в области разработки систем распознавания речи (например, Alexa от Amazon, Siri от Apple и Assistant от Google). Такие системы перевода, как Google Translate, достигли уровня производительности, близкого к человеческому, за счет использования машинного обучения (в частности, контролируемого). Эти приложения по праву считаются одними из самых выдающихся достижений в области компьютерных наук, лингвистики и машинного обучения.
Именно поэтому предприятия имеют чрезвычайно большие ожидания, когда начинают анализировать имеющиеся у них текстовые данные: комментарии клиентов, результаты опросов, медицинские записи – любой текст, хранящийся в базах данных. Если уж путешественники могут перевести свою речь на один из сотни языков за долю секунды, то и компания, безусловно, сможет проанализировать тысячи комментариев клиентов, чтобы выявить самые насущные проблемы. Верно?
Ну, может, и так.
Технологии анализа текста, хоть и позволяют решать масштабные и сложные задачи, вроде преобразования голоса в текст и речевого перевода, но часто не справляются с задачами, которые кажутся гораздо более простыми. И мы по опыту знаем, что, когда компании приступают к анализу собственных текстовых данных, их часто постигает разочарование. Короче говоря, анализировать текст сложнее, чем может показаться. И как главный по данным, вы должны учитывать это при формулировании своих ожиданий.
Цель этой главы – преподать вам основы текстовой аналитики[107], которая позволяет извлекать полезную информацию из необработанного текста. Имейте в виду, что мы коснемся этой развивающейся области лишь вскользь. Однако мы надеемся, что это позволит вам получить некоторое представление о ее возможностях и проблемах. Благодаря этому по мере появления новых разработок в этой области вы сумеете понять, что из них может оказаться полезным, а что – нет. Как и в случае с любым другим направлением, чем больше вы его изучаете, тем лучше представляете его возможности, а также вырабатываете некоторый скептицизм, вполне приличествующий главному по данным.
В следующих разделах мы поговорим о том, как обнаружить структуру в неструктурированных текстовых данных, какому анализу вы можете их подвергнуть, а затем вернемся к вопросу о том, почему крупнейшие технологические компании могут добиться научно-фантастического прогресса в анализе своих текстовых данных, в то время как остальные могут испытывать с этим трудности.
Как текст превращается в числа
Читая текст, люди понимают настроение, сарказм, намеки, нюансы и смысл. Иногда это даже невозможно объяснить: стихотворение вызывает в памяти воспоминание, шутка заставляет смеяться.
Так что совсем не удивительно, что компьютер не понимает смысла так же, как это делает человек. Компьютеры могут лишь «видеть» и «считывать» числа. Чтобы проанализировать массу неструктурированных текстовых данных, их необходимо сначала преобразовать в числа и уже знакомые вам структурированные наборы данных. Это преобразование неструктурированного и запутанного текста, содержащего орфографические ошибки, сленг, смайлики или аббревиатуры, в аккуратный структурированный набор данных из строк и столбцов может быть весьма субъективным и трудоемким процессом. Сделать это можно несколькими способами; три из них мы рассмотрим далее.
Большой мешок слов
Самый простой способ преобразования текста в числа предполагает создание модели «мешка слов», которая игнорирует порядок слов и грамматику. В результате фраза «Это предложение является очень большим мешком слов» преобразуется в набор, называемый документом, в котором каждое слово является идентификатором, а количество слов – признаком. Порядок слов не имеет значения, поэтому мы сортируем содержимое мешка по алфавиту: {большим: 1, мешком: 1, очень: 1, предложение: 1, слов: 1, это: 1, является: 1}.
Прежде чем двигаться дальше, давайте поговорим об облаках слов; это первое, с чем сталкиваются люди, интересующиеся текстовой аналитикой. Облако слов – это простое визуальное представление, в котором размер слова зависит от частоты, с которой оно встречается в словаре. Облако слов из текста данной главы показано на рис. 11.1[108].
Рис. 11.1. Облако слов из текста данной главы
Вам удалось извлечь какую-нибудь полезную информацию из рис. 11.1? Вероятно, нет. Мы понимаем, что облака слов – отличный маркетинговый материал, но мы не их фанаты и не рекомендуем их использовать даже в качестве инструмента визуализации, поскольку анализировать частоту встречаемости слова в тексте по размеру шрифта гораздо сложнее, чем по длине столбика гистограммы.
Каждый идентификатор называется токеном. Набор токенов из всех документов – словарем.
Разумеется, ваши текстовые данные будут содержать не один документ, поэтому мешок слов может стать очень большим. Каждое уникальное слово и вариант написания станет новым токеном. Вот как будет выглядеть таблица, в каждой строке которой содержится предложение (комментарий, отзыв о продукте и так далее).
Для необработанного текста:
– Это предложение является очень большим мешком слов.
– Это является большим мешком с продуктами.
– Это предложение состоит из двух слов.
Мешок слов будет выглядеть так, как показано в табл. 11.1, где точки данных – количество того или иного слова в предложении.
Табл. 11.1. Преобразование текста в числа методом «мешка слов». Числа обозначают количество того или иного слова (токена) в соответствующем предложении (документе)
Глядя на табл. 11.1, называемую матрицей «документ – термин» (один документ в строке, один термин в столбце), становится понятно, что базовая текстовая аналитика может сводиться к подсчету количества повторений каждого из слов (самое популярное слово – «это») и определению предложения, содержащего максимальное количество токенов (первое предложение). Хотя приведенный пример не особенно интересен, именно так рассчитывается базовая сводная статистика для документов.
Скорее всего, вы также заметили некоторые недостатки в табл. 11.1 (и в облаке слов!). По мере добавления новых документов количество столбцов в таблице будет увеличиваться, поскольку вам придется добавлять новый столбец для каждого нового токена. Кроме того, в результате этого таблица станет разреженной, то есть заполненной нулями, потому что каждое отдельное предложение будет содержать лишь несколько слов из словаря.
Стандартный способ решения этой проблемы – удалить такие слова-заполнители, как «и», «но», «что», «или», «это» и так далее, которые сами по себе не добавляют смысла. Это так называемые стоп-слова. Также принято удалять знаки препинания и цифры, преобразовывать все символы в нижний регистр и применять стемминг, то есть отбрасывать суффиксы и окончания слов, что позволяет сопоставлять такие слова, как продукты и продуктов, с одной и той же основой «продукт-», а слова читать, читаю, читает – с основой «чита-». Более продвинутый аналог стемминга – так называемая лемматизация, которая позволяет сопоставлять слова «хороший», «лучше», «лучший» со словом «хороший». В этом смысле лемматизация «умнее» стемминга, но занимает гораздо больше времени.
Подобные корректировки позволяют значительно уменьшить размер словаря и упростить процесс анализа. На рис. 11.2 показано, как этот процесс выглядит для одного предложения.
Глядя на рис. 11.2, становится понятно, в чем сложность анализа текста. Процесс преобразования текста в числа отфильтровал эмоциональную составляющую, контекст и порядок слов. Если вам кажется, что это повлияет на результаты любого последующего анализа, то вы правы. И в данном случае нам еще повезло, что в тексте отсутствуют орфографические ошибки, представляющие дополнительную проблему для специалистов по работе с данными.
Рис. 11.2. Преобразование текста в мешок слов
Использование метода «мешка слов», доступного в свободном программном обеспечении и изучаемого на курсах по текстовой аналитике, привело бы к получению одинакового результата при числовом кодировании следующих двух предложений, несмотря на очевидные различия в их смысле:
1. Джордан любит хот-доги, но ненавидит гамбургеры[109].
2. Джордан ненавидит хот-доги, но любит гамбургеры.
Люди понимают разницу между этими двумя предложениями, а модель «мешка слов» – нет. Однако не спешите списывать ее со счетов. Несмотря на свой примитивный принцип, мешок слов может оказаться весьма полезным при обобщении разрозненных тем, которые мы рассмотрим в следующих разделах.
N-граммы
На примере с Джорданом и его любимыми хот-догами легко увидеть недостаток метода мешка слов. Фраза из двух слов «любит хот-доги» по смыслу противоположна фразе «ненавидит хот-доги», однако при использовании метода мешка слов контекст и порядок слов игнорируются. В данном случае могут помочь N-граммы. N-грамма – это последовательность из N-слов, поэтому 2-граммы (формально называемые биграммами) для фразы «Джордан любит хот-доги, но ненавидит гамбургеры» будут такими: {Джордан любит: 1, любит хот-доги: 1, ненавидит гамбургеры: 1, но ненавидит: 1, хот-доги, но: 1}.
Данное расширение метода мешка слов добавляет контекст, необходимый для различения фраз из одинаковых слов, но расположенных в разном порядке. Токены биграмм часто добавляются в мешок слов, что еще сильнее увеличивает размер и разреженность матрицы «документ-термин». С практической точки зрения это означает необходимость хранить большую (широкую) таблицу, содержащую относительно небольшой объем информации. Мы добавили несколько биграмм в табл. 11.1 и получили табл. 11.2.
О том, следует ли отфильтровывать биграммы со стоп-словами, ведутся споры, поскольку такой подход может привести к потере контекста. В некоторых программах слова «мой» и «ваш» считаются стоп-словами, однако смысл биграммных фраз «мое предпочтение» и «ваше предпочтение» при отбрасывании стоп-слов полностью исчезает. Это еще одно решение, которое должны принять ваши специалисты при анализе текстовых данных. (Вероятно, вы уже начинаете понимать, насколько сложна текстовая аналитика.)
Табл. 11.2. Пополнение «мешка слов» биграммами. Получившаяся в результате матрица «документ-термин» является очень большой
Однако после такой подготовки обобщение текста можно произвести путем простого подсчета. Такие веб-сайты, как Tripadvisor.com, применяют эти подходы и предоставляют пользователям возможность быстро находить отзывы по часто упоминаемым словам или фразам. Например, на сайте вашего местного стейк-хауса среди предлагаемых поисковых запросов вы можете встретить такие биграммы, как «запеченный картофель» или «идеально приготовленный».
Векторное представление слов
С помощью метода мешка слов и N-грамм можно обнаружить сходства между документами. Если несколько документов содержат похожие наборы слов или N-грамм, вы можете предположить, что предложения связаны между собой (в разумных пределах, конечно: помните о любви/ненависти Джордана к хот-догам). В этом случае строки в матрице «документ-термин» будут численно похожи.
Но как можно численно определить то, какие слова в словаре – не документы, а именно слова – связаны между собой?
В 2013 году компания Google проанализировала миллиарды пар слов (два слова, находящихся в непосредственной близости друг от друга в предложении) в своей огромной базе данных статей Google News[110]. Проанализировав частоту встречаемости пар слов, – например, (вкусная, говядина) и (вкусная, свинина) встречались чаще, чем (вкусная, корова) и (вкусная, свинья), – специалисты компании смогли сгенерировать так называемое векторное представление слов, то есть представление слов в виде списка чисел (или векторов). Если слова «говядина» и «свинина» часто сопровождаются словом «вкусная», то математически они будут представлены как похожие в том элементе вектора, который связан с вещами, обычно описываемыми как «вкусные», то есть с тем, что мы, люди, называем едой.
Чтобы объяснить, как это работает, мы будем использовать небольшое количество пар слов (компания Google использовала миллиарды). Представьте, что при просмотре статьи в местной газете мы обнаруживаем следующие пары слов: (вкусная, говядина), (вкусный, салат), (корм, корова), (говядина, корова), (свинья, свинина), (свинина, салат), (салат, говядина), (есть, свинина), (корова, ферма) и так далее. (Придумайте еще несколько пар слов по аналогии.) Каждое слово попадает в словарь: {говядина, корова, вкусный, ферма, корм, свинья, свинина, салат}[111].
Слово «корова», например, может быть представлено в виде вектора, длина которого соответствует длине приведенного выше словаря, со значением 1 на месте слова «корова» и значением 0 на месте всех остальных слов: (0, 1, 0, 0, 0, 0, 0, 0). Этот вектор представляет собой входные данные для алгоритма контролируемого обучения и сопоставляется с соответствующим выходным вектором (длина которого также соответствует длине словаря). В нем содержатся вероятности появления других слов из словаря рядом с входным словом. Таким образом, входному слову «корова» может соответствовать выходной вектор (0,3, 0, 0, 0,5, 0,1, 0,1, 0, 0), говорящий о том, что слово «корова» сопровождалось словом «говядина» в 30 % случаев, словом «ферма» – в 50 % случаев, а словами «корм» и «свинья» – в 10 % случаев.
Как и при решении любой другой задачи контролируемого обучения, модель пытается как можно лучше сопоставить входные данные (слова-векторы) с выходными (векторами вероятностей). Только в данном случае нас интересует не сама модель, а сгенерированная ею таблица чисел, демонстрирующая то, как каждое из слов в словаре связано со всеми остальными словами. Это и есть векторное представление слов, которое можно рассматривать как числовое представление слова, кодирующее его «смысл». В табл. 11.3 показаны некоторые слова из нашего словаря наряду с их векторным представлением. Слово «корова», например, в данном случае записано в виде трехмерного вектора (1,0, 0,1, 1,0). Раньше оно было записано в виде более длинного и разреженного вектора (0, 1, 0, 0, 0, 0, 0, 0).
Табл. 11.3. Представление слов в виде векторов
Интересная особенность векторного представления слов – измерения содержат их смысл подобно тому, как снижение размерности при анализе главных компонент позволяет отразить темы признаков.
Посмотрите на содержимое столбца «Измерение 1» в табл. 11.3. Видите закономерность? Что бы ни означало данное измерение, Корова и Свинья обладают соответствующим свойством в полной мере, а Салат вообще не имеет к нему отношения. Мы могли бы назвать это измерение Животные. Измерение 2 можно было бы назвать Еда, учитывая высокие значения для слов Говядина, Свинина и Салат, а Измерение 3 мы могли бы назвать Коровьим, потому что в нем выделяются слова, имеющие отношение к коровам. Благодаря этой структуре можно увидеть сходства в том, как используются слова, и даже составить из них простые уравнения (каким бы странным это ни казалось).
В качестве упражнения, используя табл. 11.3, попробуйте убедиться в том, что Говядина – Корова + Свинья ≈ Свинина[112].
Этот способ называется Word2vec[113] (преобразование слов в векторы), а векторы, сгенерированные Google, доступны для бесплатной загрузки[114]. Разумеется, не стоит ждать, что все соотношения будут идеальными. Как вы уже убедились, вариации есть во всем, и в тексте тоже. Вкусными могут называться не только продукты питания, но и совершенно несъедобные вещи. Кроме того, ситуацию усугубляет множество существующих в языке омонимов.
Векторное представление слов с его числовой структурой, позволяющей выполнять вычисления, применяются в поисковых и рекомендательных системах. Однако векторы, созданные на основе текста новостей сервиса Google News, могут не иметь отношения к стоящим перед вами проблемам. Например, торговые названия стирального порошка Tide® (в переводе с англ. «прилив») и крекеров Goldfish® («золотая рыбка») в системе типа Word2vec могут быть семантически близки словам «океан» и «домашнее животное» соответственно. Однако для продуктового магазина эти товары могут оказаться семантически более близкими таким конкурирующим брендам, как стиральный порошок Gain® и крекеры Barnum’s Animals®.
Вы можете применить модель Word2vec к своим текстовым данным и сгенерировать собственные векторы слов. При этом вы можете обнаружить темы и концепции, которые в противном случае даже не пришли бы вам в голову. Однако выявление достаточного количества смысловых взаимосвязей может стать проблемой. Не каждая компания имеет доступ к такому же количеству данных, как Google. Вам может просто не хватить текстовых данных для получения осмысленных векторов.
Тематическое моделирование
После превращения текста в осмысленный набор данных можно приступать к его анализу. Инвестиция в преобразование неструктурированных текстовых данных в структурированный набор из строк и столбцов окупается возможностью применения методов анализа, описанных в предыдущих главах (с некоторыми изменениями). Этим методам будут посвящены следующие несколько разделов.
В главе 8 мы говорили о неконтролируемом обучении, суть которого заключается в поиске естественных закономерностей в строках и столбцах набора данных. Применив алгоритм кластеризации вроде метода k-средних к матрице «документ-термин» наподобие табл. 11.1 и 11.2, мы получим набор из k различных, но в чем-то похожих групп текстовых данных. В некоторых случаях это может оказаться полезным. Однако выполнять кластеризацию текстовых данных методом k-средних довольно сложно. Рассмотрим, к примеру, следующие три предложения:
1. Министерству обороны следует определиться с официальной политикой в отношении космоса.
2. Договор о нераспространении ядерного оружия важен для национальной обороны.
3. Соединенные Штаты недавно отправили в космос двух астронавтов в рамках своей космической программы.
На наш взгляд, здесь обсуждаются две общие темы – национальная оборона и космос. В первом предложении затрагиваются обе темы, а во втором и третьем – только одна. (Если вы с этим не согласны – а на это у вас, безусловно, есть право, – то вы уже представляете главную проблему кластеризации текстовых данных: четкое разделение тем возможно далеко не всегда. Кроме того, относительно текста люди могут составить разные мнения, чего не скажешь о числах.)
Тематическое моделирование[115] похоже на метод k-средних в том смысле, что это алгоритм неконтролируемого обучения, который пытается сгруппировать похожие наблюдения, но при этом не требует, чтобы каждый документ был явно отнесен к одному кластеру. Вместо этого он выдает значения вероятности, говорящие о том, как один документ связан с несколькими темами. Предложение 1, например, может получить оценку 60 % по теме национальной обороны и 40 % по теме космоса.
Чтобы лучше в этом разобраться, рассмотрим еще один пример. На рис. 11.3 представлена перевернутая набок матрица «документ-термин»[116]. Слева вы видите термины, которые встречаются в 20 документах d0–d19. Каждая ячейка отражает частоту встречаемости слова в документе: более темные ячейки соответствуют более высокой частоте. Причем термины и документы были упорядочены с помощью метода тематического моделирования.
Рис. 11.3. Кластеризация документов и терминов путем тематического моделирования. Можете ли вы выделить пять основных тем на этом изображении? Как бы вы их назвали?
Глядя на это изображение, вы можете заметить слова, часто встречающиеся в документах и вместе образующих возможные темы, а также документы, содержащие термины, связанные с несколькими темами (в частности, обратите внимание на d13, третий столбец справа). Однако имейте в виду: данный метод не гарантирует получения точных результатов, как и другие методы неконтролируемого обучения.
С практической точки зрения тематическое моделирование работает лучше всего, когда в наборе документов представлены различные темы. Это может показаться очевидным, однако нам известны случаи, когда тематическое моделирование применялось к подмножествам текстов, которые перед анализом были отфильтрованы по конкретной интересующей аналитиков теме. Это все равно что взять группу новостных статей, отобрать только те, которые содержат слова «баскетбол» и «Леброн Джеймс», а затем ожидать значимых результатов от применения тематического моделирования к отобранным статьям. Результаты вас разочаруют. Отфильтровывая тексты, вы, по сути, задаете одну тему для оставшихся статей. Помните об этом нюансе, продолжайте спорить со своими данными и корректируйте ожидания по мере необходимости.
Классификация текстов
В этом разделе мы поговорим о контролируемом обучении на матрице «документ-термин» (при условии наличия известных целевых атрибутов). В случае с текстом мы, как правило, пытаемся предсказать категориальную переменную, поэтому данная задача решается с помощью моделей классификации, о которых мы говорили в предыдущей главе, а не моделей регрессии, которые предсказывают числа. Один из самых известных примеров успешного применения метода классификации текстов – спам-фильтр, используемый в сервисах электронной почты, входными данными для которого является текст сообщения, а выходными – бинарный флаг «спам» или «не спам»[117]. Пример применения многоклассовой классификации текстов – автоматическое распределение новостных онлайн-статей по категориям: местные новости, политика, мир, спорт, развлечения и так далее.
Чтобы получить представление о том, как происходит классификация текстов с помощью метода мешка слов, давайте рассмотрим один (упрощенный) случай. В табл. 11.4 показаны пять различных тем электронных писем, разбитых на токены, и метки, указывающие, является ли письмо спамом или нет. (Следует помнить о том, сколько усилий компании тратят на сбор подобных данных. Всякий раз, когда провайдер электронной почты спрашивает вас, являются ли те или иные письма спамом, вы предоставляете данные для алгоритмов машинного обучения!)
Табл. 11.4. Простейший пример классификации спама
Как можно использовать алгоритм для извлечения уроков из данных в табл. 11.4 и формирования прогнозов относительно новых, невиданных ранее тем электронных писем?
Возможно, вы подумали о логистической регрессии, которая бывает полезна для предсказания бинарных результатов. Но, к сожалению, здесь она не сработает из-за слишком большого количества слов и недостаточного количества примеров для обучения. В табл. 11.4 столбцов больше, чем строк, а логистическая регрессия этого не любит[118].
Наивный байесовский алгоритм
В подобной ситуации обычно применяется так называемый наивный байесовский алгоритм классификации (названный так в честь того самого Байеса, которого мы упоминали в главе 6). Данный алгоритм пытается ответить на простой вопрос: где с большей вероятностью встречаются слова, используемые в теме электронного письма, – в спаме или в обычном письме? Вы, скорее всего, пытаетесь сделать то же самое, когда просматриваете содержимое своего почтового ящика: вы по собственному опыту знаете, что слово «бесплатно», как правило, встречается в спаме. То же касается слов «деньги», «Виагра» или «богатство». Если большинство слов ассоциируется со спамом, то электронное письмо, скорее всего, им и является. Все просто.
Другими словами, вы пытаетесь рассчитать вероятность того, что электронное письмо – спам, опираясь на слова, содержащиеся в строке темы, (w1, w2, w3, …). Если эта вероятность превышает вероятность того, что письмо спамом не является, мы отмечаем его как спам. Эти конкурирующие вероятности записываются с помощью следующей нотации:
– Вероятность того, что электронное письмо является спамом = P(спам | w1, w2, w3, …).
– Вероятность того, что электронное письмо не является спамом = P(не спам | w1, w2, w3, …).
Прежде чем двигаться дальше, давайте изучим данные в табл. 11.4. Нам известна вероятность, с которой каждое из слов встречается в спам (и не спам) письмах. Слово «бесплатно» присутствовало в трех из четырех спам-сообщений, поэтому вероятность встретить данное слово при условии, что письмо является спамом, составляет P(бесплатно | спам) = 0,75. Выполнив аналогичные расчеты для слов «долг» и «мама», мы получим: P(долг | спам) = 0,25, P(мама | не спам) = 1 и так далее.
Что нам это дает? Мы хотим знать вероятность того, что то или иное электронное письмо – спам при условии наличия в нем определенных слов. При этом нам известна вероятность встретить то или иное слово в письме при условии того, что оно является спамом. Эти две вероятности не одинаковы, но они связаны теоремой Байеса (см. главу 6). Как вы помните, основная идея данной теоремы – поменять условные вероятности местами. Таким образом, вместо P(спам | w1, w2, w3, …) мы можем использовать P(w1, w2, w3, … | спам). Благодаря дополнительным расчетам (которые мы опускаем для краткости[119]) принятие решения относительно классификации нового электронного письма как спам-сообщения сводится к выяснению того, какое из двух значений выше:
1. Оценка «спам» = P(спам) × P(w1 | спам) × P(w2 | спам) × P(w3 | спам).
2. Оценка «не спам» = P(не спам) × P(w1 | не спам) × P(w2 | не спам) × P(w3 | не спам).
Вся эта информация содержится в табл. 11.4. Вероятности P(спам) и P(не спам) отражают долю спама и не спама в обучающих данных – 80 % и 20 % соответственно. Другими словами, если бы вы хотели делать предположения, не глядя на строку темы, вы бы предполагали, что письмо – «спам», потому что такие письма составляют класс большинства в обучающих данных.
Чтобы прийти к приведенным выше формулам, наивный байесовский алгоритм совершил то, что обычно считается вопиющей ошибкой при работе с вероятностями, а именно – допустил отсутствие зависимости между событиями. Вероятность встретить в спам-сообщении оба слова «бесплатно» и «Виагра», обозначаемая как P(бесплатно, виагра | спам), зависит от того, насколько часто эти слова встречаются в одном и том же письме, однако это значительно усложняет вычисления. «Наивность» наивного байесовского алгоритма выражается в предположении независимости всех вероятностей: P(бесплатно, виагра | спам) = P(бесплатно | спам) × P(виагра | спам).
Увидев электронное письмо с темой «Избавьтесь от долгов с помощью наших советов по торговле акциями!», вы бы сосредоточились на словах «избавьтесь», «долги», «акции» и «совет» и вычислили бы следующие конкурирующие значения:
1. Оценка «спам» = P(спам) × P(избавьтесь | спам) × P(долги | спам) × P(акции | спам) × P(совет | спам).
2. Оценка «не спам» = P(не спам) × P(избавьтесь | не спам) × P(долги | не спам) × P(акции | не спам) × P(совет | не спам).
Однако есть небольшая проблема. Новые и редкие слова требуют некоторой корректировки расчетов, чтобы вероятности не умножились на ноль. В крошечном наборе данных, приведенных в табл. 11.4, слово «избавьтесь» вообще не встречается, тогда как слова «долги», «акции» и «совет» встречаются только в спам-сообщениях. Из-за подобных нюансов оценки «спам» и «не спам» окажутся равными нулю. Чтобы это исправить, давайте представим, что мы встречали каждое слово хотя бы один раз, прибавив 1 к частоте встречаемости. Кроме того, мы прибавим 2 к частоте встречаемости спама (и не спама), чтобы значения не были равны 1[120].
Теперь мы можем произвести вычисления:
Первое значение больше второго, поэтому электронное письмо с темой: «Избавьтесь от долгов с помощью наших советов по торговле акциями!» мы классифицируем как спам.
Анализ настроений
Анализ настроений – это популярный способ применения алгоритмов классификации текстов к данным социальных сетей. Если вы введете в поисковую строку Google запрос «анализ настроений по сообщениям в Twitter», то количество результатов вас наверняка удивит; складывается впечатление, что этим заняты все. Суть идеи в данном случае та же, что и в рассмотренном выше примере со спамовыми/не спамовыми письмами и сводится к ответу на вопрос о том, являются ли слова в сообщении в социальной сети (обзоре продукта или опросе) скорее «положительными» или скорее «отрицательными». То, что вы будете делать с полученной информацией, зависит от конкретного бизнес-кейса. Однако следует отметить, что при анализе настроений не стоит выполнять экстраполяцию за пределы контекста обучающих данных, рассчитывая на получение осмысленных результатов.
Что мы имеем в виду? Дело в том, что многие классификаторы для «анализа настроений» обучаются на данных, находящихся в свободном доступе в Интернете. Популярный набор данных для студентов – большая коллекция рецензий на фильмы из базы данных IMDb.com. Этот набор данных и любая модель, созданная на его основе, будут иметь отношение исключительно к обзорам фильмов. Разумеется, она будет ассоциировать такие слова, как «великолепный» и «замечательный», с положительными эмоциями, однако не стоит ожидать, что эта модель будет хорошо работать при ее применении к уникальному бизнес-кейсу, которому присуща особая терминология.
Методы на основе деревьев, такие как случайный лес и бустинг (усиление), могут применяться для решения задач классификации текстов и, как правило, работают лучше, чем наивный байесовский алгоритм с некоторыми наборами данных. Однако наивный байесовский алгоритм обычно становится хорошей отправной точкой и отличается прозрачной интерпретацией.
Практические соображения при работе с текстом
Теперь, когда вы познакомились с несколькими инструментами текстовой аналитики, давайте сделаем шаг назад и поговорим об анализе текста на более высоком уровне.
При работе с текстом вам доступна роскошь чтения данных. Если тематическое моделирование намекает на то, что те или иные предложения относятся к определенным темам, вы можете оценить эти результаты. Если кто-то строит модель классификации текста, попросите представить как хорошие, так и плохие результаты.
По опыту нам известно, что презентовать успешный проект текстовой аналитики заинтересованным сторонам довольно весело, поскольку в данном случае результаты представляют не ряды чисел, а то, что аудитория может прочитать, понять и обсудить. Однако докладчики склонны акцентировать внимание на захватывающих и легких победах, а не на явных промахах. При представлении результатов анализа текста главный по данным должен стремиться к максимальной прозрачности. Также при обработке результатов запросите примеры, когда алгоритмы не сработали. Поверьте, так бывает.
Это возвращает нас к замечанию, которое мы сделали в начале главы: когда компании приступают к анализу собственных текстовых данных, их часто постигает разочарование. Оно было сделано вовсе не для того, чтобы отвратить вас от текстовой аналитики. Открыто говоря о недостатках, мы надеемся предотвратить возможную негативную реакцию со стороны вас или вашей компании, которая может возникнуть, когда вы начнете анализировать текст, поймете, что это сложнее, чем вы думали, и откажетесь от этой идеи или удовлетворитесь слабой аналитикой.
К этому моменту вы уже должны были выработать достаточно скепсиса, чтобы понимать, где именно могут возникнуть проблемы. Однако некоторые крупные технологические компании, по-видимому, преодолели эти трудности и добились лидерства в области текстовой аналитики и обработки естественного языка (NLP, Natural Language Processing), которая имеет дело со всеми аспектами языка, включая звук (в отличие от просто письменного текста).
Преимущества технологических гигантов
В отличие от многих других компаний, такие технологические гиганты, как Apple, Amazon, Google и Microsoft, обладают обилием текстовых и голосовых данных (данных, снабженных метками, которые можно использовать для контролируемого обучения моделей), мощными компьютерами, группами преданных делу исследователей мирового уровня и деньгами.
Благодаря таким ресурсам они добились значительного прогресса в области анализа не только текста, но и звука. В последние годы произошли заметные улучшения в следующих сферах:
– Преобразование речи в текст. Голосовые помощники и функции преобразования голоса в текст на смартфонах стали работать более точно.
– Преобразование текста в речь. Голоса в программах для чтения с экрана компьютера теперь больше напоминают человеческие.
– Преобразование текста в текст. Перевод с одного языка на другой выполняется мгновенно и с достаточно высокой точностью.
– Чат-боты. Окна чата, которые теперь автоматически открываются на каждом веб-сайте с вопросом: «Чем я могу вам помочь?», стали (чуть) более полезными.
– Генерация понятного человеку текста. Языковая модель GPT-3[121] от компании OpenAI способна генерировать текст, напоминающий человеческий, отвечать на вопросы, а также генерировать компьютерный код по запросу. На момент написания этой книги данная модель самая продвинутая в своем роде. Согласно оценкам, стоимость ее обучения (здесь имеется в виду только использование компьютеров без учета оплаты труда исследователей) составила 4,6 миллиона долларов США[122].
Добавьте к этому наличие доступа к данным и группы экспертов-исследователей, и вы поймете, почему обработка естественного языка (пока) остается недоступной большинству компаний. Хотя алгоритмы имеют открытый исходный код, массовый сбор данных и доступ к суперкомпьютерам остается прерогативой технологических гигантов.
Кроме того, при формулировании своих ожиданий следует учитывать то, что приложения, создаваемые технологическими гигантами, универсальны для миллионов людей, то есть предназначены для решения задач, общих для представителей всех слоев общества. Например, голосовой помощник Alexa от компании Amazon предназначен для всех, включая детей. А текстовый перевод осуществляется с учетом жестких правил, встроенных в наборы обучающих данных. Слову «вечеринка» в английском языке соответствует слово «фиеста» в испанском. Суть в том, что все пользователи этих систем ожидают того, что они будут работать одинаково.
Сравните это с задачей классификации текста, специфической для того или иного бизнеса. Например, тональность фразы «телефон Samsung лучше, чем iPhone» зависит от того, в какой компании вы работаете, – Apple или Samsung. Данные, к которым у вас есть доступ, могут отличаться особенным, уникальным только для вашей компании языком. Кроме того, размер данных будет значительно меньше, чем у технологических компаний. Соответственно, результаты могут оказаться не такими четкими, как вы ожидаете.
Тем не менее мы настоятельно рекомендуем вам воспользоваться всеми доступными алгоритмами, включая методы текстовой аналитики. Понимание зависит не столько от мощности компьютеров, сколько от контекста и ожиданий. Если вы осознаете ограничения текстовой аналитики до того, как приступите к ней, вы будете готовы правильно ее использовать.
Подведение итогов
Мы надеемся, что с помощью данной главы нам удалось убедить вас в том, что компьютеры понимают язык не так, как люди, – для компьютера это просто цифры. На наш взгляд, понимание одного этого факта уже очень важно. В следующий раз вы с меньшей вероятностью клюнете на маркетинговую удочку, когда услышите о том, что искусственный интеллект способен решить любую бизнес-задачу, связанную с текстом: в процессе преобразования текста в числа теряется часть смысла, который мы вкладываем в слова и предложения. В этой главе мы обсудили три метода:
– мешок слов;
– N-граммы;
– векторное представление слов.
После преобразования текста в числа вы можете применять методы обучения без учителя, например, тематическое моделирование, или методы обучения с учителем, такие как классификация текстов. Наконец, мы поговорили о том, почему технологические гиганты одерживают верх, и порекомендовали вам формулировать свои ожидания исходя из имеющихся данных и ресурсов.
В следующей главе мы продолжим анализировать неструктурированные данные и поговорим о нейронных сетях и глубоком обучении.