Gensim用大数字标记文档

时间:2018-07-30 12:27:15

标签: python gensim topic-modeling doc2vec

我想用映射到数据库中id属性的标签来标记我的文档。 id也可以像这样:

文档[0]例如

TaggedDocument(words=['blabla', 'request'], tags=[225616076])

由于某种原因,它无法build_vocabulary。尽管我只有33382个具有较高值的​​唯一id /标签,但这并不重要,gensim写道我有“ 225616077标签”(在日志中)。

2018-07-30 12:07:59,271 : INFO : collecting all words and their counts
2018-07-30 12:07:59,273 : INFO : PROGRESS: at example #0, processed 0 words (0/s), 0 word types, 0 tags
2018-07-30 12:07:59,330 : INFO : PROGRESS: at example #1000, processed 7974 words (314086/s), 1975 word types, 225616077 tags
2018-07-30 12:07:59,343 : INFO : PROGRESS: at example #2000, processed 15882 words (701054/s), 2794 word types, 225616077 tags
...

...  
2018-07-30 12:14:56,454 : INFO : estimated required memory for 6765 words and 20 dimensions: 19793760900 bytes
2018-07-30 12:14:56,457 : INFO : resetting layer weights

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
in <module>()
----> 1 model.build_vocab(documents)

如何解决此问题?我不想从0开始,然后将其映射到更高的数字(无用的计算时间)。我也尝试过将它标记为字符串(因此,documents [0]是TaggedDocument(words = ['blabla','request'],tags = ['225616076'])),但它也不起作用。

我正在检查gensim的代码,但无法自行解决。

1 个答案:

答案 0 :(得分:1)

如果您将普通的python int值用作doc-tag,则代码假定您希望这些值也成为基础向量数组的原始int索引–并且足够大以容纳该向量数组即使没有使用很多较低的数字,也将分配最大的索引。

这是一种优化,它允许代码避免为那些清楚地标识了从0到数字编号的文本的人建立通常的标记到索引的映射。

如果您的ID从0开始不是连续的,并且无法轻松地以这种方式工作,则可以使用字符串标签,该代码将识别出需要映射到唯一索引位置的字符串标签-只是一个向量-array将分配正确大小的数组。

例如,您的documents[0]将是:

TaggedDocument(words=['blabla', 'request'], tags=[str(225616076)])