무작위로 초기화 된 배열과 가장 유사한 단어 찾기

Aug 21 2020

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

이 오류를 극복하고 배열과 가장 유사한 단어를 찾으려면 어떻게해야합니까?

나는 확인했습니다 이 와 이 페이지를. 그러나 이러한 제안으로 내 문제를 어떻게 해결할 수 있는지 명확하지 않습니다.

답변

1 gojomo Aug 21 2020 at 23:03

Gensim의 KeyedVectors인터페이스 .most_similar()메서드 원시 벡터를 대상으로 사용할 수 있지만 현재 (적어도를 통해 gensim-3.8.3) 인수 유형 감지가 단일 벡터를 키 목록으로 착각하지 않도록하려면이를 하나로 명시 적으로 제공해야합니다. 명명 된 positive매개 변수에 대한 항목 목록의 구성원 .

특히 다음과 같이 작동합니다.

similars = word2vec.wv.most_similar(positive=[vector,])
1 MatthieuBrucher Aug 21 2020 at 21:18

부동 소수점 숫자가 문자열과 유사한 지 확인하려고하는데 작동하지 않습니다 ( cannot unpack non-iterable numpy.float64 object).

당신이해야 할 일은 임의의 부동 소수점 숫자가 아닌 임의의 문자열 을 올바르게 생성하는 것 입니다. 이 작업이 완료되면 코드가 작동합니다. 또한 국가 그 설명서를 참조하십시오 list of str(https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.most_similar)