Я довольно новичок в кластеризации и смежных вопросах, поэтому, пожалуйста, простите мои вопросы.Сомнения в методах кластеризации для твитов
Я пытаюсь войти в эту область, выполнив некоторые тесты, и в качестве первого эксперимента я хотел бы создать кластеры на твитах на основе сходства контента. Основная идея эксперимента заключалась в хранении твитов в базе данных и периодическом вычислении кластеризации (т. Е. С использованием задания cron). Обратите внимание: база данных будет получать новые твиты время от времени.
Будучи невежественны в этой области, моя идея (возможно, наивный) было бы сделать что-то вроде этого:
1. For each new tweet in the db, extract N-grams (N=3 for example) into a set
2. Perform Jaccard similarity and compare with each of the existing clusters. If result > threshold then it would be assigned to that cluster
3. Once finished I'd get M clusters containing similar tweets
Теперь я вижу некоторые проблемы с этим основным подходом. Давайте отложим вычислительную стоимость, как бы было сделано сравнение между твитом и кластером? Предполагая, что у меня есть твит Tn и кластер C1, содержащий T1, T4, T10, с которым я должен сравнивать его? Учитывая, что мы говорим о сходстве, вполне возможно, что порог sim (Tn, T1)>, но sim (Tn, T4) <. Чувство моего чувства говорит мне, что для кластера нужно использовать что-то вроде среднего, чтобы избежать этой проблемы.
Также может случиться, что sim (Tn, C1) и sim (Tn, C2) являются как пороговыми, а сходство с C1 будет выше. В этом случае Tn следует перейти к C1. Это может быть сделано грубой силой, а также назначить твит для кластера с максимальным сходством.
И, наконец, это вычислительная проблема. Я немного читал о minhash, и, похоже, это ответ на эту проблему, хотя мне нужно сделать еще несколько исследований.
В любом случае, мой главный вопрос: мог ли кто-нибудь с опытом работы в этом районе рекомендовать мне, к какому подходу я должен стремиться? Я прочитал некоторые упоминания об LSA и других методах, но попытка справиться со всем становится немного подавляющей, поэтому я буду признателен за руководство.
Из того, что я читаю, инструмент для этого будет иерархической кластеризацией, поскольку это позволит перегруппировать кластеры всякий раз, когда появятся новые данные. Это верно?
Обратите внимание, что я не ищу сложный случай. Моя идея использования будет иметь возможность группировать подобные твиты в группы без какой-либо предыдущей информации. Например, твиты из Foursquare («Я проверяю ...», которые похожи друг на друга, были бы одним случаем, или «Мой рейтинг klout ...»). Также обратите внимание, что я хотел бы, чтобы это было независимым от языка, поэтому я не заинтересован в том, чтобы иметь дело с конкретными языковыми проблемами.
Спасибо за ваш комментарий.Да, меня больше интересует «синтаксический» случай, учитывая, что я хотел бы использовать его для нескольких языков, поэтому проблемы, такие как возникновение или другие специфические проблемы, будут много дополнительной работы. Когда вы говорите, используя N-грамму с N = 2, вы имеете в виду символы или слова? Как я уже говорил, необходима языковая независимость, поэтому генерация слов не имеет смысла на некоторых языках. – Dan
BTW Я провел некоторое тестирование с N = 3, но результаты были не такими замечательными. Использование Jaccard на тех же твитах, которые отличались только от названного имени (т. Е. Около 14-16 из 120 символов), дало сходство 70%. Я предполагаю, что N = 3 добавляет больше шума, чем необходимо в таких случаях, и, возможно, N = 2 будет лучше. Что касается MinHash, я читал об этом и выглядел многообещающе, но могли бы вы предложить мне какой-то ресурс, объясняющий, какие хеш-генераторы лучше всего подходят для этого? Спасибо. – Dan
С N = 2 Я имею в виду слова. Я думаю, что модель с двумя символами даст много ложных срабатываний, так как число возможных функций будет довольно низким, а язык предвзятым. У меня нет опыта работы с нелатинскими языками, поэтому я не знаю, можно ли адаптировать модель слов к этим языкам. Что касается MinHash, я рекомендую прочитать оригинальную статью А. Бродера, которую вы можете найти здесь (http://gatekeeper.dec.com/ftp/pub/dec/SRC/publications/broder/positano-final-wpnums .pdf). Он использует отпечатки пальца Рабина, но вы также можете проверить более простое [Universal Hashing] (http://en.wikipedia.org/wiki/Universal_hashing). –