무작위로 초기화 된 배열과 가장 유사한 단어 찾기
Gensim 패키지를 사용하여 다음과 같이 작업중인 말뭉치에서 word2vec 모델을 교육했습니다.
word2vec = Word2Vec(all_words, min_count = 3, size = 512, sg = 1)
Numpy를 사용하여 동일한 차원의 임의 배열을 초기화했습니다.
vector = (rand(512)-0.5) *20
이제 내가 초기화 한 랜덤 벡터와 가장 유사한 word2vec에서 단어를 찾고 싶습니다.
word2vec에있는 단어의 경우 다음을 실행할 수 있습니다.
word2vec.most_similar('word')
그리고 출력은 가장 유사한 단어와 그에 따른 거리가있는 목록입니다.
초기화 된 배열에 대해 유사한 출력을 얻고 싶습니다.
그러나 내가 실행할 때 :
word2vec.most_similar(vector)
다음과 같은 오류가 발생합니다.
Traceback (most recent call last):
File "<ipython-input-297-3815cf183d05>", line 1, in <module>
word2vec.most_similar(vector)
File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\utils.py", line 1461, in new_func1
return func(*args, **kwargs)
File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\models\base_any2vec.py", line 1383, in most_similar
return self.wv.most_similar(positive, negative, topn, restrict_vocab, indexer)
File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\models\keyedvectors.py", line 549, in most_similar
for word, weight in positive + negative:
TypeError: cannot unpack non-iterable numpy.float64 object
이 오류를 극복하고 배열과 가장 유사한 단어를 찾으려면 어떻게해야합니까?
나는 확인했습니다 이 와 이 페이지를. 그러나 이러한 제안으로 내 문제를 어떻게 해결할 수 있는지 명확하지 않습니다.
답변
Gensim의 KeyedVectors
인터페이스 .most_similar()
메서드 는 원시 벡터를 대상으로 사용할 수 있지만 현재 (적어도를 통해 gensim-3.8.3
) 인수 유형 감지가 단일 벡터를 키 목록으로 착각하지 않도록하려면이를 하나로 명시 적으로 제공해야합니다. 명명 된 positive
매개 변수에 대한 항목 목록의 구성원 .
특히 다음과 같이 작동합니다.
similars = word2vec.wv.most_similar(positive=[vector,])
부동 소수점 숫자가 문자열과 유사한 지 확인하려고하는데 작동하지 않습니다 ( cannot unpack non-iterable numpy.float64 object
).
당신이해야 할 일은 임의의 부동 소수점 숫자가 아닌 임의의 문자열 을 올바르게 생성하는 것 입니다. 이 작업이 완료되면 코드가 작동합니다. 또한 국가 그 설명서를 참조하십시오 list of str
(https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.most_similar)