Podemos tirar proveito do uso do aprendizado por transferência enquanto treinamos os modelos word2vec?

13

Estou procurando encontrar pesos pré-treinados de modelos já treinados, como dados do Google Notícias, etc. Achei difícil treinar um novo modelo com quantidade suficiente (10 GB etc.) de dados para mim. Portanto, quero me beneficiar do aprendizado de transferência, no qual eu seria capaz de obter pesos de camada pré-treinados e treinar esses pesos em minhas palavras específicas de domínio. Então, definitivamente levará relativamente menos tempo no treinamento. Qualquer tipo de ajuda será muito apreciada. Desde já, obrigado :)

Nomiluks
fonte

Respostas:

10

Sim, você pode se beneficiar de modelos pré-treinados. O mais famoso é o modelo treinado pelo GoogleNewsData, que você pode encontrar aqui.

Vetores de palavras e frases pré-treinados https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

Você pode carregar os vetores no formato binário no seu modelo usando o gensim, como mostrado abaixo.

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

Aqui está um modelo pré-construído diferente para a Wikipedia em inglês:

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

Fonte: https://github.com/idio/wiki2vec/

Usando um modelo pré-construído

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

Você também pode usar a luva Stanford NLP

Aqui está uma excelente compilação de modelos word2vec pré-treinados.

Alguns modelos pré-treinados adicionais:

Mais sobre gensim e código aqui: https://radimrehurek.com/gensim/models/word2vec.html

Fórum do Quora com perguntas semelhantes

Guru
fonte
2
Ok, isso é um ótimo trabalho. Mas, posso usar pesos de camada de modelos pré-treinados para inicializar um novo modelo e depois ajustá-lo ainda mais com minhas frases?
Nomiluks 15/03
@Nomi Yes. Em [documentação do gensim] ( radimrehurek.com/gensim/models/word2vec.html ), depois de carregar o modelo,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru
1
O link da documentação acima menciona: "OBSERVAÇÃO: É impossível continuar treinando os vetores carregados no formato C porque faltam pesos ocultos, frequência de vocabulário e a árvore binária".
pioneiro
3

Representações distribuídas (luva) baseadas no treinamento em um corpus grande estão disponíveis diretamente no grupo da PNL de Stanford. Você pode usar essas combinações de palavras diretamente no seu aplicativo (em vez de usar 1 vetores codificados a quente e, em seguida, treinar a rede para obter as combinações). Se sua tarefa não for muito especializada, começar com esse conjunto de incorporações funcionará bem na prática.

m×VVm

wabbit
fonte
Mas, eu quero inicializar meu novo modelo word2vec com pesos de modelo pré-treinados. É possível usar pesos da camada de modelo pré-treinados para inicializar o novo modelo. Após a inicialização, quero treinar esse modelo com novas frases. é possível?
Nomiluks
Sim você pode. No entanto, eu não acho que a matriz de peso está disponível ao público
Wabbit
Sim, certo ...? Se treinarmos um modelo e tentarmos acessar o acesso, os pesos treinados do modelo usando a biblioteca Gensim. É possível
Nomiluks
Não tenho certeza gensim mas porque é um parâmetro a ser otimizado mais software deve permitir que ele
Wabbit
@HrishikeshGanu Este link ainda está funcionando? github.com/idio/wiki2vec/raw/master/torrents/… Fonte: github.com/idio/wiki2vec
Anish
1

Dê uma olhada neste documento [PDF] . O foco principal é a tarefa NER, mas a idéia é a mesma - pegue vetores word2vec pré-treinados e adapte-os para uma aplicação específica.

Muitos aplicativos comuns baseados em rede neural para PNL freqüentemente começam com vetores pré-treinados. Por exemplo, um artigo muito recente [PDF] (tarefas de marcação NER e POS) faz exatamente isso.

Vladislavs Dovgalecs
fonte
-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)
Alan Yang
fonte