Структура данных / Алгоритм потоковой передачи данных и определения тем - PullRequest
1 голос
/ 22 января 2010

Я хочу знать эффективные алгоритмы / структуры данных для идентификации приведенной ниже информации в потоковых данных.

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

Мне нужно, чтобы мои запросы выполнялись на реальных данных, но не на дубликатах.

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

Определите топ k тем, обсуждаемых пользователями.

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

Я бы хотел, чтобы моя система работала в режиме реального времени. Я имею в виду, что моя система должна обрабатывать любое количество трафика.

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

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

Каким будет эффективный алгоритм / структура данных для достижения этой цели.

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

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

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

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

Определить границы слова

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

Я думаю о разработке прототипа и оценке системы, а не конкретной реализации. Я думаю, что это не возможно, чтобы удалить данные Twitter в режиме реального времени. Я думаю, что этот подход можно проверить на некоторых данных, свободно доступных в Интернете. Любые идеи, где я могу получить эти данные.

Ваш отзыв приветствуется.

Спасибо за ваше время.

- Бала

Ответы [ 3 ]

1 голос
/ 22 января 2010

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

Удаление дубликатов (относительно) легко. Чтобы удалить «почти» дубликаты, вы можете сначала удалить неинтересные части из ваших данных. Вы можете начать с удаления заглавных букв и знаков препинания. Вы также можете удалить наиболее распространенные слова. Затем вы можете добавить полученное сообщение в фильтр Блума. Хэширования недостаточно для Twitter, поскольку хэшированные сообщения не будут намного меньше, чем полные сообщения. Вы бы получили хеш, который не помещается в памяти. Вот почему вы бы вместо этого использовали фильтр Блума. Это может быть очень большой фильтр Блума, но он все равно будет меньше, чем хеш-таблица.

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

Определение языка звучит менее сложно. Не пытайтесь делать что-то умное, такое как «обучение», вместо этого поместите в словарь наиболее распространенные слова из каждого языка Для каждого сообщения используйте язык, слова которого встречаются чаще всего.

Если вы хотите, чтобы алгоритм сам придумал категории, удачи.

0 голосов
/ 13 ноября 2014

Здравствуйте, мы создали очень похожую демонстрационную версию, используя api.cortical.io . Там вы можете создавать семантические отпечатки пальцев каждого твита. (Вы также можете извлечь самые популярные ключевые слова или аналогичные термины, которые не обязательно должны быть частью твита). Мы использовали отпечатки пальцев для фильтрации твиттер-потока по контенту. На twistiller.com вы можете увидеть результат. Публичный 1% -ный твиттер-мониторинг отслеживается по четырем темам.

0 голосов
/ 22 января 2010

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

...