У меня есть две структуры данных, и я пытаюсь вычислить оценки косинус_ сходства. Первый представляет собой массив массивов формы (5 768) и выглядит следующим образом (относится к массиву с именем cluster_centre
в последнем блоке кода):
[[ 0.02306443 0.34785258 0.05439265 ..., 0.09316326 -0.03433373
-0.11410401]
[-0.0254183 0.34226337 0.02726386 ..., 0.07436158 -0.04857702
-0.09930794]
[ 0.02697696 0.33578633 0.06375465 ..., 0.1655345 -0.01597141
-0.06437615]
[ 0.05657856 0.33887211 0.09241837 ..., 0.13549419 -0.02989849
-0.081055 ]
[-0.0061077 0.30469445 0.07356605 ..., 0.09696455 -0.03333579
-0.12143167]]
Второй - это pandas фрейм данных это выглядит так (это просто df.head (), относится к df с названием df1
в последнем блоке кода):
sentences labels
0 [0.024474, 0.330608, 0.0968608, 0.0529339, -0.... 3
1 [0.0933215, 0.349529, 0.0945549, 0.0934227, -0... 4
2 [0.0684034, 0.340304, 0.0483908, 0.0768248, -0... 2
3 [-0.0144495, 0.331268, 0.0791185, 0.0446897, -... 2
4 [0.0447558, 0.323667, 0.100169, 0.0723675, -0.... 0
Каждый элемент в предложениях имеет форму (768,) и есть 5 меток, соответствующих числу или массивам в первой структуре данных. То, что я хотел бы сделать, это взять каждое предложение с определенной меткой из фрейма данных и вычислить cosine_similities этих предложений с соответствующим индексом массива из массива массивов, а затем вернуть предложение, которое имеет максимальный балл сходства. Вот что я попробовал до сих пор (обратите внимание, я пытался выделить все предложения с меткой == 1 и сравнить их с массивом с индексом = 1 массива массивов):
from sentence_transformers import SentenceTransformer
from sklearn.cluster import AgglomerativeClustering
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
with open('JWN_Nordstrom_MDNA_overview_2017.txt', 'r') as file:
initial_corpus = file.read()
corpus = initial_corpus.split('. ')
embedder = SentenceTransformer('bert-base-wikipedia-sections-mean-tokens')
corpus_embeddings = embedder.encode(corpus)
# Perform kmean clustering
num_clusters = 5
clustering_model = KMeans(n_clusters=num_clusters)
labels = clustering_model.fit_predict(corpus_embeddings)
cluster_assignment = clustering_model.labels_
cluster_centre = clustering_model.cluster_centers_
df1 = pd.DataFrame()
df1['sentences'] = corpus_embeddings
df1['labels'] = labels
similarities = cosine_similarity(df1['sentences'][df1['labels']==1], cluster_centre[1])
print(similarities)
И вот ошибка:
ValueError: setting an array element with a sequence.
Спасибо за любую помощь!