python - Gensim 用大数字标记文档
问题描述
我想用映射到数据库中 id 属性的标签来标记我的文档。例如,ID 也可以是这样的:
文件[0] 例如
TaggedDocument(words=['blabla', 'request'], tags=[225616076])
由于某种原因,它无法构建词汇表。虽然我只有 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 开始,然后将其映射到更高的数字(无用的计算时间)。我还尝试将其标记为字符串(因此文档 [0] 是 TaggedDocument(words=['blabla', 'request'], tags=['225616076'])),但它也不起作用。
我正在检查 gensim 的代码,但无法自行解决。
解决方案
如果您使用纯 pythonint
值作为 doc-tags,那么代码假定您希望这些也是底层向量数组的原始 int 索引——并且将分配一个足够大以容纳最大索引的向量数组——甚至如果许多较低的数字未使用。
这是一种优化,允许代码避免构建通常的标签到索引映射,对于那些已经整齐识别文本的人,从 0 开始编号。
如果您的 ID 从 0 开始不连续,并且不容易以这种方式工作,您可以使用字符串标签,代码将识别这些标签需要映射到唯一的索引位置 - 并且只有一个向量数组将分配正确的大小。
例如,您documents[0]
将是:
TaggedDocument(words=['blabla', 'request'], tags=[str(225616076)])
推荐阅读
- javascript - 每当表格行插入到 html 表格中时,都会收到声音通知
- javascript - 更好的方法来包装特定的 div 词?
- linq - 如何在 linq .net core 3.1 中加入两个表
- r - 在 for 循环中添加 geom_*
- asp.net-mvc - 无论如何要重定向所有现有的 ASP.NET MVC 控制器?
- apache-nifi - Nifi正则表达式评估
- python - 如何使用直方图中的字典重命名现有的 xticklabels
- c++ - 在 QT 应用程序中打一个透明的洞
- flask - 如何在支持的 SQL alchemy 中存储参数,这些参数传递给烧瓶应用程序中的 celery 任务
- paraview - Paraview将配色方案重新缩放为Python范围内的可见数据