word2vecモデルのトレーニング中に転移学習を使用する利点を活用できますか?


13

Googleニュースデータなど、すでにトレーニング済みのモデルの事前トレーニング済みの重みを探しています。十分な量(10 GBなど)のデータを使用して新しいモデルをトレーニングするのは難しいと感じました。したがって、事前学習済みのレイヤーの重みを取得し、ドメイン固有の単語でそれらの重みを再学習できる転送学習の恩恵を受けたいと思います。したがって、トレーニングにかかる​​時間は比較的短くなります。どんな種類の助けも大歓迎です。前もって感謝します :)

回答:


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')

スタンフォードNLPグローブも使用できます

これは、事前に訓練されたword2vecモデルの素晴らしいコンパイルです。

事前トレーニング済みの追加モデル:

gensimとコードの詳細はこちら:https ://radimrehurek.com/gensim/models/word2vec.html

同様の質問があるQuoraフォーラム


2
さて、それは情報の素晴らしい作品です。しかし、事前に訓練されたモデルのレイヤーウェイトを使用して新しいモデルを初期化し、そのモデルを文章でさらに調整できますか?
ノミルックス

@Nomiはい。[gensimドキュメント](からradimrehurek.com/gensim/models/word2vec.html)、あなたはモデルをロード後、model = Word2Vec.load(fname) # you can continue training with the loaded model!
達人

1
上記のドキュメントリンクでは、「注:隠された重み、語彙頻度、バイナリツリーがないため、C形式から読み込まれたベクトルのトレーニングを続けることはできません。」
トレイルブレイザー

3

大きなコーパスでのトレーニングに基づいた分散表現(グローブ)は、スタンフォードNLPグループから直接入手できます。これらの単語の埋め込みをアプリケーションで直接使用できます(1つのホットエンコードされたベクトルを使用してから、埋め込みを取得するためにネットワークをトレーニングする代わりに)。あなたのタスクがあまりにも専門化されていない場合、この埋め込みのセットから始めて実際にうまくいくでしょう。

m×VVm


しかし、事前に訓練されたモデルの重みで新しいword2vecモデルを初期化したいです。事前にトレーニング済みのモデルレイヤーの重みを使用して新しいモデルを初期化することは可能ですか?初期化後、新しいセンテンスでそのモデルをトレーニングしたいと思います。出来ますか?
ノミルックス

はい、できます。ただし、ウェイトマトリックスは公開されているとは思わない
-wabbit

うん、そう...?モデルを自分でトレーニングし、Gensimライブラリを使用して、トレーニングしたモデルの重みにアクセスしようとすると。可能ですか
ノミルクス

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.