Чи можемо ми скористатися використанням трансферного навчання під час навчання моделей word2vec?


13

Я шукаю заздалегідь підготовлену вагу вже навчених моделей, таких як дані Google News тощо. Мені було важко навчити нову модель з достатньою кількістю даних (10 Гб тощо) для себе. Отже, я хочу скористатись трансферним навчанням, в якому я міг би отримати попередньо підготовлену вагу шару та перевчити ці ваги на слова, визначені в моєму домені. Тож, безумовно, це займе відносно менше часу на тренуваннях. Будь-яка допомога буде дуже вдячна. Спасибі заздалегідь :)

Відповіді:


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

Ось чудова збірка заздалегідь підготовлених моделей 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
Документаційне посилання вище згадує: "ПРИМІТКА. Не можна продовжувати навчання векторів, завантажених із формату С, оскільки прихованих ваг, частоти словника та двійкового дерева відсутні".
trailblazer

3

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

Це вбереже вас від навчання додаткової кількості параметрівm×V де - розмір словникового запасу, а - розмір простору вбудовування, який ви хочете спроектувати.мVm


Але я хочу ініціалізувати свою нову модель word2vec з попередньо підготовленими вагами моделі. Чи можливо використовувати вже попередньо підготовлені ваги шару моделі для ініціалізації нової моделі. Після ініціалізації я хочу навчити цю модель новими пропозиціями. Це можливо?
Номілюкс

Так, ти можеш. Однак я не думаю, що вагова матриця доступна публічно
ваббіт

Так, так ...? Якщо ми самостійно навчаємо модель і намагаємося отримати доступ до підготовлених ваг моделей за допомогою бібліотеки 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.