Как классифицировать и табулировать ответы в свободной форме на вопрос в опросе?


Я хочу проанализировать ответы на веб-опрос (Git User'S Survey 2008 , Если вам интересно). Некоторые вопросы были заданы в свободной форме, например: "как вы узнали о Git?". С более чем 3000 ответов анализ этих ответов полностью вручную исключен (особенно учитывая, что в этом опросе довольно много вопросов в свободной форме).

Как я могу сгруппировать эти ответы (вероятно, на основе ключевых слов, используемых в ответе) в категории, по крайней мере, полуавтоматически (т. е. программа может запросить подтверждение), а затем как табулировать (подсчитывать количество записей в каждой категории) эти ответы в свободной форме (ответы)? Один ответ может принадлежать более чем одной категории, хотя для простоты можно предположить, что категории ортогональны / исключительны.

Я хотел бы знать, по крайней мере, ключевое слово для поиска или алгоритм (метод) для использования. Я бы предпочел решения в Perl (или C).


Возможное решение № 1. (частично): байесовская категоризация

(добавлено 2009-05-21)

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

4 2

4 ответа:

Текст:: Ngrams + Алгоритм:: Cluster

  1. Создайте некоторое векторное представление для каждого ответа (например, подсчет слов), используяText::Ngrams .
  2. кластеризация векторов с использованием алгоритма:: Cluster для определения группировок, а также ключевых слов, соответствующих группам.

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

Я уже сталкивался с такими грубыми насильственными действиями в прошлом с довольно большими трупами. Лингва::ванная::Таггер, Лингва::штанги::Ан. Кроме того, API Net:: Calais (к сожалению, поскольку Thomposon Reuters не совсем дружелюбны к открытым исходным кодам) довольно полезен для извлечения именованных сущностей из текста. Конечно, как только вы очистите исходные данные с помощью этого материала, фактическое сжатие данных зависит от вас. Я склонен подозревать, что подсчеты частоты и немного механической перекрестной проверки турка на выходе будут достаточно для ваших нужд.

Ищите общие слова в качестве ключевых слов, но через отсутствующие бессмысленные слова, такие как "the", "a" и т. д. После этого вы попадаете вестественный язык вещи, которые находятся за пределами меня.

До меня только что дошло, что идеальным решением для этого является AAI (искусственный интеллект). Используйте механический турок Amazon . Привязки Perl являютсяNet::Amazon::MechanicalTurk . По одному пенни за ответ с приличным перекрытием (скажем, три человека за ответ) , что составит около $ 90 ДОЛЛАР США.