Полугодовой прогресс

Sep 12, 2016 14:22

Приветствую.

Более полугода не было постов, но я не умер :-) . Просто не получалось какой-то законченной технологии, о которой стоило бы рассказать.

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

Итак, формируем обучающую выборку и учим на ней Word2Vec. Как мы знаем, смысла в самих векторных репрезентациях слов нет, есть смысл только в расстояниях между словами. Именно поэтому, простое суммирование векторов слов, например - во фразе, очень быстро деградирует. Сложив пять и более слов скорее всего не получишь нормального понимания, о чём эти слова, велик шанс попасть в совсем непохожий кластер. Но сама идея векторных репрезентаций - роскошна и оперировать векторами очень удобно.

Поэтому, из векторных репрезентаций слов создаётся семантический вектор смыслов слов. Для этого - 1. Кластеризуем вектора наших слов; 2. - для каждого слова вычисляем расстояние до центра кластера, отбрасываем значения менее 0; 3. - полученные расстояния - и есть семантический вектор. Каждый элемент этого вектора имеет свой смысл, задаваемый теми словами, что образуют соответствующий кластер. Сложение таких векторов деградирует намного медленнее сложения оригинальных репрезентаций слов.

Но и на этом мы не останавливаемся. Есть набор документов, поделённых на 2 или более классов. И каждый из документов обладает семантическим вектором - как результатом сложения векторов входящих в него слов, отнесённых к кластерам. Если вычислить мат ожидание и дисперсию каждого элемента суммарного вектора по всей обучающей выборке документов и отнормировать вектора документов, то получается очень хорошая сигнатура документа. Она интерпретируема в человеческих терминах - каждый элемент - суть количество слов, ассоциированных с соответствующей темой в документе. Больше нуля - в документе тема поднимается чаще, чем в среднем. Меньше нуля - реже. -1 - вообще не поднимается.

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

Проверено на больших объёмах самых разнообразных документов, от нескольких байт, до мегабайт. Сравнивает надёжно.

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

word2vec

Previous post Next post
Up