【问题标题】:TypeError: ufunc 'add' did not contain a loop with signature matching types dtypeTypeError:ufunc'add'不包含签名匹配类型dtype的循环
【发布时间】:2018-09-07 23:29:15
【问题描述】:

我想将X_train_word2vec 向量作为输入传递给Gensim Word2Vec 模型。 向量类型为numpy.ndarray,例如:

X_train_word2vec[9] = array([   19,     7,     1, 20120,     2,     1,   856,   233,   671,
       1,  1208,  6016,     2,    32,     0,     0,     0,     0, ....)]

当我运行这段代码时:

model_word2vec = models.Word2Vec(X_train_word2vec, size=150, window=9)
model_word2vec.train(X_train_word2vec,total_examples=X_train_word2vec.shape[0], epochs=10)

我收到此错误:

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U11') dtype('<U11') dtype('<U11')

我已阅读 this 的帖子,其中问题是由于输入数组中的数据类型不同,但在我的情况下,我拥有相同类型的所有数据:int

更新: model_Word2Vec之前的代码:

tokenizer = Tokenizer()
tokenizer.fit_on_texts(X)
sequence = tokenizer.texts_to_sequences(X)

seq_max_len = 50
X_seq = pad_sequences(sequenza, maxlen=seq_max_len,padding='post',truncating='post',dtype=int)

X_train_word2vec, X_test_word2vec, y_train_word2vec, y_test_word2vec = train_test_split(X_seq, y_cat, test_size=0.2, random_state=123)

【问题讨论】:

  • 请显示完整的回溯。该错误表明您的代码中有 unicode 字符串。

标签: python gensim word2vec


【解决方案1】:

Gensim 的Word2Vec 需要一个文本语料库——例如在它的初始化器的第一个参数中——这是一个字符串标记列表的可迭代序列对象。它不需要原始的 numpy 数组。

此外,如果您确实在实例化时提供了语料库,就像在您的代码行中一样...

model_word2vec = models.Word2Vec(X_train_word2vec, size=150, window=9)

...然后它会自动进行词汇构建和训练步骤。然后您不需要显式调用train()。 (而且,虽然可以再次调用train(),但很少有用户需要这样做非常高级的事情。通常、安全的方法是在完整的语料库上进行一次训练,然后“完成”模型。 )

最后,train() 还期望任何语料库作为 list-of-string-tokens 的可迭代序列对象。

如果您提供了正确的语料库,那么您是否会收到与您一样的错误是值得怀疑的。

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 2017-11-15
    • 1970-01-01
    • 2023-04-03
    • 2021-11-23
    • 2016-08-06
    • 2018-07-25
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多