我正在尝试使用 gensim 库在 5000 万个可变长度的句子上训练 doc2vec 模型。
一些教程(例如https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynbmodel.build_vocab )在实际训练过程之前有一个步骤。该部分已经运行了 3 个小时,没有任何更新。
这一步对于训练过程是必要的吗?既然这只是数据的线性传递,为什么这一步会花费这么长时间?
将 gensim 版本 3.4.0 与 python 3.6.0 结合使用
使用 TensorFlow 的嵌入投影仪可视化 Word2Vec 模型的最佳方法是什么?有没有办法将 Word2Vec 模型的向量导出为 Embedding Projector 期望的格式?或者张量流中有一个内置函数吗?
谢谢!
我有两个列表,A是单词列表,例如[“hello”,“world”,……],Len(A)是10000。列表B包含与A对应的所有预训练向量,这是一个[10000,512],512是向量维度。我想将两个列表转换为gensim word2vec模型格式,以便稍后加载模型,例如model = Word2Vec.load("word2vec.model")我应该怎么做?
我想比较不同句子中提到的相同单词的差异,例如“旅行”。我想做的是:
我知道 word2vec 需要的不仅仅是几个句子来训练可靠的向量。官方页面推荐的数据集包含数十亿个单词,但我的数据集中没有这样的数字(我有数千个单词)。
我试图用以下几句话来测试模型:
Sentences
Hawaii makes a move to boost domestic travel and support local tourism
Honolulu makes a move to boost travel and support local tourism
Hawaii wants tourists to return so much it's offering to pay for half of their travel expenses
Run Code Online (Sandbox Code Playgroud)
我构建向量的方法是:
from gensim.models import Word2Vec
vocab = df['Sentences']))
model = Word2Vec(sentences=vocab, size=100, window=10, min_count=3, workers=4, sg=0)
df['Sentences'].apply(model.vectorize)
Run Code Online (Sandbox Code Playgroud)
然而,我不知道如何可视化结果以查看它们的相似性并获得一些有用的见解。欢迎任何帮助和建议。
更新:我将使用主成分分析算法来可视化 3 维空间中的嵌入。我知道如何处理每个单词,但我不知道如何处理句子。
我想打印 spacy 语言模型“en”中每个词向量的维数。我安装了语言模型和 spacy。我有以下几行代码
import spacy
nlp =spacy.load('en')
dim = nlp.vocab.vectors_length
print(dim)
Run Code Online (Sandbox Code Playgroud)
它给出 0。
有人可以帮我弄这个吗?
我正在尝试将预先训练的手套作为 word2vec 模型加载到 gensim 中。我已经从这里下载了手套文件。我正在使用以下脚本:
from gensim import models
model = models.KeyedVectors.load_word2vec_format('glove.6B.300d.txt', binary=True)
Run Code Online (Sandbox Code Playgroud)
但出现以下错误
ValueError Traceback (most recent call last)
<ipython-input-38-e0b48b51f433> in <module>()
1 from gensim import models
----> 2 model = models.KeyedVectors.load_word2vec_format('glove.6B.300d.txt', binary=True)
2 frames
/usr/local/lib/python3.6/dist-packages/gensim/models/utils_any2vec.py in <genexpr>(.0)
171 with utils.smart_open(fname) as fin:
172 header = utils.to_unicode(fin.readline(), encoding=encoding)
--> 173 vocab_size, vector_size = (int(x) for x in header.split()) # throws for invalid file format
174 if limit:
175 vocab_size = min(vocab_size, limit)
ValueError: invalid literal for int() …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?
我训练了一个gensim.models.doc2vec.Doc2Vec模型
d2v_model = Doc2Vec(句子,大小= 100,window = 8,min_count = 5,workers = 4)我可以通过docvec = d2v_model.docvecs [0]获得文档向量
如何从训练有素的模型中获取单词向量?
我可以使用像这里的快速文字向量:https: //github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md 在tensorflow脚本中作为嵌入向量而不是word2vec或手套而不使用库fasttext
从广义上讲,word2vec的训练是一个过程,在这个过程中,通常在同一个上下文中的单词在向量空间中聚集在一起.我们首先随机改变平面上的单词然后随着每次迭代形成越来越多的集群.我想我理解了这一点,但是我们怎样才能确保反义词或很少出现在同一语境中的词语最终不会出现在附近的群集中?另外,我们怎么能知道更无关紧要的词语比不那么无关紧要的词语更远.
word2vec ×10
gensim ×7
nlp ×4
python ×3
tensorflow ×2
doc2vec ×1
embedding ×1
fasttext ×1
keyerror ×1
python-3.x ×1
spacy ×1
stanford-nlp ×1