ValueError (не удалось передать) при использовании векторов слов: как исправить? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь создать чат-бота для проекта, и я использую spaCy. Я следую учебному пособию, и мне нужно создать двумерный массив X, содержащий столько строк, сколько имеется предложений в моем наборе данных. Каждая строка должна представлять собой вектор слов, описывающий предложение. Однако, когда я пытаюсь создать этот массив, я получаю сообщение об ошибке. Я не совсем уверен, с чем это связано, поскольку я новичок в spaCy и NLP в целом.

Я попытался выяснить, в чем проблема, из документации. Я также посмотрел на переполнение стека, но не смог найти ничего, что объяснило бы мою проблему.

import spacy
import numpy
#load spacy nlp model
nlp = spacy.load("en_core_web_sm")

#calculate the length of my sentences dataset
n_sentences = len(sentences)
#calculate the dimensionality of nlp model
embedding_dim = nlp.vocab.vectors_length
#X is a 2D array with as many rows as there are sentences in my dataset
#Each row is a vector describing the sentence
#initialise array with zeros
X = numpy.zeros((n_sentences, embedding_dim))
#iterate over sentences
for idx, sentence in enumerate(sentences):
   #pass each sentence to nlp object to create document
   doc = nlp(sentence)
   print(doc.vector.shape)
   #save document's .vector attribute to corresponding row in X
   X[idx, :] = doc.vector

Это последняя строка, которая выдает ошибку, насколько я могу судить.

ValueError: could not broadcast input array from shape (96) into shape (1,0)

Я не знаю, что вызывает это, потому что я не очень знаком с массивами и массивами. Мой набор данных, предложения, представляет собой простой список строк. Я ожидал, что в итоге получится двумерный массив, содержащий векторы слов. В учебнике, которому я следую, написано, что код правильный, поэтому я не уверен, почему он не работает для меня, я думаю, что я что-то пропустил.

Это для академического (A-Level) проекта.

1 Ответ

0 голосов
/ 24 мая 2019

Модель en_core_web_sm не включает векторы слов. Вместо этого вы можете скачать en_core_web_md или en_core_web_lg models, что делает.

Ссылка

nlp = spacy.load("en_core_web_md")
print (nlp.vocab.vectors_length)

Выход:

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