2012-06-14 2 views
3

Я использую кластер k-mean для группировки набора новостей. Я использую модель суммирования слов для представления документов, более конкретно, каждый документ представлен в виде вектора частоты.Добавление новых терминов в модель суммарного слова

Мой вопрос: как я могу добавить новые документы без необходимости пересчитывать все временные векторы термина (видно, что словарь, содержащий все термины для всех документов, изменится)?

ответ

5

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

Другое решение, которое стало популярным в последние годы, - это полностью отказаться от словаря и использовать feature hashing.

Третья возможность заключается в том, чтобы зарезервировать место в векторе объектов для будущих условий. Например, предположим, что вы векторизации кучу документов с словарем размером N, то вы на самом деле превратить их в векторы размера N + K с окончательным K первоначально установлен в ноль, так что вы может добавить до K терминов к лексике позже.

(Что, вероятно, не является решением проблемы является вычисление скалярных произведений, значит, и т.д. на хэш-таблицы непосредственно. Это было бы наиболее гибкий подход, но это, как правило, очень медленно.)

+0

Вы знаете, как это реализовано в TfidfVectorizer scikit? – pnsilva

+0

@pnsilva: что именно? Игнорирование новых терминов - это то, что делает 'TfidfVectorizer.transform'; хеширование функций [работает в процессе] (https://github.com/scikit-learn/scikit-learn/pull/909) по-настоящему; третья возможность напрямую не поддерживается. –

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