Что это?
PCA можно рассматривать как математический трюк, часто применяемый для оптимизации систем машинного обучения. Имея дело с векторами, которые слишком велики/имеют слишком высокую размерность для использования в вычислениях, мы можем определить, какие измерения захватывают наибольшее количество информации о векторе, и спроецировать каждый вектор на эти измерения. В контексте НЛП векторы представляют собой встраивания слов. Таким образом, при использовании PCA в системе NLP мы хотим уменьшить размер этих вложений слов, но при этом сохранить как можно больше контекстуальной информации о слове.
Почему это полезно?
PCA может эффективно уменьшить размер вложений слов, сохраняя при этом контекстуальное значение слова. Для моделей с интенсивными вычислениями, которые используют встраивание слов, это может ускорить обучение и время прогнозирования модели.
Как это делается?
PCA обычно выполняется для набора векторов, которые мы можем поместить в матрицу с именем X.
- Затем мы нормализуем среднее значение каждого вектора в X, разделив каждое значение (xi) в векторе, вычислив, сколько стандартных отклонений это значение от среднего значения вектора
- Затем вычисляется ковариационная матрица для среднего нормализованного X, которая измеряет, насколько каждый вектор в X изменяется вместе.
- Затем мы используем метод линейной алгебры SVD (разложение по сингулярным числам) для получения трех матриц: U, S, V.
- Затем мы решаем, сколько измерений должны иметь наши новые векторы. Чтобы решить это, мы можем посмотреть на матрицу S.
- S - диагональная матрица, где каждое значение на диагонали является собственным значением ковариационной матрицы.
- Значение определяет, какую дисперсию фиксирует это измерение, поэтому, если мы заметим, что первые 3 собственных значения имеют относительно высокое значение, а все остальные имеют значения, близкие к 0, мы можем безопасно использовать первые 3 измерения.
- После того, как мы выберем количество измерений для использования, мы берем первые n столбцов матрицы U и умножаем их на матрицу X, чтобы получить наши преобразованные данные.