Вопрос о перестановке pandas фреймов данных и использовании sklearn's cosine_simility и ValueError - PullRequest
0 голосов
/ 08 января 2020

У меня есть две структуры данных, и я пытаюсь вычислить оценки косинус_ сходства. Первый представляет собой массив массивов формы (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.

Спасибо за любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...