我正在进行阿拉伯语方言文本分类,并且我已经使用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连接到深层神经网络吗?
答案 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()
。
)