word2vec 모델을 훈련하는 동안 전이 학습을 이용할 수 있습니까?


13

Google 뉴스 데이터 와 같이 이미 훈련 된 모델의 사전 훈련 된 가중치를 찾고 있습니다 . 충분한 양 (10GB 등)의 데이터로 새로운 모델을 훈련하는 것이 어렵다는 것을 알게되었습니다. 따라서 사전 학습 된 레이어 가중치를 얻고 도메인 별 단어에서 해당 가중치를 재교육 할 수있는 전송 학습의 이점을 원합니다. 따라서 교육에 소요되는 시간이 비교적 줄어 듭니다. 모든 도움을 주시면 감사하겠습니다. 미리 감사드립니다 :)

답변:


10

예, 사전 훈련 된 모델을 활용할 수 있습니다. 가장 유명한 것은 여기에서 찾을 수있는 GoogleNewsData 훈련 모델입니다.

사전 훈련 된 단어 및 문구 벡터 https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

그런 다음 gensim을 사용하여 아래와 같이 모델에서 이진 형식으로 벡터를로드 할 수 있습니다.

>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.txt', binary=False)  # C text format
>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.bin', binary=True)  # C binary format

다음은 영어 위키 백과에 대한 다른 사전 빌드 모델입니다.

https://github.com/idio/wiki2vec/raw/master/torrents/enwiki-gensim-word2vec-1000-nostem-10cbow.torrent

출처 : https://github.com/idio/wiki2vec/

사전 빌드 된 모델 사용

Get python 2.7
Install gensim: pip install gensim
uncompress downloaded model: tar -xvf model.tar.gz
Load model in gensim:
from gensim.models import Word2Vec
model = Word2Vec.load("path/to/word2vec/en.model")
model.similarity('woman', 'man')

Stanford NLP Glove를 사용할 수도 있습니다

다음은 사전 훈련 된 word2vec 모델의 훌륭한 편집입니다.

추가 사전 훈련 된 모델 :

gensim 및 코드에 대한 자세한 내용은 https://radimrehurek.com/gensim/models/word2vec.html을 참조 하십시오.

비슷한 질문이있는 Quora 포럼


2
좋아요, 그것은 훌륭한 정보 좋은 작품입니다. 그러나 사전 훈련 된 모델 레이어 가중치를 사용하여 새 모델을 초기화 한 다음 문장으로 해당 모델을 추가 조정할 수 있습니까?
Nomiluks

@Nomi 예. [gensim documentation] ( radimrehurek.com/gensim/models/word2vec.html )에서 모델을로드하면model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru

1
위의 문서 링크는 "참고 : 숨겨진 가중치, 어휘 빈도 및 이진 트리가 없기 때문에 C 형식에서로드 된 벡터를 계속 학습 할 수 없습니다."
trailblazer

3

Stanford NLP 그룹에서 대규모 코퍼스 교육을 기반으로 한 분산 표현 (장갑) 을 직접 이용할 수 있습니다. 핫 인코딩 된 벡터 1 개를 사용한 다음 네트워크를 학습하여 포함을 가져 오는 대신 응용 프로그램에서 해당 단어 포함을 직접 사용할 수 있습니다. 작업이 너무 전문화되지 않은 경우이 임베딩 세트로 시작하면 실제로 잘 작동합니다.

그것은 것입니다 추가 훈련에서 당신을 저장 매개 변수의 수를m×V 여기서 어휘의 크기이며, 당신이에 프로젝트에 원하는 내장 공간의 차원이다.mVm


그러나 사전 훈련 된 모델 가중치로 새 word2vec 모델을 초기화하고 싶습니다. 이미 사전 훈련 된 모델 레이어 가중치를 사용하여 새 모델을 초기화 할 수 있습니까? 초기화 후 새로운 문장으로 그 모델을 훈련시키고 싶습니다. 가능합니까?
Nomiluks

그래 넌 할수있어. 그러나 나는 무게 행렬이 공개적으로 이용 가능하지 않다고 생각한다
wabbit

네 맞아요? 모델을 직접 훈련시키고 Gensim 라이브러리를 사용하여 훈련 된 모델 웨이트에 액세스하려고하면. 가능
Nomiluks

gensim에 대해서는 확실하지 않지만 최적화 할 매개 변수이기 때문에 대부분의 소프트웨어에서 허용해야합니다.
wabbit

@HrishikeshGanu이 링크는 계속 작동합니까? github.com/idio/wiki2vec/raw/master/torrents/… 출처 : github.com/idio/wiki2vec
Anish

1

이 문서를 살펴보십시오 [PDF] . 주요 초점은 NER 작업에 관한 것이지만 아이디어는 동일합니다. 사전 훈련 된 word2vec 벡터를 취하여 특정 응용에 맞게 조정하십시오.

NLP를위한 많은 일반적인 신경망 기반 어플리케이션은 종종 사전 훈련 된 벡터로 시작합니다. 예를 들어 가장 최근의 논문 [PDF] (NER 및 POS 태깅 작업)이이 작업을 수행합니다.


-1
from gensim.models import Word2Vec 
# Word2Vec is full model which is trainable but takes larger memory

from gensim.models import KeyedVectors  
# KeyedVectors is reduced vector model which is NOT trainable but takes less memory

model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) #load pretrained google w2v 

sen1 = 'w1 w2 w3'    
sen2 = 'word1 word2 word3'    
sentences = [[word for word in sen1.split()],[word for word in sen2.split()]]    
total_examples = model_2.corpus_count    

model_2 = Word2Vec(size=300, min_count=1) #initiate a full model    
model_2.build_vocab(sentences) #add words in training dataset

#load words from pretrained google dataset    
model_2.build_vocab([list(model.vocab.keys())], update=True)    
model_2.intersect_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True, lockf=1.0)

#retrain pretrained w2v from new dataset    
model_2.train(sentences, total_examples=total_examples, epochs=model_2.iter)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.