2017-03-28 8 views
0
from gensim.models.keyedvectors import KeyedVectors 
model = KeyedVectors.load_word2vec_format('google_news.bin', binary=True) 
print(model['the']) # this prints the 300D vector for the word 'the' 

코드는 모델에 google_news 이진 파일을로드합니다. 내 질문은 어떻게 3 행 바이너리 파일 (바이너리 파일을 0과 1 포함되어 있기 때문에) 계산합니다.word2vec가 바이너리 파일의 결과를 검색하는 방법은 무엇입니까?

+0

'pickle'을 참조하십시오 : https://docs.python.org/3/library/pickle.html – alvas

+0

"바이너리"파일은 약간의 혼동을줍니다. 컴퓨터의 모든 파일은 바이너리로 저장됩니다. 'binary = True'는 컴퓨터가 특정 형식을 "파싱"하지 않고 직접 파일을로드 할 수 있도록 파일의 직렬화를 나타냅니다. 피클 문서보기 P – alvas

답변

0

정확히 무엇이 문제인지 모르겠지만 Python 응용 프로그램에 이진 파일을로드하는 방법을 묻는 것이라고 가정합니다. 나는 당신의 질문은 일반적으로 바이너리 파일에 대한 자세한 느낌

from gensim.models.keyedvectors import KeyedVectors 
model = KeyedVectors.load_word2vec_format('google_news.bin', binary=True) 
print(model['the']) # this prints the 300D vector for the word 'the' 

편집

: 당신은 바이너리를 디코딩하는 내장 된 도구 예를 들어 gensim를 사용할 수 있습니까? 이것은 특히 word2vec와 관련이없는 것처럼 보입니다. 어쨌든, word2vec 이진 파일에서 각 줄은 이진 형식의 단어와 가중치 쌍입니다. 먼저 단어는 "space"에 대한 2 진 문자를 만날 때까지 문자를 반복하여 문자열로 디코딩됩니다. 그런 다음 나머지는 이진수에서 부동 소수점으로 디코딩됩니다. word2vec 바이너리 파일에는 "3000000 300"과 같은 헤더가 있기 때문에 우리는 float 수를 알고 있습니다. 3m 단어가 있고 각 단어가 300D 벡터라는 것을 알려줍니다.

이진 파일은 각 8 비트의 바이트로 구성됩니다. wiki page에서 이진에 대해 자세히 읽어보십시오.

진수 형식의 숫자 0.0056은, 이진된다 :

00111011 10110111 10000000 00110100 

그래서 여기 float를 구성하는 4 바이트있다. 우리는 이것을 어떻게 알 수 있습니까? 왜냐하면 이진 코드는 32 비트 부동 소수점을 인코딩합니다.

이진 파일이 64 비트 부동 소수점을 나타내는 경우 어떻게 될까요? 그런 다음 이진수의 십진수 0.0056은 다음과 같이됩니다.

00111111 01110110 11110000 00000110 10001101 10111000 10111010 11000111 

예, 정밀도가 두 배이기 때문에 길이가 두 배가됩니다. 따라서 word2vec 파일을 디코딩 할 때 가중치가 300d이고 64 비트 인코딩 인 경우 각 숫자를 나타내는 8 바이트가 있어야합니다. 따라서 단어 삽입은 파일의 각 줄마다 300 * 64 = 19,200 자릿수의 이진수를 갖게됩니다. 알 겠어?

Google은 "이진수가되는 방법"이라는 단어를 사용하여 수백만 가지의 예를 처리 할 수 ​​있습니다.

+0

코드에서 알 수 있듯이 모델에 이진 파일을로드하고 있습니다. 내 질문은 어떻게 word2vec 모델 (코드의 3 행) 이진 파일에서 (인쇄 문의) 출력을 검색합니다. 제 생각에는 바이너리 파일은 0과 1로만 구성됩니다. – user7342148

+0

답변을 업데이트했습니다. 도움이 되었으면 좋겠어요. – vega

+0

답장을 보내 주셔서 감사합니다. @vega – user7342148