2013-09-30 2 views
0

Мне нужно придумать способ сортировки и отображения наиболее релевантных данных пользователям. Наши данные состоят из нескольких n-граммов, которые извлекаются из Social Media. Мы называем эти «темы».Де-дублирующие наборы 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: Сообщите мне, если я неправильно использовал какие-либо условия или должен изменить название этого вопроса, чтобы улучшить другие, которые ищут ответы на этот вопрос.

+0

Что именно вы пытаетесь достичь? Существует несколько способов сократить пространство для ваших n-граммов, в зависимости от ваших потребностей. –

+0

Я пытаюсь отобразить отсортированный список всех N-граммов без отображения коллизий. Легкий пример: если бы это были все данные, которые у меня были, то как «Мир», так и «Мир хорош» будут отображаться как эквивалентные по количеству, хотя было бы полезно отображать «Мир - это хорошо». Другой вопрос о том, что другие объекты в моей базе данных могут содержать «Мир» в виде 2 грамм, но «Мир жив» как 4-граммовый. Это помогает? – Kurtis

+0

@JimMischel, я полностью изменил свой вопрос. Я не уверен, каков конечный результат - только «здесь есть тип данных, которые у меня есть» и «вот мои, несколько общие цели для достижения данных». В целом, мне кажется, мне нужен кто-то, чтобы помочь мне понять, как лучше всего преобразовать эту информацию для представления пользователю. – Kurtis

ответ

2

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

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

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

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

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

+0

Я должен упомянуть одну вещь, которая, возможно, не была полностью ясна. Я хотел бы сохранить сумму/количество каждой фразы. В этом случае может быть 100 упоминаний о «Мире», 70 из «Мир хорош» и 30 «Мир круглый». Когда будет показано, было бы интереснее показать, что «Мир хорош» и «Мир круглый», но «Мир» мог бы затмить их в расчете. Оглядываясь назад - я думаю, мне нужно больше подумать о конечном результате. Благодаря! – Kurtis

+0

@ Kurtis: Да, требуется полное понимание того, что вы хотите выйти из процесса. Например, все становится намного сложнее, если вы также хотите объединить суффиксы, как в «кормить мир» и «любить мир». –

+1

@ Kurtis: См. Мой обновленный ответ. –

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^