- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从英语维基百科转储中提取了 145,185,965 个句子 (14GB),我想根据这些句子训练 Doc2Vec 模型。不幸的是,我“只有”32GB RAM,并且在尝试训练时出现MemoryError。即使我将 min_count 设置为 50,gensim 也会告诉我它需要超过 150GB 的 RAM。我认为进一步增加 min_count 不是一个好主意,因为生成的模型不会很好(只是猜测)。不过不管怎样,我会用500来尝试一下,看看内存是否足够。
是否有可能用有限的 RAM 来训练如此大的模型?
这是我当前的代码:
corpus = TaggedLineDocument(preprocessed_text_file)
model = Doc2Vec(vector_size=300,
window=15,
min_count=50, #1
workers=16,
dm=0,
alpha=0.75,
min_alpha=0.001,
sample=0.00001,
negative=5)
model.build_vocab(corpus)
model.train(corpus,
epochs=400,
total_examples=model.corpus_count,
start_alpha=0.025,
end_alpha=0.0001)
我可能犯了一些明显的错误吗?使用完全错误吗?
我也可以尝试减小向量大小,但我认为这会导致更糟糕的结果,因为大多数论文都使用 300D 向量。
最佳答案
可寻址内存中所需的模型大小很大程度上取决于所需权重的数量、唯一单词和唯一文档标签的数量。
拥有 145,000,000 个独特的文档标签,无论您限制自己使用多少个单词,仅训练中的原始文档向量就需要:
145,000,000 * 300 dimensions * 4 bytes/dimension = 174GB
您可以尝试较小的数据集。您可以减小矢量大小。你可以获得更多内存。
我会首先尝试其中的一个或多个,只是为了验证您是否能够让事情正常运行并获得一些初步结果。
有一个技巧,最好考虑为实验性的,它可能有助于训练更大的文档向量集,但代价是额外的复杂性和较低的性能:Doc2Vec 的
.docvecs_mapfile
参数
通常情况下,您不希望 Word2Vec
/Doc2Vec
式的训练 session 使用任何虚拟内存,因为任何对较慢磁盘 IO 的依赖都会使训练变得极其缓慢。然而,对于仅以一个顺序迭代的大型文档集,在使文档向量数组由内存映射文件支持后,性能损失可能是可以克服的。本质上,每次训练都会从头到尾扫描文件,读取每个部分一次并分页一次。
如果您提供 docvecs_mapfile
参数,Doc2Vec
将分配由该磁盘文件支持的 doc-vectors 数组。因此,您将在磁盘(最好是 SSD)上有一个数百 GB 的文件,其范围根据需要调入/调出 RAM。
如果您尝试此操作,请务必先在小规模运行中尝试此选项,以熟悉其操作,尤其是在保存/加载模型方面。
另请注意,如果您对文档向量执行默认的 most_similar()
,则必须从原始数组创建另一个 174GB 单位标准化向量数组。 (您可以通过在调用任何其他需要单位范数向量的方法之前显式调用 init_sims(replace=True)
调用来强制就地完成此操作,从而破坏现有的原始值。)
关于python - gensim-Doc2Vec : MemoryError when training on english Wikipedia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50390455/
我正在开发一个程序,可以将星球大战中的自然英语转换为尤达风格的英语。单个句子转换看起来不错,但当涉及多个句子时我遇到了问题。这是我的代码。 public class Yodify{ publi
是否有任何正则表达式模式可以改变这个字符串 This is a mix string of üößñ and English. üößñ üößñ are Unicode words. 为了这个? T
我打算发布一个社区网站,该网站的主要受众不是英语。这意味着指向/profile/forums 等的 URL 将是英文的,而不是他们的母语。我不关心用户是否在访问不同的英文 URL 路径时使用该网站,但
我正在处理包含英文和中文字符的字符串。我想挑出每个英语单词、非英语字符,例如法语、中文等,数字和特殊字符,例如“@#$%^&>?”以便进一步操作。 所以我累了 var nregex = /[^\u00
我在 Android-Chrome 上使用语音合成 API。问题是尽管有 4 种英语语音可用,但无论代码指定什么,浏览器始终使用美国英语。我可以使用其他语言,例如法语,而不是其他英语语音,例如 en-
我在英国,我有一个在英国购买的 Windows 7 版本,我可能找到的所有设置都设置为英国(而非美国)。当我运行以下代码时: Console.WriteLine(Thread.CurrentThrea
我在 MySQL 数据库表中有一个文本字段,其文本值混合了英文和非英文条目(假定以字母开头的字符串被视为英文)。 我想对值进行排序并在 HTML 下拉框中使用它。数据示例: Banana Apple
我有一个 html 如下 pomme English
我需要在 Android 设备中选择当前语言。当我使用以下代码时: Log.v("Language: ", Locale.getDefault().getDisplayLanguage()); Log
快速提问:我需要允许输入只接受从 a 到 z 和从 A 到 Z 的字母,但找不到任何表达式。我想使用 javascript test() 方法。 最佳答案 let res = /^[a-zA-Z]+$
我有一个字符串,其中可能使用了多种语言,例如: این متن فارسی است and this is !!! in English این خط بعدی است و this is going
我只是在使用这个最有用的链接:How do I check if a given string is a legal / valid file name under Windows? 在一些验证代码中
我喜欢加入一个数组,生成一个“英文列表”。例如 ['one', 'two', 'three'] 的结果应该是 'one, 2 and three'。 我写了这段代码来实现的(假设数组不为空,我的情况不
您好,请问有人可以将以下代码行翻译成英文吗? "foo".TrimEnd(New Char(0 - 1) {}) 我知道 TrimEnd 会做什么,但不知道 Char 位。 最佳答案 您发布的代码在
关闭。这个问题需要多问focused 。目前不接受答案。 已关闭10 年前。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 有人可以用简单的
我正在尝试从Common Crawl阅读“英语”网页。我正在Amazon界面中运行这些Hadoop作业。请看下面的代码,那是Mapper的一部分。我没有 reducer 。 #!/usr/bin/ph
我是 scala 的新手,这更像是一个好奇的问题。 假设我有一个类 class Container() { def add(item: Item) ... } 我可以这样调用它:contain
{ "Actor": { "knownlanguages": [ "English" ] } } 此 JSON 存储在 MySQL 的 JSON columntyp
我有一个遗留类,其中包含 toLowerCase( Locale.ENGLISH ) 当我在客户端使用这个类时,我得到 [ERROR] [onboardingtool] Line 37: The me
我发现我可以应用属性 direction: rtl 来强制从右到左对齐: https://www.w3.org/International/questions/qa-html-dir 它还提到 HTM
我是一名优秀的程序员,十分优秀!