我正在使用预先训练的Google新闻数据集,通过在python中使用Gensim库来获取单词向量
model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
Run Code Online (Sandbox Code Playgroud)
加载模型后,我将训练评论句子单词转换为向量
#reading all sentences from training file
with open('restaurantSentences', 'r') as infile:
x_train = infile.readlines()
#cleaning sentences
x_train = [review_to_wordlist(review,remove_stopwords=True) for review in x_train]
train_vecs = np.concatenate([buildWordVector(z, n_dim) for z in x_train])
Run Code Online (Sandbox Code Playgroud)
在word2Vec过程中,我的语料库中的单词出现了很多错误,这些错误不在模型中.问题是我如何重新训练已预先训练好的模型(例如GoogleNews-vectors-negative300.bin'),以获得那些遗失单词的单词向量.
以下是我的尝试:训练了我训练过的新模型
# Set values for various parameters
num_features = 300 # Word vector dimensionality
min_word_count = 10 # Minimum word count
num_workers = 4 # Number of threads to run in parallel
context = 10 # Context window size
downsampling = 1e-3 …Run Code Online (Sandbox Code Playgroud) 来自gensim 0.13.4.1的Word2Vec在运行中更新单词向量不起作用.
model.build_vocab(sentences, update=False)
Run Code Online (Sandbox Code Playgroud)
工作良好; 然而,
model.build_vocab(sentences, update=True)
Run Code Online (Sandbox Code Playgroud)
才不是.
我正在使用这个网站试图模仿他们所做的事情; 因此我在某些时候使用以下脚本:
model = gensim.models.Word2Vec()
sentences = gensim.models.word2vec.LineSentence("./text8/text8")
model.build_vocab(sentences, keep_raw_vocab=False, trim_rule=None, progress_per=10000, update=False)
model.train(sentences)
Run Code Online (Sandbox Code Playgroud)
然而,虽然运行update=False,使用update=True给我以下回溯:
Traceback (most recent call last):
File "word2vecAttempt.py", line 34, in <module>
model.build_vocab(sentences, progress_per=10000, update=True)
File "/home/brownc/anaconda3/lib/python3.5/site-packages/gensim/models/word2vec.py", line 535, in build_vocab
self.finalize_vocab(update=update) # build tables & arrays
File "/home/brownc/anaconda3/lib/python3.5/site-packages/gensim/models/word2vec.py", line 708, in finalize_vocab
self.update_weights()
File "/home/brownc/anaconda3/lib/python3.5/site-packages/gensim/models/word2vec.py", line 1070, in update_weights
self.wv.syn0 = vstack([self.wv.syn0, newsyn0])
File "/home/brownc/anaconda3/lib/python3.5/site-packages/numpy/core/shape_base.py", line 230, in vstack
return …Run Code Online (Sandbox Code Playgroud) 我已经检查了之前的帖子链接,但它似乎不适用于我的情况:-
我已经预先训练过 word2vec 模型:
import gensim
model = Word2Vec.load('w2v_model')
Run Code Online (Sandbox Code Playgroud)
现在我有一个带有关键字的熊猫数据框:
keyword
corruption
people
budget
cambodia
.......
......
Run Code Online (Sandbox Code Playgroud)
我只想在其相应的列中为每个关键字添加向量,但是当我使用model['cambodia']它时会抛出错误KeyError: "word 'cambodia' not in vocabulary"
所以我将关键字更新为:
model.train(['cambodia'])
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用,当我使用
model['cambodia']
它仍然给出错误为KeyError: "word 'cambodia' not in vocabulary". 如何将新单词更新为 word2vec 词汇表,以便我可以获得它的向量?预期输出将是:-
keyword V1 V2 V3 V4 V5 V6
corruption 0.07397 0.290874 -0.170812 0.085428 -0.148551 0.38846
people ..............................................................
budget ...........................................................
Run Code Online (Sandbox Code Playgroud) 我正在从word2vec C代码生成的二进制文件中加载经过预训练的向量,如下所示:
model_1 = Word2Vec.load_word2vec_format('vectors.bin', binary=True)
Run Code Online (Sandbox Code Playgroud)
我正在使用这些向量生成句子的向量表示,这些句子包含的单词可能在中不存在向量vectors.bin。例如,如果vectors.bin单词“酸奶”没有关联的向量,我会尝试
yogurt_vector = model_1['yogurt']
Run Code Online (Sandbox Code Playgroud)
我明白了KeyError: 'yogurt',这很有意义。我想要的是能够接受没有相应向量的句子单词,并为其添加表示形式model_1。从这篇文章中我知道,您不能继续训练C向量。那么有没有办法为model_2没有向量的单词训练新模型并model_2与之合并model_1呢?
或者,是否有一种方法可以在我实际尝试检索该模型之前测试该模型是否包含单词,以便至少可以避免KeyError?