Лучше кластеризация текстовых документов, чем tf/idf и сходство с косинусом?
Я пытаюсь сгруппировать поток Twitter. Я хочу поместить каждый твит в кластер, который говорит об одной и той же теме. Я попытался сгруппировать поток, используя алгоритм онлайн-кластеризации с подобием tf/idf и косинусом, но я обнаружил, что результаты довольно плохие.
Основными недостатками использования tf/idf являются то, что он кластеризует документы, похожие на ключевые слова, поэтому полезно идентифицировать почти идентичные документы. Например, рассмотрим следующие предложения:
1- Веб-сайт Stackoverflow - прекрасное место.
2- Stackoverflow - это веб-сайт.
Предыдущие два предложения, скорее всего, будут объединены вместе с разумным пороговым значением, поскольку у них есть много ключевых слов. Но теперь рассмотрим следующие два предложения:
1- Веб-сайт Stackoverflow - прекрасное место.
2- Я регулярно посещаю Stackoverflow.
Теперь, используя tf/idf, алгоритм кластеризации потерпит неудачу, потому что они разделяют только одно ключевое слово, даже если оба говорят об одной теме.
Мой вопрос: есть ли лучшие методы для кластерных документов?
Ответы
Ответ 1
По моему опыту, сходство косинусов в векторах скрытого семантического анализа (LSA/LSI) работает намного лучше, чем исходный tf-idf для текстовой кластеризации, хотя я допускаю, что я не пробовал это на данных Twitter. В частности, он, как правило, заботится о проблеме разреженности, с которой вы сталкиваетесь, где документы просто не содержат достаточно общих терминов.
Модели темы, такие как LDA, могут работать еще лучше.
Ответ 2
Как упоминалось в других комментариях и ответах. Использование LDA может дать хорошие твиты- > веса темы.
Если эти веса недостаточны для ваших потребностей, вы можете посмотреть на кластеризацию этих распределений тем, используя алгоритм кластеризации.
В то время как это зависит от тренировки, LDA может легко связывать твиты с потоком stackoverflow, переполнением стека и переполнением стека в одну и ту же тему. Однако "мой стек блоков близок к переполнению" может вместо этого перейти к другой теме о коробках.
Еще один пример: твит со словом "Apple" можно разделить на несколько разных тем (компания, фрукты, Нью-Йорк и другие). LDA будет смотреть на другие слова в твиттере, чтобы определить применимые темы.
- "Стив Джобс был генеральным директором Apple" явно о компании
- "Я ем самое вкусное яблоко" явно о фруктах
- "Я собираюсь в большое яблоко, когда я еду в США", скорее всего, посещает Нью-Йорк.
Ответ 3
Длинный ответ:
TfxIdf в настоящее время является одним из самых известных методов поиска. Вам нужна некоторая предварительная обработка из Natural Langage Processing (NLP). Существует много ресурсов, которые могут помочь вам на английском языке (например, lib 'nltk' в python).
Перед индексированием вы должны использовать анализ НЛП как по своим запросам (вопросам), так и по своим документам.
Точка: while tfxidf (или tfxidf ^ 2, как в lucene), хорошо, вы должны использовать его в аннотированном ресурсе с метаязыковой информацией. Это может быть сложно и требует обширных знаний о вашей основной поисковой системе, анализе грамматики (синтаксисе) и домене документа.
Короткий ответ. Лучше всего использовать TFxIDF со световыми грамматическими аннотациями NLP и переписывать запрос и индексирование.