Можем ли мы извлечь выгоду из использования трансферного обучения при обучении моделям word2vec?

13

Я ищу, чтобы найти предварительно обученные веса уже обученных моделей, таких как данные Новостей Google и т. Д. Мне было трудно обучать новую модель с достаточным количеством данных (10 ГБ и т. Д.) Для себя. Итак, я хочу извлечь выгоду из трансферного обучения, в котором я смог бы получить предварительно обученные веса слоя и переучить эти веса для слов, относящихся к моей области. Так что определенно это займет относительно меньше времени на тренировках. Любая помощь будет высоко оценена. Заранее спасибо :)

Nomiluks
источник

Ответы:

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
Хорошо, это отличная информация, хорошая работа. Но могу ли я использовать веса слоя предварительно обученных моделей для инициализации новой модели, а затем дополнительно настроить эту модель с моими предложениями?
Номилукс
@ Номи Да. Из [документации gensim] ( radimrehurek.com/gensim/models/word2vec.html ), как только вы загрузите модель,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Гуру
1
В приведенной выше ссылке на документацию упоминается: «ПРИМЕЧАНИЕ. Невозможно продолжить обучение векторов, загруженных из формата C, поскольку отсутствуют скрытые веса, частота словарного запаса и двоичное дерево».
Первопроходец
3

Распределенные представления (Перчатка), основанные на обучении на большом корпусе, напрямую доступны из группы Stanford NLP. Вы можете использовать эти вложения слов непосредственно в своем приложении (вместо использования 1 горячо закодированных векторов, а затем обучать сеть для получения встраиваний). Если ваша задача не слишком специализирована, запуск с этим набором вложений будет хорошо работать на практике.

m×VVm

Wabbit
источник
Но я хочу инициализировать мою новую модель word2vec предварительно подготовленными весами модели. Можно ли использовать уже предварительно обученные веса слоя модели для инициализации новой модели. После инициализации я хочу обучить эту модель новым предложениям. Является ли это возможным?
Номилукс
Да, ты можешь. Однако я не думаю, что весовая матрица доступна публично
Wabbit
Да, верно ...? Если мы обучаем модель сами и пытаемся получить доступ к обученным весам модели с помощью библиотеки Gensim. Возможно ли это
Nomiluks
Не уверен насчет gensim, но потому что это параметр, который нужно оптимизировать, большинство программ должно это позволить
wabbit
@HrishikeshGanu Эта ссылка все еще работает? github.com/idio/wiki2vec/raw/master/torrents/… Источник: github.com/idio/wiki2vec
Аниш,
1

Взгляните на эту статью [PDF] . Основное внимание уделяется задаче NER, но идея та же: взять предварительно обученные векторы word2vec и адаптировать их для конкретного приложения.

Многие распространенные приложения для НЛП на основе нейронных сетей часто начинаются с предварительно обученных векторов. Например, в недавней статье [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)
Алан Ян
источник