2016-11-07 3 views
12

word2vec 모델에는 vocab 공간에서 단어를 숨겨진 레이어 ("in"벡터)로 가져간 다음 vocab 공간으로 되돌아가는 두 개의 선형 변환이 있습니다 ("out "벡터). 보통이 아웃 벡터는 훈련 후에 폐기됩니다. gensim python에서 벡터를 액세스하는 쉬운 방법이 있는지 궁금합니다. 동등하게, 어떻게 행렬에 액세스 할 수 있습니까?gensim word2vec 입/출력 벡터에 액세스

동기 부여 :이 최근의 논문에서 제시 한 아이디어를 구현하고 싶습니다 : A Dual Embedding Space Model for Document Ranking 다음

은 자세한 내용입니다. 상기 기준에서, 우리는 다음 word2vec 모델이 이상 :

enter image description here 다음

입력 층 크기 $의 V $으로, 어휘 사이즈이다 숨겨진 레이어 출력 층 크기 $ d 개에 $이며 $ V $ 크기. 두 행렬은 W_ {IN}과 W_ {OUT}입니다. 보통, word2vec 모델은 W_IN 행렬 만 유지합니다. 이 gensim에 word2vec 모델을 훈련 후, 당신이 얻을 경우, 반환되는 것입니다 물건 같은 :

모델 [ '감자'] = [- 0.2,0.5,2, ...]

W_ {OUT}에 액세스하거나 W_ {OUT}을 (를) 유지하려면 어떻게해야합니까? 이것은 계산 상으로 많은 비용이 소요될 수 있으며, 이것을 수행하기 위해 gensim에 내장 된 메소드를 실제로 원합니다. 처음부터 코드를 작성하면 성능이 좋지 않을까 두려워하기 때문입니다.

+0

지금까지 코드가 있습니까? – rebeling

답변

5

이 답변이 적절하지 않을 수도 있지만 아직 아무도 지적하지 않았습니다. here. 제작자는 비슷한 질문에 답하는 것 같습니다. 또한 그 곳에서 유효한 답을 얻을 기회가 더 많습니다.

그는 link에서 파고 들며 그는 word2vec 소스 코드에 게시하여 필요에 맞게 syn1 삭제를 변경할 수 있습니다.완료되면 메모리 hog임을 입증하므로 삭제하는 것을 잊지 마십시오.

+2

감사! 이게 내가 찾고있는 것 같아. 대답을 바꾸어 말하면, 입/출력 끼워 넣기는 다음과 같습니다. 입력 : model.syn0, 출력 : model.syn1, model.syn1neg –

0

아래 코드는 모델을 저장/불러올 수 있습니다. 피클을 내부적으로 사용하며, 옵션으로 모델의 내부 대형 NumPy 행렬을 디스크 파일에서 가상 메모리로 직접 mmaping하여 프로세스 간 메모리 공유를 위해 사용합니다.

model.save('/tmp/mymodel.model') 
new_model = gensim.models.Word2Vec.load('/tmp/mymodel') 

배경 정보Gensim 원시, 구조화되지 않은 디지털 텍스트를 처리하도록 설계 무료 파이썬 라이브러리 ("일반 텍스트")입니다. 잠정 의미 론적 분석, 잠정 딜리클릿 할당 및 랜덤 프로젝션과 같은 gensim의 알고리즘은 훈련 문서의 코퍼스 내에서 단어의 통계적 동시 발생 패턴을 검사하여 문서의 의미 구조를 발견합니다.

프로젝트를 시작 걷어차 사용 및 샘플 코드 기반에 대해 설명하는 좋은 블로그

설치 참조 here

희망이 도움이됩니다!

+2

답변 해 주셔서 감사합니다. 그러나 이것은 내 질문에 절대적으로 아무런 관련이 없습니다. 특히 word2vec에는 두 개의 다른 단어 벡터 ("in"및 "out")가 있으며 word2vec는 그 중 하나만 유지합니다 ("in"). 나는 다른 것을 요구하고있다. –

0

word2vec.py 파일에서이 변경을 수행해야합니다. 다음 함수에서 현재 "in"벡터를 반환합니다. "아웃"벡터를 원하는대로. "in"은 syn0 객체에 저장되고 "out"은 syn1neg 객체 변수에 저장됩니다.

def save_word2vec_format(self, fname, fvocab=None, binary=False): 
    .... 
    .... 
    row = self.syn1neg[vocab.index] 
관련 문제