我正在定义一个函数,它接受一个单词列表并返回有关列表中彼此之间具有非零余弦相似度(以及相似度值)的单词的信息。
谁能帮我解决这个问题。我在想,如果我能得到一个预先计算好的 word2vec 矢量文件,那会很有帮助,但互联网上没有。
我正在使用不同的数据训练我自己的 word2vec 模型。要将生成的模型实现到我的分类器中并将结果与原始的预训练 Word2vec 模型进行比较,我需要将模型保存在二进制扩展名 .bin 中。这是我的代码,句子是短消息列表。
import gensim, logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = gensim.models.word2vec.LineSentence('dati.txt')
model = gensim.models.Word2Vec(
sentences, size=300, window=5, min_count=5, workers=5,
sg=1, hs=1, negative=0
)
model.save_word2vec_format('model.bin', binary=True)
Run Code Online (Sandbox Code Playgroud)
最后一个方法 save_word2vec_format 给了我这个错误:
AttributeError: 'Word2Vec' object has no attribute 'save_word2vec_format'
我在这里缺少什么?我已经阅读了 gensim 和其他论坛的文档。github 上的这个repo使用几乎相同的配置,所以我不明白出了什么问题。我试图从skipgram切换到cbow,从分层softmax切换到没有结果的负采样。
先感谢您!
我已经获得了一个字典,将单词映射到它们在 python 中的向量,并且我试图散点图 n 个最相似的单词,因为 TSNE 在大量单词上花费了很长时间。最好的选择是将字典转换为 w2v 对象来处理它。
我正在使用TensorFlow教程来学习Word2Vec。我为Word2Vec运行的代码也来自TensorFlow教程:https : //github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec_optimized.py。当我将代码运行15个纪元时,测试准确性约为30%。当我跑100个纪元时,测试准确性高达39%。我正在使用Text8数据集进行训练,并使用questions-words.txt进行评估。
我需要跑更多的时间吗?我应该使用其他数据集吗?如何提高测试准确性?
我有一组预先训练好的 word2vec 词向量和一个语料库。我想用词向量来表示语料库中的词。语料库中有一些我没有训练过的词向量。处理那些没有预训练向量的单词的最佳方法是什么?
我听到了几个建议。
对每个缺失的单词使用一个零向量
为每个丢失的单词使用一个随机数向量(有很多关于如何绑定这些随机数的建议)
我有一个想法:取一个向量,其值是所有预训练向量中该位置所有值的平均值
任何有此问题经验的人都对如何处理这个问题有想法吗?
我在gensim中有一个大型的经过预训练的Word2Vec模型,我想从中使用预训练的词向量作为Keras模型中的嵌入层。
问题在于嵌入量很大,而且我不需要大多数单词向量(因为我知道哪些单词可以作为输入出现)。因此,我想摆脱它们以减小嵌入层的大小。
有没有一种方法可以根据单词白名单来保留所需的单词矢量(包括对应的索引!)?
我只想知道 alpha 的值在 gensimword2vec和fasttextword-embedding 模型中的作用?我知道 alpha 是initial learning rate,它的默认值是0.075表单 Radim 博客。
如果我将其更改为更高的值,即 0.5 或 0.75 会怎样?它的作用会是什么?是否允许更改相同?但是,我已将其更改为 0.5 并在 D = 200、window = 15、min_count = 5、iter = 10、workers = 4 的大型数据上进行实验,结果对于 word2vec 模型非常有意义。然而,使用 fasttext 模型,结果有点分散,意味着相关性较低和不可预测的高低相似性分数。
为什么对于具有不同精度的两种流行模型,相同数据的结果不精确?的值alpha在模型构建过程中是否起着如此重要的作用?
任何建议表示赞赏。
我对 Gensim 很陌生,我正在尝试使用 word2vec 模型训练我的第一个模型。我看到所有参数都非常简单易懂,但是我不知道如何跟踪模型的损失以查看进度。此外,我希望能够在每个 epoch 之后获得嵌入,以便我还可以证明预测在每个 epoch 之后也变得更加合乎逻辑。我怎样才能做到这一点?
或者,每次训练iter=1并在每个 epoch 之后保存损失和嵌入是否更好?听起来效率不高。
代码不多,但仍将其发布在下面:
model = Word2Vec(sentences = trainset,
iter = 5, # epoch
min_count = 10,
size = 150,
workers = 4,
sg = 1,
hs = 1,
negative = 0,
window = 9999)
Run Code Online (Sandbox Code Playgroud) 我有一个大约 1000 万个句子的列表,每个句子最多包含 70 个单词。
我在每个单词上运行 gensim word2vec,然后取每个句子的简单平均值。问题是我使用了 min_count=1000,所以很多词都没有出现在词汇表中。
为了解决这个问题,我将 vocab 数组(包含大约 10000 个单词)与每个句子相交,如果该交集中至少剩下一个元素,则返回其简单平均值,否则返回一个零向量。
问题是,当我在整个数据集上运行它时,计算每个平均值需要很长时间,即使拆分成多个线程,我想得到一个可以运行得更快的更好的解决方案。
我在 EC2 r4.4xlarge 实例上运行它。
我已经尝试切换到 doc2vec,它更快,但结果不如 word2vec 的简单平均值。
word2vec_aug_32x = Word2Vec(sentences=sentences,
min_count=1000,
size=32,
window=2,
workers=16,
sg=0)
vocab_arr = np.array(list(word2vec_aug_32x.wv.vocab.keys()))
def get_embedded_average(sentence):
sentence = np.intersect1d(sentence, vocab_arr)
if sentence.shape[0] > 0:
return np.mean(word2vec_aug_32x[sentence], axis=0).tolist()
else:
return np.zeros(32).tolist()
pool = multiprocessing.Pool(processes=16)
w2v_averages = np.asarray(pool.map(get_embedded_average, np.asarray(sentences)))
pool.close()
Run Code Online (Sandbox Code Playgroud)
如果您对具有相同句子嵌入目的并可以解决我的问题的不同算法或技术有任何建议,我很乐意阅读它。
使用 gensim word2vec 模型时,如何打印以记录(文件或粗壮)训练阶段每个时期的损失。
我试过 :
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
logging.root.setLevel(level=logging.INFO)
Run Code Online (Sandbox Code Playgroud)
但我没有看到任何损失打印。
word2vec ×10
gensim ×6
python ×6
nlp ×2
attributes ×1
fasttext ×1
keras ×1
numpy ×1
optimization ×1
python-3.x ×1
scikit-learn ×1
tensorflow ×1