【发布时间】:2020-10-21 13:59:03
【问题描述】:
我正在尝试评估 Spacy 的 most_similar 方法 (https://spacy.io/api/vectors#most_similar) 的性能。我很好奇它是否在 GPU 上运行得更快。函数如下:
def spacy_most_similar(word, topn=10):
ms = nlp_ru.vocab.vectors.most_similar(nlp_ru(word).vector.reshape(1,100), n=topn)
words = [nlp_ru.vocab.strings[w] for w in ms[0][0]]
distances = ms[2]
return words, distances
spacy_most_similar("дерево", 10)
适用于 CPU 版本,但在 GPU(使用 CuPy 数组而不是 NumPy)上我收到错误:
TypeError Traceback (most recent call last)
<ipython-input-8-ea5e049ec55b> in <module>()
7 distances = ms[2]
8 return words, distances
----> 9 spacy_most_similar("дерево", 10)
<ipython-input-8-ea5e049ec55b> in spacy_most_similar(word, topn)
3 print(nlp_ru(word).vector.reshape(1,100).shape)
4 ms = nlp_ru.vocab.vectors.most_similar(
----> 5 nlp_ru(word).vector.reshape(1,100), n=topn)
6 words = [nlp_ru.vocab.strings[w] for w in ms[0][0]]
7 distances = ms[2]
vectors.pyx in spacy.vectors.Vectors.most_similar()
TypeError: list indices must be integers or slices, not cupy.core.core.ndarray
我也试过这种方法:
def spacy_most_similar(word, topn=10):
ms = nlp_ru.vocab.vectors.most_similar(np.asarray([nlp_ru.vocab.vectors[nlp_ru.vocab.strings[word]]]), n=topn)
words = [nlp_ru.vocab.strings[w] for w in ms[0][0]]
distances = ms[2]
return words, distances
spacy_most_similar("дерево", 10)
在 CPU 上一切正常,但对于 GPU 版本(我将 np 更改为 cp):
import cupy as cp
def spacy_most_similar(word, topn=10):
with cp.cuda.Device(0):
nlp_ru.vocab.vectors.data = cp.asarray(nlp_ru.vocab.vectors.data)
ms = nlp_ru.vocab.vectors.most_similar(cp.asarray([nlp_ru.vocab.vectors[nlp_ru.vocab.strings[word]]]), n=topn)
words = [nlp_ru.vocab.strings[w] for w in ms[0][0]]
distances = ms[2]
return words, distances
spacy_most_similar("дерево", 10)
我遇到了这样的错误:
TypeError Traceback (most recent call last)
<ipython-input-6-876656d5f75d> in <module>()
7 distances = ms[2]
8 return words, distances
----> 9 spacy_most_similar("дерево", 10)
<ipython-input-6-876656d5f75d> in spacy_most_similar(word, topn)
3 with cp.cuda.Device(0):
4 nlp_ru.vocab.vectors.data = cp.asarray(nlp_ru.vocab.vectors.data)
----> 5 ms = nlp_ru.vocab.vectors.most_similar(cp.asarray([nlp_ru.vocab.vectors[nlp_ru.vocab.strings[word]]]), n=topn)
6 words = [nlp_ru.vocab.strings[w] for w in ms[0][0]]
7 distances = ms[2]
vectors.pyx in spacy.vectors.Vectors.most_similar()
TypeError: unhashable type: 'cupy.core.core.ndarray'
您能帮我为 most_similar() 方法构建正确的 CuPy 输入吗?
【问题讨论】: