Pull to refresh

Comments 4

По вашему алгоритму есть пара вопросов. Вот как его понял/не понял я:

  1. Бьем словарь W2V на кластеры. Длина вектора для текста = количество кластеров.
  2. Для каждого кластера вычисляем центр // mean(всех слов кластера) или как?
  3. Вычисляем семантический вектор каждого слова в тексте // Какая операция применяется к слову и центру кластера в котором оно находится?
  4. Складываем семантические вектора всех слов текста // Обычное суммирование векторов?

Буду благодарен если ответите на вопросы после "//"
Приветствую.

Да, бьём весь словарь на кластеры встроенными средствами. Да, вычисляем центр кластера усреднением всех слов, принадлежащих кластеру. Потом вычисляем косинусную меру от каждого слова до центра каждого кластера. Обнуляем все значения косинусных мер ниже заданного порога. Складываем вектора всех слов текста, осредняем. По всем текстам вычисляем мат. ожидание и СКО элементов семантического вектора. Из вектора текста вычитаем вектор мат. ожиданий, делим на СКО и нормируем к единице. Такие вектора можно сравнивать между собой косинусной мерой. Можно обойтись и без мат. ожидания и СКО, но тогда результат будет смазанным.
Интересный метод. Я правильно понимаю, что эту технологию получения весов можно использовать взамен разных TFiDF, дабы не мучиться с разряженными матрицами и большими объемами? В том смысле, что для получения семантического вектора, представляющего кластер, разумнее использовать что-то типа TFiDF, но при больших объемах этот метод загибается.
Классификация скорее всего будет хорошо работать. А вот кластеризация — не уверен: при таком подходе привязка к начальному разбиению на кластеры (точнее выбору количества кластеров) сильно будет влиять на результат. Хотя это болезнь практически всех методов кластеризации.
Если не брать в расчёт всякие нюансы, но Word2Vec — это и есть TFiDF + снижение размерности. Так что да, результаты при использовании TFiDF и Word2Vec должны быть приблизительно одинаковыми, чего нельзя сказать о потребных вычислительных ресурсах. К примеру, если использовать две тысячи элементов вектора на слово, то на словаре в 4-ре миллиона слов, по 8 Кб на слово, имеем уже 32 Гб таблицу векторов. К счастью, её нет необходимости держать в памяти, более того — обращаться к ней часто тоже не требуется — сначала считаются частоты слов в тексте, а потом частота домножается на семантический вектор один раз, в конце обработки всего текста.

Выбранное количество кластеров — краеугольный вопрос. Малое число кластеров даст в большей степени разделение при общеупотребительной лексике (худ. литература, например, или новости) а большое число кластеров необходимо, если в тексте присутствуют термины, марки, коды и прочие относительно редко встречающиеся слова, но очень важные для как признаки. Именно за счёт того, что кластеров довольно много, и требуется высчитывать отношения слова ко всем кластерам, а не брать для слова только один — его собственный, кластер. В противном случае вектора текстов по многим позициям семантического вектора были-бы ортогональны друг другу и высчитывать между ними дистанцию было-бы бесполезно.
Sign up to leave a comment.

Articles