Как предсказать с Word2Vec? - PullRequest
1 голос
/ 29 мая 2019

Я делаю классификацию текста на арабском диалекте, и я использовал Word2Vec для обучения модели, я получил это до сих пор:

 def read_input(input_file):

    with open (input_file, 'rb') as f:
        for i, line in enumerate (f): 
            yield gensim.utils.simple_preprocess (line)

documents = list (read_input (data_file))
logging.info ("Done reading data file")

model = gensim.models.Word2Vec (documents, size=150, window=10, min_count=2, workers=10)
model.train(documents,total_examples=len(documents),epochs=10)

Что мне теперь делать, чтобы предсказать новый текст, если он принадлежит к одному из 5 моих диалектов?
Также я осмотрелся и нашел этот код:

# load the pre-trained word-embedding vectors 
embeddings_index = {}
for i, line in enumerate(open('w2vmodel.vec',encoding='utf-8')):
    values = line.split()
    embeddings_index[values[0]] = numpy.asarray(values[1:], dtype='float32')

# create a tokenizer 
token = text.Tokenizer()
token.fit_on_texts(trainDF['text'])
word_index = token.word_index

# convert text to sequence of tokens and pad them to ensure equal length vectors 
train_seq_x = sequence.pad_sequences(token.texts_to_sequences(train_x), maxlen=70)
valid_seq_x = sequence.pad_sequences(token.texts_to_sequences(valid_x), maxlen=70)

# create token-embedding mapping
embedding_matrix = numpy.zeros((len(word_index) + 1, 300))
for word, i in word_index.items():
    embedding_vector = embeddings_index.get(word)
    if embedding_vector is not None:
        embedding_matrix[i] = embedding_vector

Но это выдает мне эту ошибку, когда я запускаю ее и загружаю свою обученную модель word2vec:

ValueError: could not convert string to float: '\x00\x00\x00callbacksq\x04)X\x04\x00\x00\x00loadq\x05cgensim.utils'

Примечание:

На самом деле, есть еще один код, который я не разместил здесь, я хотел использовать word2vec с нейронными сетями, у меня есть код для нейронной сети, но я не знаю, как сделать функции, которые я получил от word2vec, чтобы они были в качестве входа в нейронную сеть и с метками в качестве вывода. Можно ли подключить word2vec к глубокой нейронной сети и как?

1 Ответ

0 голосов
/ 30 мая 2019

Word2vec сам по себе не является тем, что классифицирует тексты на диалекты, так что вы не набросали правдоподобный полный подход здесь.

Что заставило вас думать, что word2vec можно или нужно использовать как часть этой задачи? (Если есть мотивирующая теория работы или какой-либо другой опубликованный прецедент для этого подхода, который дал вам идею, это могло бы помочь определить, что еще нужно сделать.)

Каковы ваши тренировочные данные?

Если это большое количество примеров текстов, с точными метками относительно того, из какого диалекта каждого текста, вы пробовали классификаторы, работающие с простыми представлениями текстов "мешок слов" или "мешок символов в граммах" ? (Обнаруживая взаимосвязи между диалектами и точными словами, группами слов или фрагментами слов в текстах, такой классификатор может работать намного лучше , чем word2vec. Word2vec игнорирует фрагменты слов и управляет векторы слов одинакового значения сближаются, скрывая небольшие различия в написании слов или выборе слов.)

Вы также можете попробовать:

  • FastText в режиме классификации, в котором векторы слов (и, необязательно, векторы фрагментов слов) обучаются специально для того, чтобы хорошо классифицировать набор известных меток (а не просто предсказывать) близлежащие слова, как в классическом word2vec

  • методика использования нескольких word2vec-моделей (по одной на диалект) в качестве классификаторов, как показано в записной книжке, включенной в gensim: Глубокая обратная регрессия с рецензиями на Yelp

(отдельно относительно вашего показанного кода:

  • вам не нужно звонить train(documents,...), если вы уже указали documents для вызова класса - он уже прошел обучение, так как включение ведения журнала INFO и просмотр журналов должны прояснить

  • вам не нужно использовать такой код, который пытается открыть / прочитать ваш файл w2vmodel.vec напрямую, потому что gensim включает методы для непосредственного чтения таких файлов, такие как .load_word2vec_format() или (если полный модель изначально была .save() d от gensim), просто .load().

)

...