Я вычислил модель word2vec с использованием python и gensim
в моем корпусе.Использование NearestNeighbors и word2vec для определения сходства предложений
Затем я вычислил средний вектор word2vec для каждого предложения (усредняющий все векторы для всех слов в предложении) и сохранил его в кадре данных pandas. Столбцы панд кадра df
данных являются:
- предложение
- Название книги (книги, где предложение исходит от)
- среднего вектора (среднее из word2vec векторов в предложении - размер 100)
Я пытаюсь использовать scikit-learn
NearestNeighbors
обнаружить высказывание подобия (я мог бы использовать doc2vec вместо этого, но одна из целей, чтобы сравнить этот метод против doc2vec).
Это мой код:
X = df['mean_vector'].values
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
Я получаю следующее сообщение об ошибке:
ValueError: setting an array element with a sequence.
Я думаю, как-то я должен повторять векторы, чтобы иметь возможность рассчитывать на row == sentence
основе ближайших соседей каждой строки, но, похоже, это превышает мои текущие (ограниченные) навыки питона.
Это данные первой ячейки в df['mean_vector'][0]
. Это полный векторный размер 100, усредненный по векторам предложения.
array([ -2.14208905e-02, 2.42093615e-02, -5.78106642e-02,
1.32915592e-02, -2.43393257e-02, -1.41872400e-02,
2.83471867e-02, -2.02910602e-02, -5.49359620e-02,
-6.70913085e-02, -5.56188896e-02, -2.95186806e-02,
4.97652516e-02, 7.16793686e-02, 1.81338750e-02,
-1.50108105e-02, 1.79438610e-02, -2.41483524e-02,
4.97504435e-02, 2.91026086e-02, -6.87966943e-02,
3.27585079e-02, 5.10644279e-02, 1.97029337e-02,
7.73109496e-02, 3.23865712e-02, -2.81659551e-02,
-9.69715789e-03, 5.23059331e-02, 3.81100960e-02,
-3.62489261e-02, -3.40068117e-02, -4.90736961e-02,
8.72346922e-04, 2.27111522e-02, 1.06063476e-02,
-3.93234752e-02, -1.10617064e-01, 8.05142429e-03,
4.56497036e-02, -1.73281748e-02, 2.35153548e-02,
5.13465842e-03, 1.88336968e-02, 2.40451116e-02,
3.79024050e-03, -4.83284928e-02, 2.10295208e-02,
-4.92134318e-03, 1.01532964e-02, 8.02216958e-03,
-6.74675079e-03, -1.39653292e-02, -2.07276996e-02,
9.73508134e-03, -7.37899616e-02, -2.58320477e-02,
-1.10700730e-05, -4.53227758e-02, 2.31859135e-03,
1.40053956e-02, 1.61973312e-02, 3.01702786e-02,
-6.96818605e-02, -3.47468331e-02, 4.79541793e-02,
-1.78820305e-02, 5.99209731e-03, -5.92620336e-02,
7.34678581e-02, -5.23381204e-05, -5.07357903e-02,
-2.55154949e-02, 5.06089740e-02, -3.70467864e-02,
-2.04878468e-02, -7.62404222e-03, -5.38200373e-03,
7.68705690e-03, -3.27000804e-02, -2.18365286e-02,
2.34392099e-03, -3.02998684e-02, 9.42565035e-03,
3.24523374e-02, -1.10793915e-02, 3.06244520e-03,
-1.82240941e-02, -5.70741761e-03, 3.13486941e-02,
-1.15621388e-02, 1.10221673e-02, -3.55655849e-02,
-4.56304513e-02, 5.54837054e-03, 4.38252240e-02,
1.57828294e-02, 2.65670624e-02, 8.08797963e-03,
4.55569401e-02], dtype=float32)
Я также пытался сделать:
for vec in df['mean_vector']:
X = vec
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
Но я только получаю следующее предупреждение:
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
Если есть пример на GitHub с помощью word2vec и NearestNeighbors
в подобном сценарий, который я хотел бы увидеть.
как же X выглядит? можете ли вы обновить вопрос с помощью примера X? –
Нужны некоторые данные для MWE. Я просто тестировал 'NearestNeighbors', используя данные из' gensim', и это работало отлично для меня, хотя. – ncfirth
@Abhishek Thakur Я добавил примерный вектор (есть один для каждого предложения в корпусе, поэтому он довольно много). – Enzo