2008-10-05

Статьи Новые времена - новые задачи Использование квантизации для визуализации данных

Об автоматическом составлении семантического ядра

Andrey Orlov  2008-10-05 00:33

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

Эта статья описывает второй подход: автоматическое составление семантического ядра по готовой подборке текстов.

Как мы составляли семантическое ядро

Как мы составляли семантическое ядро

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

Краткое описание подхода

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

Теги и ключевые слова

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

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

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

Немного теории

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

В качестве значений элементов векторов берут не только частоту, но и различные полуэмпирические оценки "важности" этого слова для этого текста: IDF (Inverse Document Frequency) самое известная оценка такого типа.

В 10000-мерном пространстве слов легко представить облако векторов, соответствующих текстам сходной тематики. Удобной характеристикой этого облака является средний (т.н. "позиционный") вектор. Его достаточно для небольших и простых подборок текстов, а в более сложных случаях используются более сложные характеристики (например, наилучшая квантизация).

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

Интересующиеся могут продолжить знакомство с теорией, поискав тексты на тему "Анализ главных компонент", а для нашей реализации хватило и этого.

Практическая реализация

Была написана небольшая программа на языке python, действующая по следующему принципу:

  • Перевести все тексты двух подборок в векторное представление;
  • Нормализовать их, чтобы минимизировать влияние длины текста:
  • Для каждой подборки найти средний вектор;
  • Найти разность между векторами и отобрать слова с наибольшим весом;
  • Из этих слов отобрать те, которые встречаются в 2-10% текстов с частотой не менее 2 слов на текст;
  • Просмотреть и отфильтровать полученный список слов.

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

Результаты

Были использованы две подборки текстов, объемом примерно пятьдесят текстов каждая, суммарным размером около полумегабайта. Одна подборка была набрана из текстов предметной области, вторая - из блога одного из участников работы. Вторая подборка играла роль "подборки обычных текстов языка", так как использовалось не расстояние, а разность между векторами, то все положительные значения разности соответствуют словам, характерным для текстов предметной области, все отрицательные - характерным для другой подборки текстов, что позволило исключить их из дальнейшей работы.

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

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

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

Заключение

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

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

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