如何用Word2Vec进行预测?

时间:2019-05-29 19:45:41

标签: python gensim word2vec text-classification

我正在进行阿拉伯语方言文本分类,并且我已经使用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 :(得分:0)

单独使用Word2vec并不能将文本分类为方言,因此您在这里没有勾勒出一种可行的完整方法。

是什么让您认为word2vec可以或应该用作此任务的一部分? (如果有激励性的操作理论,或者这种方法的其他先例为您提供了这种想法,那么这将有助于指导其他应做的事情。)

您的训练数据如何?

如果示例文本很多,并带有准确的标签,说明每个文本来自哪个方言,您是否尝试过使用分类器来处理简单的单词袋或字符袋-n-gram表示形式? (通过发现方言与文本中确切的词,词组或词片段之间的关系,这样的分类器可能比word2vec更好地工作。Word2vec忽略了词片段,并且将相似意思的单词的向量彼此靠近,以消除拼写或选择单词时的细微差别。)

您也可以尝试:

  • FastText在分类模式下,其中训练词向量(以及可选的词片段向量)以专门擅长在一组已知标签之间进行分类(而不仅仅是擅长预测附近的单词,例如经典的word2vec

  • 使用多个word2vec模型(每个方言一个)作为分类器的技术,如gensim随附的笔记本中所展示:Deep Inverse Regression with Yelp Reviews

(关于您显示的代码:

  • 如果您已经向班级实例调用提供了train(documents,...),则无需调用documents,因为已经进行了培训,因为启用INFO日志记录和查看日志应该弄清楚

  • 您不需要使用试图直接打开/读取w2vmodel.vec文件的代码,因为gensim包括直接读取此类文件的方法,例如{{1} }或(如果完整模型是从gensim本地.load_word2vec_format()生成的,则只需.save()