Рассчитать корреляции на основе значений TF-IDF?
Имеет ли смысл рассчитывать коэффициенты корреляции Пирсона на основе матрицы tf-idf, чтобы увидеть, какие термины встречаются в сочетании с другими терминами? Это математически правильно?
Мой вывод - это корреляционная матрица с коэффициентами корреляции в каждой ячейке для каждого члена.
- ------- терм1 терм2 терм3
- term2
- term2
- term2
1 ответ
Это зависит от вашего определения "происходит в сочетании с другими терминами". Чтобы уточнить это еще несколько моментов:
idf не имеет значения, когда выполняется корреляция Пирсона. Все значения tf для одного и того же члена будут умножены на одно и то же значение idf, что приведет к окончательному значению tf-idf. PMC инвариантен по отношению к масштабированию ввода, поэтому idf здесь отменяется. Следовательно, все, что имеет значение в вашей предложенной идее, это tf. Вы можете сохранить некоторые вычисления, если вы даже не рассчитываете idf, но это не сильно повредит, если вы это сделаете.
Теперь об использовании тф. Давайте сделаем пример, чтобы выяснить, что вам может понадобиться:
Допустим TermA
появляется в Document1
очень часто и немного в Document2
, TermB
с другой стороны, появляется в Document1
немного и очень часто в Document2
, Вы сказали бы, что эти два термина появляются вместе или нет? Они встречаются в одном и том же документе, но с разной частотой. Если вы используете PMC для tf-idf, то результатом будет то, что они не будут происходить одновременно (из-за различий в частоте).
В этот момент вы также должны отметить, что PMC изменяется от -1 до 1 в значениях. Т.е. у вас могут быть слова, которые встречаются (PMC=1), которые являются независимыми (PMC=0), и такие слова, которые являются противоположными (PMC=-1). Это соответствует области, которую вы моделируете? Если нет, просто добавьте 1 к PMC.
Другой альтернативой может быть использование косинусного сходства, которое очень похоже на PMC, но имеет некоторые другие характеристики. Также в некоторых других случаях вас может интересовать только фактическое совместное общение, и вас не волнует частота.
Все эти методы, так сказать, "правильные". Более важный вопрос заключается в том, какой из этих методов лучше всего подходит для задачи, которую вы моделируете. Во многих случаях это не может быть определено теоретически, но только путем опробования различных альтернатив и проверки того, какой из них лучше всего подходит для вашей проблемной области.
РЕДАКТИРОВАТЬ (некоторые замечания по поводу комментариев ниже):
Косинусное сходство действительно помогает, но в этом случае вы должны думать иначе. Конечно, вы можете создать векторы частотных терминов для терминов в документе, а затем рассчитать косинусное сходство для этих векторов частотных терминов в документе. Вы правильно указали, что это даст вам сходство сообщений друг с другом. Но я не это имел ввиду. Если у вас есть полная матрица частот-терминов, вы также можете создавать векторы, которые для одного термина описывают, как часто этот термин встречается в каждом документе. Вы также можете рассчитать косинусное сходство этих векторов. Это даст вам сходство терминов, основанных на совместном вхождении документа.
Подумайте об этом так (но сначала нам понадобятся некоторые обозначения):
позволять f_{i,j}
обозначить количество раз термин i
появился в документе j
(обратите внимание, что здесь я игнорирую idf, так как он просто отменяет работу с терминами вместо документов). И пусть F=(f_{i,j})_{i=1...N,j=1...M}
обозначить всю матрицу термина документа (термины идут в столбцах, а документы в строках). Тогда, наконец, мы позвоним |F|_c
матрица F
где каждая колонка нормализуется в соответствии с l^2
норма и |F|_r
матрица F
где каждый ряд нормализуется в соответствии с l^2
норма. И конечно как обычно A^T
обозначает транспонирование A
, В этом случае у вас есть нормальное косинусное расстояние между всеми документами, основанное на
(|F|_r)*(|F|_r)^T
Это даст вам MxM
матрица, которая описывает сходство документов.
Если вы хотите вместо этого вычислить сходство терминов, вы просто
(|F|_c)^T*(|F|_c)
который дает вам NxN
матрица, описывающая термин сходство на основе совпадений в документах.
Обратите внимание, что вычисление PMC в основном будет одинаковым и будет отличаться только типом нормализации, который применяется к строкам и столбцам в каждом из умножений матриц.
Теперь на свой другой пост, вы говорите, что вы хотели бы выяснить, насколько вероятно, что если termA
появляется в документе, что termB
также появляется в том же документе. Или формально говоря p(termB | termA)
где p(termX)
обозначает вероятность termX
появляется в документе. Это совсем другой зверь, но опять же очень просто рассчитать:
1. Count the number of documents in which `termA` appears (call it num_termA)
2. Count the number of documents in which both `termA` and `termB` appear (call it num_termA_termB)
then p(termB | termA)=num_termA_termB/num_termA
Это фактически статистическая мера вероятности сопутствующего события. Однако будьте в курсе, скорее всего, отношения p(termB | termA ) == p(termA | termB)
не будет выполняться, поэтому эта мера совместного вхождения вообще не может использоваться для кластеризации через MDS, и это наиболее вероятно (без каламбура).
Я предлагаю попробовать и PMC, и косинусоподобие (как вы можете видеть выше, они отличаются только нормализацией, поэтому они должны быть быстрыми для реализации обоих), а затем проверить, какой из них выглядит лучше после кластеризации.
Есть несколько более продвинутых методов для кластеризации тем на основе набора документов. Анализ основных компонентов (PCA) или неотрицательная матричная факторизация термина документа документа также часто используется (см. Скрытый семантический анализ или LSA для получения дополнительной информации). Однако это может быть излишним для вашего варианта использования, и эти методы гораздо сложнее сделать. PMC и косинусоподобие имеют абсолютную выгоду от простоты реализации (косинусоподобие немного проще, потому что нормализация проще), и поэтому трудно ошибиться.