Облака из слов

14/04/2011
Подписка RSS

tag, cloud, частотный анализ, морфология, лингвистика, визуализация
Данный метод посвящён визуализации частотных словарей, построенных в результате обработки текстовой информации методом создания "облака слов".

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

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

и2
есть2
голос1
луч1
тонкий1
сладкий1

Обратите внимание на то, что наиболее часто встречаемые слова выделены шрифтом большего кегля. Это и есть принцип, лежащий в основе построения облаков слов.

Частотные словари могут составляться не только для слов, но и для отдельных букв или их сочетаний. Наверное, многие знают, что в русском языке самые распространённые буквы – это о, е. А знаете ли вы, что если заложить в автоматический генератор текстов частоты встречаемости сочетаний букв естественного языка, то можно получить вполне благозвучную последовательность на "старославянском":

ВЕСЕЛ ВРАТЬСЯ НЕ СУХОМ И НЕПО И КОРКО

Если пойти ещё дальше и заложить в подобную программу частоты употребления слов, то можно получить забавный псевдо-текст (пример по Шеннону):

THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE CHARACTER OF THIS POINT IS THE BEFORE ANOTHER METHOD FOR THE LETTERS THAT THE TIME OF WHO EVER TOLD THE PROBLEM FOR AN UNEXPECTED.

Некоторое время назад стало известно, что с помощью частотных словарей языков можно прогнозировать скорость эволюции отдельных слов в языке. Чем чаще слово употребляется в речи, тем меньше скорость его "мутации", в то же время, редко используемые слова подвержены наибольшим изменениям. Из наиболее стабильных слов, которых обычно, насчитывается порядка 200, составлены словари, поражающие воображение очевидным подобием слов в разных языках (water, wasser, vatten, wato, вода).

Скорость мутации (т.е. разрушения ряда фонетического подобия) слов "один", "два", "ночь", "кто" и некторых других составляет 1/10 000 лет, т.е. они не изменяются за предполагаемое время существования языков индоевропейской семьи, оценивамое в диапазоне 6-10 тыс. лет. В противоположность им, редко используемые слова обладают более коротким периодом "лингвистического полураспада" и могут быть заменены с вероятностью 50% на новое непохожее по произношению слово раз в 750 и более лет.

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

Как видим, возможностей для применения частотных словарей – масса. Осталось научиться автоматизировать их создание. Чтобы создать облако слов, нам необходимо выполнить два действия:

  1. Создать частотный словарь
    • Выделить отдельные слова и их сочетания
    • Нормализовать слова
    • Удалить общеупотребляемые слова
  2. Визуализировать словарь по заданному алгоритму

Создание частотного словаря для английского языка – это достаточно простой процесс. Настолько простой, что он, обычно, встроен в системы визуализации облаков слов, в которые можно загружать тексты целиком и получать их графическое отображение. Тем не менее, большинство систем не умеет выполнять важного действия, "нормализации" словоформ. Под этим математическим термином подразумевается превращение слова "сладок" в "сладкий", "был" в "есть", а для существительных – использование именительного падежа единственного числа. Пример визуализации текста конституции США в программе WordCram, созданной на языке Processing, не учитывающей нормальные словоформы, можно увидеть ниже:

Обратите внимание на две формы одного слова, state и states в центре композиции. Как же избежать подобной ситауции, да ещё и для русского языка? Вывод простой: необходимо браться за создание частотного словаря самостоятельно, а визуализацию отдать на откуп сторонним продуктам.

В качестве базиса для создания частотного словаря можно использовать два подхода:

  • Стемминг (stemming) – этим термином обозначается процесс выделения корней слов. Поместив в стеммер "сладкий" и "сладок" мы получим на выходе в первом и втором случае корень "слад". Соответственно, частотный словарь составляется для корней слов, а потом выбирается "базовое" слово для отображения на схеме. Подобные системы, основанные на статистических или эвристических правилах словообразования, являются основой поисковых систем Яндекс, Google и т.д.
  • Системы морфологического анализа – это более сложные продукты, включающие обширную языковую базу, словарь, правила слоовообразования и т.д. Такие системы обладают возможностью не только идентифицировать часть речи введённого слова, но и могут вывести словоформу в заданном падеже или склонении.

Оба подхода более-менее близки с точки зрения реализации, отличаясь лишь на несколько строк текста в программе на языке Python. Для реализации программы создания частотного словаря удобно использовать пакет Natural Language Toolkit (NLTK), т.к. он содержит в себе уже готовые процедуры построения частотных словарей и алгоритм стемминга Snowball для русского языка.

Чтобы провести морфологический анализ русского языка NLTK уже не достаточно и требуется PyMorphy. Этот пакет позволяет сформировать нормальную форму для любого слова, имеющегося в словаре программы. Помимо этого, пакет учитывает омонимы и выводит нормальные формы для них тоже. Пример программы на языке Python, реализующий второй подход, доступен по ссылке.

Поместив в эту программу стенограмму интервью Д.А. Медведева, мы получаем следующий частотный словарь (фрагмент):

БЫТЬ : 34
СТРАНА : 24
БРИКС : 21
ВОПРОС : 20
РЕЗОЛЮЦИЯ : 18
ЧТОБЫ : 17
ГОСУДАРСТВО : 15
ОЧЕНЬ : 14
ГОВОРИТЬ : 13
ДОЛЖЕН : 13
МЕХАНИЗМ : 13
ПОТОМУ : 11
...

Для визуализации используем сервис Tagxedo, который умеет обрабатывать не только данные в виде текста (для русского языка без нормализации), но и собственно частотные словари. Обратите внимание, что для нашего частотного словаря в настройках Tagxedo нужно указать, что разделителем текста и частоты слов является не просто знак двоеточия, а комбинация пробел-двоеточие-пробел. Сервис Tagxedo также предлагает возможность создания артистических облаков слов, используя шаблоны размещения слов, цветовую схему и т.д. В нашем случае, мы используем портрет А. Линкольна и цветовую схему "Aye aye, Captain!". Результат работы сервиса приведён на рисунке ниже:

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