Ich habe ein Word2Vec-Modell mit Python und gensim
in meinem Korpus berechnet.Mit NearestNeighbors und Word2vec, um Satzähnlichkeit zu erkennen
Dann berechnete ich den Mittelwert word2vec Vektor für jeden Satz (Mittelung aller Vektoren für alle Wörter im Satz) und speicherte es in einem Pandas Datenrahmen. Die Spalten des Pandas Datenrahmen df
sind:
- Satz
- Buchtitel (das Buch, in dem der Satz stammt)
- mean-Vektor (der Mittelwert der word2vec Vektoren im Satz - Größe 100)
ich versuche scikit-learn
zu verwenden NearestNeighbors
Satz Ähnlichkeit zu erkennen (ich wahrscheinlich doc2vec stattdessen verwenden könnte, aber eines der Ziele ist es, dieses Verfahren gegen doc2vec vergleichen).
Dies ist mein Code:
X = df['mean_vector'].values
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
ich die folgende Fehlermeldung erhalten:
ValueError: setting an array element with a sequence.
Ich denke, irgendwie sollte ich die Vektoren, iteriert die nächsten Nachbarn auf einer row == sentence
Basis berechnen zu können, von jeder Reihe, aber es scheint, dass dies meine derzeitigen (begrenzten) Python-Fähigkeiten übersteigt.
Dies sind die Daten der ersten Zelle in df['mean_vector'][0]
. Es ist eine vollständige Vektorgröße 100 gemittelt über die Vektoren des Satzes.
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)
Ich habe auch versucht zu tun:
for vec in df['mean_vector']:
X = vec
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
Aber ich folgende Warnung nur erhalten:
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.
Wenn es ein Beispiel auf Github mit word2vec und NearestNeighbors
in ähnlicher ist Szenario würde ich es gerne sehen.
wie funktioniert X aussehen? Können Sie Frage mit Probe X aktualisieren? –
Benötigen Sie Daten für ein MWE. Ich habe gerade "NearestNeighbors" mit Daten von 'Gensim' getestet und es hat mir gut funktioniert. – ncfirth
@Abhishek Thakur Ich habe einen Beispielvektor hinzugefügt (es gibt einen für jeden Satz im Korpus, also ist es eine ganze Zahl). – Enzo