2009-07-13

Статьи Использование квантизации для визуализации данных Бикамеральный разум, или куда ушли Боги

Использование программы поиска семантического ядра

Андрей Орлов  2009-07-13 16:20

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

В этой статье приводятся подробные инструкции по ее использованию.

Собери сам семантическое ядро

Собери сам семантическое ядро

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

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

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

Установка программы

Для работы потребуется программа semanticcore, которая предоставляется пакетом nd.semanticcore. Этот пакет использует python и доступен для установки с PYPI:

easy_install nd.semanticcore

Установленная программа semanticcore, запускается командой:

semanticcore

Без параметров программа выведет краткую помощь по использованию ключей и параметров. Подробнее об ее использовании можно прочитать в документации на nd.semanticcore.

Подготовка выборки текстов

Для работы потребуются две выборки текстов: контрольная и тексты предметной области. Обе выборки должны быть примерно одинаковыми и удовлетворять следующим условиям:

  1. Быть однородными по смыслу: иными словами, тексты внутри каждой выборки должны быть примерно об одном и том же.
  2. Текстов должно быть не слишком много (50-200 штук);
  3. Тексты должны быть средней длины (10-50 тысяч символов);
  4. Тексты должны быть набраны, по возможности, без ошибок (для текстов на "албанцком" потребуются более совершенные способы статистического анализа);

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

Удобно сложить тексты каждой выборки в отдельный каталог, например:

sample/tg
тексты предметной области;
sample/ctrl
контрольная выборка.

Тогда, работая в современном шелле, передать список текстов одной из выборок можно конструкцией "sample/tg/" или "sample/ctrl/". Конечно, счастливым обладателям операционных систем с менее дружелюбной командной строкой придется перечислять все файлы.

Анализ текста

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

В качестве отправной точки стоит запустить программу без фильтрации и получить полный список уникальных слов:

semanticcore -c 0 -w 0:100 sample/tg/* :::

Примечание

В тестовом прогоне длина списка составила 2500 слов, экспертная оценка признала 1500 из них словами, которые значимы для текстов предметной области.

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

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

Фильтрация служебных слов за счет контрольной выборки

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

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

semanticcore -c 0 -w 0:100 sample/tg/* ::: sample/ctrl/*

Примечание

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

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

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

Фильтрация редких и ошибочных слов

Особенностью распределения слов в текстах на естественном языке является то, что какой бы длины не был текст, новые слова будут всегда находиться по мере его просмотра. Частично это можно объяснить ошибками набора текста, в большей степени - вариативностью языка, благодаря которой существуют редко встречающиеся словоформы. Новые слова перестанут появляться только при исчерпании всех слов языка, а это могло бы произойти только для текста очень большой длины - в случае русского языка, даже после просмотра 5000000 слов текста, каждое сотое слово встречается впервые.

Редкие слова бесполезны для разработки алгоритмов, основанных на статистике, поэтому их можно отбросить, задав ключ "-c". Параметр ключа - количество появлений слова в тексте выборки (основной или контрольной). Точное значение параметра зависит от средней длины текста и его можно подобрать. Как правило, всегда стоит отбросить слова, встречающиеся не более одного раза:

semanticcore -c 1 -w 0:100 sample/tg/* ::: sample/ctrl/*

Примечание

В тестовом прогоне было получено 600 слов, из них 450 - с весом больше нуля, 440 - имеющих отношение к предметной области.

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

Информативность слова

Слова имеют разную информационную ценность. Информационная ценность означает ценность обнаружения слова в тексте для задачи, решаемой его просмотром. Если решаемая задача - подборка текстов определенной тематики, то ценность слова зависит от его распространенности в текстах: она падает до минимума, если слово встречается во всех текстах или не встречается ни в одном, так как отобрать текст на его основе нельзя. Такое понимание информационной ценности, или информативности, полностью соответствует определению теории информации: "Информация есть мера снятой неопределенности".

Менее очевидна информативность слова при "понимании" или "восприятии" текста: определение теории информации может показаться сомнительным. Но можно поставить умозрительный эксперимент. Взять учебник по любой отрасли c высокоспециализированным языком и отбросить оттуда не информативные, по данному определению, термины: из текста по ядерной физике убрать слова "ядерный" и "ядро", а из текста по экологии - "экологический" и "экология". Если читателю известно, на какую тему текст, то такая процедура не отразится на его восприятии, так как пропущенные слова легко можно домыслить.

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

Фильтрация слов по распространенности

Распространенность слова - это процентная доля текстов, в которых оно встречается. Фильтр по распространенности слова задается ключом "-w" в виде пары чисел, которые указывают верхнюю и нижнюю границу интервала для допустимой распространенности слова. Подбирать фильтр удобно, запуская программу так, чтобы посмотреть слова, которые будут отброшены. Вначале можно просмотреть наиболее распространенные слова, начав с интервала 95-100%:

semanticcore -c 1 -w 95:100 sample/tg/* ::: sample/ctrl/*

Этот интервал надо увеличивать до тех пор, пока в него не начнет попадать слишком много важных (субъективно) слов.

Примечание

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

Просмотр слов, отсеиваемых нижней границей фильтра, не так очевиден, но начав с интервала 0-1% можно подобрать нижнюю границу фильтра.

Когда границы фильтра подобраны, программа запускается с указанием найденного интервала:

semanticcore -c 1 -w 1:6 sample/tg/* ::: sample/ctrl/*

Примечание

В тестовом прогоне, для интервала 1-6% было получено 550 слов, из них 430 с весом больше нуля, причем 420 имели отношение к предметной области.

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

Замечания о контрольной выборке

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

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

Существует несколько характерных признаков по которым контрольную выборку можно признать неудачной:

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

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

Ручная обработка

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

Примечание

В тестовом прогоне от 450 слов ручная фильтрация оставила 150 слов, которые после нормализации превратились в 70 слов.

Заключение

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

Эпицентр Zope3 Учат тут DreamBot Репозиторий Статистика Редакторам
Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site