Как спроектировать мою модель word2vec в Tensorflow - PullRequest
0 голосов
/ 17 ноября 2018

Я новичок в использовании встраивания слов и хочу знать, как я могу проецировать свою модель в Tensorflow. Я смотрел на сайт tenorflow, и он принимает только файл tsv (вектор / метаданные), но не знаю, как сгенерировать требуемые файлы tsv. Я пытался найти его и не могу найти какие-либо решения, исправляющие это. Буду ли я пытаться сохранить свою модель в формате файла tsv, мне нужно будет сделать некоторые преобразования? Любая помощь будет оценена.

Я сохранил свою модель в виде следующих файлов и просто загружаю ее, когда мне нужно ее использовать:

word2vec.model

word2vec.model.wv.vectors.npy

1 Ответ

0 голосов
/ 17 ноября 2018

Предполагая, что вы пытаетесь загрузить в модель несколько предварительно обученных вложений слов Генсим, вы можете сделать это непосредственно с помощью следующего кода.

import numpy
import tensorflow as tf
from   gensim.models import KeyedVectors

# Load the word-vector model
wvec_fn = 'wvecs.kv'
wvecs = KeyedVectors.load(wvec_fn, mmap='r')
vec_size = wvecs.vector_size
vocab_size = len(wvecs.vocab)

# Create the embedding matrix where words are indexed alphabetically
embedding_mat = numpy.zeros(shape=(vocab_size, vec_size), dtype='int32')
for idx, word in enumerate(sorted(wvecs.vocab)):
    embedding_mat[idx] = wvecs.get_vector(word)

# Setup the embedding matrix for tensorflow
with tf.variable_scope("input_layer"):
    embedding_tf = tf.get_variable(
       "embedding", [vocab_size, vec_size],
        initializer=tf.constant_initializer(embedding_mat),
        trainable=False)

# Integrate this into your model
batch_size = 32     # just for example
seq_length = 20
input_data = tf.placeholder(tf.int32, [batch_size, seq_length])
inputs = tf.nn.embedding_lookup(embedding_tf, input_data)

Если вы сохранили модель вместо только KeyedVectors, вам может потребоваться изменить код для загрузки модели, а затем получить доступ к KeyedVectors с помощью model.wv.

...