Что это?

PCA можно рассматривать как математический трюк, часто применяемый для оптимизации систем машинного обучения. Имея дело с векторами, которые слишком велики/имеют слишком высокую размерность для использования в вычислениях, мы можем определить, какие измерения захватывают наибольшее количество информации о векторе, и спроецировать каждый вектор на эти измерения. В контексте НЛП векторы представляют собой встраивания слов. Таким образом, при использовании PCA в системе NLP мы хотим уменьшить размер этих вложений слов, но при этом сохранить как можно больше контекстуальной информации о слове.

Почему это полезно?

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

Как это делается?

PCA обычно выполняется для набора векторов, которые мы можем поместить в матрицу с именем X.

  1. Затем мы нормализуем среднее значение каждого вектора в X, разделив каждое значение (xi) в векторе, вычислив, сколько стандартных отклонений это значение от среднего значения вектора
  2. Затем вычисляется ковариационная матрица для среднего нормализованного X, которая измеряет, насколько каждый вектор в X изменяется вместе.
  3. Затем мы используем метод линейной алгебры SVD (разложение по сингулярным числам) для получения трех матриц: U, S, V.
  4. Затем мы решаем, сколько измерений должны иметь наши новые векторы. Чтобы решить это, мы можем посмотреть на матрицу S.
  5. S - диагональная матрица, где каждое значение на диагонали является собственным значением ковариационной матрицы.
  6. Значение определяет, какую дисперсию фиксирует это измерение, поэтому, если мы заметим, что первые 3 собственных значения имеют относительно высокое значение, а все остальные имеют значения, близкие к 0, мы можем безопасно использовать первые 3 измерения.
  7. После того, как мы выберем количество измерений для использования, мы берем первые n столбцов матрицы U и умножаем их на матрицу X, чтобы получить наши преобразованные данные.