Вопрос или проблема
У меня есть два списка предложений
A=["Astring1", "Astring2",...,"AstringN"]
B=["Bstring1", "Bstring2",...,"BstringN"]
Я использовал модель встраивания, такую как BERT, чтобы получить векторные представления всех моих строк в каждом списке
EmbeddingA=["EmbeddingAstring1", "EmbeddingAstring2",...,"EmbeddingAstringN"]
EmbeddingB=["EmbeddingBstring1", "EmbeddingBstring2",...,"EmbeddingBstringN"]
Можно ли вычислить корреляцию между моими двумя списками EmbeddingA и EmbeddingB?
(Моя конечная цель – получить матрицу корреляции, показывающую корреляции между многими списками A, B, C, D…)
Недостаточно репутации для комментариев, но это очень просто! Предполагая, что встраивания в обоих списках имеют одинаковую форму (я думаю, BERT делает [1, 12, 728]), вы можете сложить встраивания в 2D матрицы. Каждая строка матрицы должна соответствовать встраиванию для каждого предложения.
Матрицы должны быть формы (N, D), где N – это количество предложений, а D – размерность встраивания.
Затем вы можете использовать ваш метод корреляции по выбору после транспонирования матриц. Мы транспонируем, потому что корреляция вычисляется по строкам, а матрицы в настоящее время имеют форму (N, D), как было указано ранее. Нам нужна форма (D, N) или (признак, предложение), в отличие от (предложение, признак).
import numpy as np # если вы еще не сделали
import pandas as pd # если вы еще не сделали
matrixA = np.array(EmbeddingA) # Форма (N, D)
matrixB = np.array(EmbeddingB) # Форма (N, D)
correlation_matrix = np.corrcoef(matrixA.T, matrixB.T)
correlation_df = pd.DataFrame(correlation_matrix)
print(correlation_df)
Ответ или решение
Для вычисления корреляции между двумя списками векторизованных представлений (эмбеддингов) предложенных вами списков предложу следующий подход.
Шаги для расчета корреляции между эмбеддингами
-
Подготовка данных: Убедитесь, что ваши списки эмбеддингов (EmbeddingA и EmbeddingB) имеют одинаковую размерность. Каждое векторное представление должно объединять предложение в виде вектора определенной длины (D). Обычно выходные эмбеддинги от модели BERT имеют форму (1, 768) или (N, 768), где N — количество предложений.
-
Создание матриц: Переведите ваши списки эмбеддингов в двумерные матрицы, где строки будут соответствовать предложениям, а столбцы — компонентам эмбеддинга. Получатся матрицы, имеющие размерность (N, D).
-
Вычисление корреляции: Чтобы рассчитать корреляцию между двумя списками эмбеддингов, используйте метод корреляции, который подходит для вашего случая. Корреляция обычно рассчитывается по строкам, поэтому необходимо транспонировать ваши матрицы.
Пример кода
import numpy as np
import pandas as pd
# Предположим, что у вас есть списки эмбеддингов EmbeddingA и EmbeddingB
# Преобразуем их в numpy массивы
matrixA = np.array(EmbeddingA) # Размер (N, D)
matrixB = np.array(EmbeddingB) # Размер (N, D)
# Транспонируем матрицы: теперь у нас будет (D, N)
transposed_matrixA = matrixA.T
transposed_matrixB = matrixB.T
# Вычисляем корреляцию между эмбеддингами
correlation_matrix = np.corrcoef(transposed_matrixA, transposed_matrixB)
# Создаем DataFrame для лучшего представления
correlation_df = pd.DataFrame(correlation_matrix)
# Выводим на экран матрицу корреляции
print(correlation_df)
Дополнительно:
-
Если ваше конечное намерение — рассчитать корреляционные матрицы между несколькими списками эмбеддингов, вы можете расширить вышеупомянутый код, создав цикл, который обрабатывает каждый список эмбеддингов по очереди и сохраняет результаты в один общий DataFrame для дальнейшего анализа.
-
Не забывайте проверять корректность размерностей ваших данных и соответствие моделей, с помощью которых вы извлекли эмбеддинги.
Этот подход предоставит вам матрицу корреляций, которая даст представление о взаимосвязи между вашими предложениями в разных списках.