Дедуплицирующие множества n-грамм

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

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

{
    "count": 1.0, 
    "topic": "lazy people"
}, 
{
    "count": 1.0, 
    "topic": "lazy people taking"
}, 
{
    "count": 1.0, 
    "topic": "lazy people taking away food stamps"
}

Крайний случай заключается в том, что фразу "ленивые люди" можно извлечь из других фраз. Например, "ленивые люди счастливы". Использование наименьшего общего знаменателя (в данном случае "ленивых людей") не кажется хорошей идеей, поскольку конечному пользователю не будут представлены различные контексты ("отмена талонов на питание" и "счастливы").

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

Моя общая цель - представить эти данные в информативной и ранжированной форме.

Существуют ли существующие решения и соответствующие алгоритмы для решения этого класса задач?

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

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

2 ответа

Решение

Это сложная проблема, и решения, как правило, зависят от конкретного приложения. Обычно вы собираете больше, чем просто n-грамм и число. Например, обычно имеет значение, используется ли конкретный n-грамм одним человеком или множеством людей. То есть, если я часто рекламирую и увлекаюсь резьбой по дереву, тогда n-граммовая "резьба по дереву" может оказаться общим термином. Но я единственный человек, который заботится об этом. С другой стороны, может быть много людей, которые увлекаются масляной живописью, но они публикуют информацию относительно редко, и поэтому подсчет n-граммы "масляной живописи" близок к подсчету "резьбы по дереву". Но должно быть очевидно, что "масляная живопись" будет актуальна для ваших пользователей, а "резьба по дереву" не будет. Без информации о том, с каких страниц приходят n-граммы, невозможно сказать, какие из них будут актуальны для большего числа пользователей.

Распространенный способ определения наиболее релевантных фраз в совокупности документов называется TF-IDF: термин частота-обратная частота документа. Большинство описаний, которые вы видите, касаются отдельных слов, но достаточно просто расширить это до n-граммов.

Это предполагает, конечно, что вы можете идентифицировать отдельные документы какого-либо рода. Вы можете рассматривать каждую отдельную публикацию как документ, или вы можете сгруппировать все записи пользователя как более крупный документ. Или, может быть, все сообщения за один день считаются документом. Как вы определяете документы, зависит от вас.

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

Учитывая информацию, которая у меня есть, вот с чего я начну.

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

В качестве реализации вы можете использовать neo4j, который также имеет библиотеку Python: http://www.coolgarif.com/brain-food/getting-started-with-neo4j-in-python

Другие вопросы по тегам