【问题标题】:ValueError: Buffer dtype mismatch, expected 'double' but got 'float'ValueError:缓冲区 dtype 不匹配,预期为“double”但得到“float”
【发布时间】:2020-10-27 00:30:43
【问题描述】:
def cast_vector(row):
    return np.array(list(map(lambda x: x.astype('float32'), row)))

words = pd.DataFrame(word_vectors.vocab.keys())
words.columns = ['words']
words['vectors'] = words.words.apply(lambda x: word_vectors.wv[f'{x}'])
words['vectors_typed'] = words.vectors.apply(cast_vector)
words['cluster'] = words.vectors_typed.apply(lambda x: model.predict([np.array(x)]))
#words.cluster = words.cluster.apply(lambda x: x[0])

为什么是float32却报错?

【问题讨论】:

  • 看起来您的模型需要一个 float64 (double) 值;如果您根本不转换为 float32 那么它应该可以工作。
  • 我现在尝试将其设置为双倍值,但仍然无法正常工作。

标签: python pandas nlp


【解决方案1】:

对我来说,它可以更改 kmeans 定义以使用双精度词向量。结果代码是:

from sklearn.cluster import KMeans

word_vectors = Word2Vec.load("../models/word2vec.model").wv

kmeans = KMeans(n_clusters=2, max_iter=1000, random_state=True, n_init=50).fit(X=word_vectors.vectors.astype('double'))

def cast_vector(row):
    return np.array(list(map(lambda x: x.astype('double'), row)))

words = pd.DataFrame(word_vectors.vocab.keys())
words.columns = ['words']
words['vectors'] = words.words.apply(lambda x: word_vectors[f'{x}'])
words['vectors_typed'] = words.vectors.apply(cast_vector)
words['cluster'] = words.vectors_typed.apply(lambda x: kmeans.predict([np.array(x)]))
words.cluster = words.cluster.apply(lambda x: x[0])
words['cluster_value'] = [1 if i==0 else -1 for i in words.cluster]
words['closeness_score'] = words.apply(lambda x: 1/(model.transform([x.vectors]).min()), axis=1)
words['sentiment_coeff'] = words.closeness_score * words.cluster_value

words.head(10)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 2018-12-25
    • 2017-10-14
    • 2014-11-07
    • 2020-07-31
    • 2019-09-10
    • 2021-11-12
    • 2021-07-31
    相关资源
    最近更新 更多