- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 100 万个摘要数据集(20 亿个单词)上使用 word2vec。为了找到最相似的文档,我使用了 gensim.similarities.WmdSimilarity
类。当尝试使用 wmd_similarity_index[query]
检索最佳匹配时,计算将大部分时间花在构建字典上。这是一段日志:
2017-08-25 09:45:39,441 : INFO : built Dictionary(127 unique tokens: ['empirical', 'model', 'estimating', 'vertical', 'concentration']...) from 2 documents (total 175 corpus positions)
2017-08-25 09:45:39,445 : INFO : adding document #0 to Dictionary(0 unique tokens: [])
这部分是什么?它取决于查询吗?有没有办法一次性完成这些计算?
编辑我代码中的训练和评分阶段:
训练并保存到磁盘:
w2v_size = 300
word2vec = gensim.models.Word2Vec(texts, size=w2v_size, window=9, min_count=5, workers=1, sg=1, hs=1, iter=20) # sg=1 means skip gram is used
word2vec.save(utils.paths.PATH_DATA_GENSIM_WORD2VEC)
corpus_w2v_wmd_index = gensim.similarities.WmdSimilarity(texts, word2vec.wv)
corpus_w2v_wmd_index.save(utils.paths.PATH_DATA_GENSIM_CORPUS_WORD2VEC_WMD_INDEX)
加载和评分:
w2v = gensim.models.Word2Vec.load(utils.paths.PATH_DATA_GENSIM_WORD2VEC)
words = [t for t in proc_text if t in w2v.wv]
corpus_w2v_wmd_index = gensim.similarities.docsim.Similarity.load(utils.paths.PATH_DATA_GENSIM_CORPUS_WORD2VEC_WMD_INDEX)
scores_w2v = np.array(corpus_w2v_wmd_index[words])
最佳答案
“Word Mover's Distance”计算相对昂贵——对于每个成对文档比较,它会搜索语义位置的最佳“移动”,并且该移动本身取决于每个比较的所有单词之间的成对简单距离文档。
也就是说,它涉及的计算量远远超过两个高维向量之间的简单余弦距离,并且两个文档越长,涉及的计算量就越大。
在知道查询词之前,texts
语料库中没有多少可以预先计算的。 (每个成对计算都取决于查询的单词,以及它们与每个语料库文档单词的简单距离。)
也就是说,gensim WmdSimilarity
类还没有进行一些优化。
最初的 WMD 论文描述了一种更快的计算,可以帮助消除不可能出现在前 N 个与 WMD 最相似的结果中的语料库文本。理论上,gensim WmdSimilarity
也可以实现此优化,并提供更快的结果,至少在使用 num_best
参数初始化 WmdSimilarity
时是这样。 (如果没有它,每个查询都会返回所有 WMD 相似性分数,因此这种优化将无济于事。)
此外,目前 WmdSimilarity
类只是为每个查询到语料库文档对调用 KeyedVectors.wmdistance(doc1, doc2)
,作为原始文本。因此,每次都会重新计算从所有 doc1
单词到 doc2
单词的成对简单距离,即使许多对在整个语料库中重复。 (也就是说,如果'apple'在查询中并且'orange'在每个语料库文档中,它仍然会重复计算'apple'到'orange'的距离。)
因此,对临时值进行一些缓存可能有助于提高性能。例如,对于 1000 个单词的查询,以及所有语料库文档中 100,000 个单词的词汇,((1000 * 100,000)/2)
5000 万个成对单词距离可以预先计算一次,使用200MB,然后由所有后续的 WMD 计算共享。要添加此优化,需要对 WmdSimilarity.get_similarities()
和 KeyedVectors.wmdistance()
进行协作重构。
最后,Word2Vec/Doc2Vec 应用程序不一定需要停用词删除或词干提取或从中受益。但由于 WMD 计算的开销随着文档和词汇量的增加而增加,任何缩小有效文档大小的方法都有助于提高性能。因此,在大型文档集上使用 WMD 时,丢弃低值(value)词或合并相似词的各种方法可能值得考虑。
关于python - Gensim word2vec WMD 相似度字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45876711/
比方说, word2vec.model 是我训练好的 word2vec 模型。当出现词汇外单词( oov_word )时,我计算向量 vec 使用 compute_vec(oov_word) 方法。现
我有一个现有的 gensim Doc2Vec 模型,我正在尝试对训练集以及模型进行迭代更新。 我拿新文件,照常进行预处理: stoplist = nltk.corpus.stopwords.words
使用 gensim.models.LdaMallet 有什么区别和 gensim.models.LdaModel ?我注意到参数并不完全相同,想知道什么时候应该使用一个而不是另一个? 最佳答案 TL;
我训练了一个 gensim.models.doc2vec.Doc2Vec 模型 d2v_model = Doc2Vec(sentences, size=100, window=8, min_count
我在 gensim 中有一个 word2vec 模型,训练了 98892 个文档。对于句子数组中不存在的任何给定句子(即我训练模型的集合),我需要用该句子更新模型,以便下次查询时给出一些结果。我这样做
我对 Gensim 很陌生,我正在尝试使用 word2vec 模型训练我的第一个模型。我看到所有参数都非常简单易懂,但是我不知道如何跟踪模型的损失以查看进度。此外,我希望能够在每个 epoch 之后获
请帮助我理解如何 TaggedDocument 之间的区别和 LabeledSentence的 gensim作品。我的最终目标是使用 Doc2Vec 进行文本分类模型和任何分类器。我正在关注这个 bl
尝试使用以下代码行在 gensim 中加载文件: model = gensim.models.KeyedVectors.load_word2vec_format(r"C:/Users/dan/txt_
我有一组用神经网络训练的嵌入,与 gensim 的 word2vec 无关。 我想使用这些嵌入作为 gensim.Word2vec 中的初始权重。 现在我看到的是,我可以model.load(SOME
我尝试使用 gensim 导入 import gensim 但出现以下错误 ImportError Traceback (most rece
我正在关注 https://radimrehurek.com/gensim/wiki.html#latent-dirichlet-allocation 上的“英语维基百科”gensim 教程 它解释了
我正在使用 24 核虚拟 CPU 和 100G 内存来训练 Doc2Vec 与 Gensim,但无论修改核数,CPU 的使用率始终在 200% 左右。 top htop 上面两张图显示了cpu使用率,
在将文本文档列表转换为语料库字典,然后使用以下方法将其转换为词袋模型之后: dictionary = gensim.corpora.Dictionary(docs) # docs is a list
我已经使用 Gensim 3.8.0 训练了一个 Word2Vec 模型。后来我尝试在 GCP 上使用使用 Gensim 4.0.o 的预训练模型。我使用了以下代码: model = KeyedVec
我正在构建一个多标签文本分类程序,我正在尝试使用 OneVsRestClassifier+XGBClassifier 对文本进行分类。最初,我使用 Sklearn 的 Tf-Idf 矢量化来矢量化文本
我发现关于 word2vec.similarity() 的警告如下: >d:\python\lib\site-packages\gensim\matutils.py:737: FutureWarnin
我正在尝试使用版本为 3.6 的 Python 的 Gensim 库运行程序。 每当我运行该程序时,我都会遇到这些语句: C:\Python36\lib\site-packages\gensim-2.
我有一个通过 Java 中的 Mallet 训练的 LDA 模型。 Mallet LDA 模型生成了三个文件,这使我能够从文件运行模型并推断新文本的主题分布。 现在我想实现一个 Python 工具,它
我正在使用gensim doc2vec。我想知道是否有任何有效的方法来了解doc2vec的词汇量。一种粗略的方法是计算单词总数,但是如果数据量很大(1GB或更多),那么这将不是一种有效的方法。 最佳答
documentation有点不清楚如何将 fasttext 模型保存到磁盘 - 如何在参数中指定路径,我尝试这样做,但失败并出现错误 文档中的示例 >>> from gensim.test.util
我是一名优秀的程序员,十分优秀!