gensim - Doc2Vec:在英语维基百科上训练时出现 MemoryError

2023-12-01

我从英语维基百科转储中提取了 145,185,965 个句子 (14GB),我想根据这些句子训练 Doc2Vec 模型。不幸的是我“只有”32GB RAM 并且得到了内存错误当尝试训练时。即使我将 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

您可以尝试较小的数据集。您可以减小矢量大小。你可以获得更多内存。

我会首先尝试其中的一个或多个,只是为了验证您是否能够使事情正常运行并获得一些初步结果。

有一个技巧,最好考虑为实验性的,它可能有助于训练更大的文档向量集,但代价是额外的复杂性和较低的性能:docvecs_mapfile的参数Doc2Vec.

通常,您不想要Word2Vec/Doc2Vec使用任何虚拟内存的风格训练会话,因为任何对较慢磁盘 IO 的依赖都会使训练变得极其缓慢。然而,对于仅以一个顺序迭代的大型文档集,在使文档向量数组由内存映射文件支持后,性能损失可能是可以克服的。本质上,每次训练都会从头到尾扫描文件,读取每个部分一次并分页一次。

如果您提供一个docvecs_mapfile争论,Doc2Vec将分配由该磁盘文件支持的 doc-vectors 数组。因此,您将在磁盘(最好是 SSD)上有一个数百 GB 的文件,其范围根据需要调入/调出 RAM。

如果您尝试此操作,请务必先在小规模运行中尝试此选项,以熟悉其操作,尤其是在保存/加载模型方面。

另请注意,如果您随后执行了默认操作most_similar()在 doc-vectors 上,必须从原始数组创建另一个 174GB 单位标准化向量数组。 (您可以强制就地完成,通过显式调用来破坏现有的原始值init_sims(replace=True)在调用任何其他需要单位范数向量的方法之前调用。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gensim - Doc2Vec:在英语维基百科上训练时出现 MemoryError 的相关文章

  • ssh 远程计算机并使用 pexpect 运行“ls-l”

    我想要ssh远程机器并运行ls l using pexpect 我是一名学习Python语言的系统工程师 没有编码知识 有人可以帮助我吗 提前致谢 My code import pexpect child pexpect spawn usr
  • 使用 Mac M1 在 Docker 容器内的 pip 安装中找不到 Tensorflow

    我正在尝试使用新的 Mac M1 运行一些项目 这些项目已经在英特尔处理器上运行 并被使用英特尔的其他开发人员使用 我无法构建这个简单的 Dockerfile FROM python 3 9 RUN python m pip install
  • Heroku 上的 Django 应用程序在一段时间后删除对象

    我编写了一个简单的 Django 问答论坛应用程序并将其部署在 Heroku 上 该网站的本地版本运行良好 但是 生产版本不会将问题 答案等存储超过几个小时 我决定坚持使用 Django 附带的 sqlite3 我预计该网站不会有太多流量
  • SparkSession 初始化需要很长时间

    SparkSession 初始化需要很长时间才能成功 这是我的代码 import findspark findspark init import pyspark from pyspark sql import SparkSession sp
  • SQLAlchemy 在 MySQL 上使用什么列类型作为“文本”?

    我的总体用例是试图确定我是否可以编写一个与数据库无关的 至少支持 Postgres 和 MySQL 存储一些大数据作为原始文本 认为 500MB 作为粗略的理论上限 基于这个答案 https stackoverflow com a 2557
  • Python矩阵问题[重复]

    这个问题在这里已经有答案了 这是从这个线程继续的 Python矩阵 有什么解决方案吗 https stackoverflow com questions 5835583 python matrix any solution Input fr
  • Python int和float在64位系统中的内存消耗

    我正在 Python 3 4 的 64 位系统中尝试以下代码 以了解不同原始数据类型的内存消耗 import sys print sys getsizeof 45 prints 28 print sys getsizeof 45 2 pri
  • 当类的任何属性被修改时,类如何运行某些函数?

    是否有一些通用方法可以让类在以下情况下运行函数 any它的属性被修改了吗 我想知道是否可以运行某些子进程来监视类的更改 但也许有一种方法可以继承class并修改一些on change函数是 Python 类的一部分 有点像默认的 repr
  • 为什么 Numpy 创建零数组比用零替换现有数组的值要快得多?

    我有一个用于跟踪各种值的数组 数组是2500x1700尺寸上 所以不是很大 在会话结束时 我需要将该数组中的所有值重置为零 我尝试创建一个新的零数组并将数组中的所有值替换为零 并且创建一个全新的数组要快得多 代码示例 for in sess
  • 如何在 Django Admin 中禁用事务?

    I used transaction non atomic requests for 被超越的save in Person model如下所示 store models py from django db import models fro
  • 在 Windows 上安装 PyGIMP

    在网上 我可以找到有关使用 python 编写 gimp 脚本的各种示例 http www jamesh id au software pygimp http www jamesh id au software pygimp http ww
  • Keras 中的条件批量归一化

    我正在尝试在 Keras 中实现条件批量标准化 我假设我必须创建一个自定义层 因此 我从正常化 https github com keras team keras blob master keras layers normalization
  • 使用存储的密钥作为环境变量

    我有一个秘密密钥存储在 GCP 的秘密管理器中 我们的想法是使用该密钥通过云功能获取预算列表 现在 我可以从代码中访问该密钥 但我面临的问题是我需要使用该密钥设置一个环境变量 这是我添加密钥的方式 如果您的本地目录中有该文件 但是还有其他方
  • 在类方法 Python 中调用多处理

    最初 我有一个类来存储一些处理后的值 并通过其他方法重用这些值 问题是当我尝试将类方法划分为多个进程以加速时 python 生成了进程 但它似乎不起作用 正如我在任务管理器中看到的那样 只有 1 个进程在运行 并且结果从未传递 我做了几次搜
  • 如何使用 BeautifulSoup 只抓取可见的网页文本?

    基本上 我想用BeautifulSoup严格抓住可见文字在网页上 例如 这个网页 http www nytimes com 2009 12 21 us 21storm html是我的测试用例 我主要想获取正文 文章 甚至可能到处都有一些选项
  • 连接 Flask Socket.IO Server 和 Flutter

    基本上 我有一个套接字 io 烧瓶代码 import cv2 import numpy as np from flask import Flask render template from flask socketio import Soc
  • 为什么我只能在异步函数中使用await关键字?

    假设我有这样的代码 async def fetch text gt str return text async def show something something await fetch text print something 这很
  • 无法使用 Python 3 编写的 gzip.open() 将压缩文件上传到云存储

    当我尝试在 Cloud Shell 实例上使用 python 脚本将压缩的 gzip 文件上传到云存储时 它总是上传一个空文件 这是重现错误的代码 import gzip from google cloud import storage s
  • WTforms 表单未提交但不输出验证错误

    我正在尝试使用以下方式上传文件flask uploads工作和遇到一些障碍 我会告诉你我的flask查看函数 html 希望有人能指出我缺少的内容 基本上发生的情况是我提交了表格但失败了if request method POST and
  • 使用自定义层运行 Keras 模型时出现问题

    我目前正在攻读学士学位论文FIIT STU https www fiit stuba sk en html page id 749 其主要目标是尝试复制和验证以下结果study http arxiv org abs 2006 00885 这

随机推荐

  • 无法打开数据库-Android

    我正在使用 SQL 开发一个简单的 Android 应用程序 我遵循以下指南 http www reigndesign com blog using your own sqlite database in android applicati
  • 使用 AVCaptureSession 和 AVAssetWriter 翻转相机时无缝录音

    我正在寻找一种在前后摄像头之间切换时保持无缝音轨的方法 市场上的许多应用程序都可以做到这一点 一个例子是 SnapChat 解决方案应使用 AVCaptureSession 和 AVAssetWriter 此外 它不应该明确使用 AVMut
  • .Theninclude 用于 Entity Framework Core 2 中的子实体

    以前 使用 net 4 5 2 和 EF 6 时 我有一个通用的Get接受多个的方法包括如下 public abstract class DataContext IdentityDbContext
  • 获取特定时间范围内所有发生变化的文件

    Bash 中的一个非常基本的问题 但我似乎无法弄清楚 我正在寻找一个带有管道的单行命令 在 bash 中查找当前目录中上次在 13 15 到 13 30 之间更改的所有 py 文件 与日期无关 我想我可以用ls and cut但我不确定这是
  • Android - 从另一台设备访问 Google Drive appdata 文件夹,但应用程序相同

    我的应用程序设置为允许将备份保存到 Google Drive 应用程序数据文件夹 这一切在同一台设备上运行得非常好 当我进行备份时 删除应用程序的数据 然后恢复一切正常 但是 当我尝试在一台设备上备份 然后在另一台设备上安装并尝试恢复时 没
  • python opencv-寻找圆(太阳),图片中圆心的坐标

    我是新来的 也是编程方面的新手 我有一个问题 我有 16 位 bmp 文件中的太阳图片 图片看起来是黑色背景的白色圆圈 我想找到一个圆并在 x y 坐标中确定其中心 我有这个脚本 import cv import numpy as np o
  • 执行 a.out 文件时出现问题 (C++) MacOS Sierra 10.12.1

    我刚刚更新到 Sierra 似乎我的编译器由于某种原因崩溃了 我编写的代码在更新之前工作正常 所以我确信这不是问题 但现在当我尝试执行它时它就无法工作 这是输出 g source cpp a out dyld mach o but buil
  • 什么是套接字?这是一个过程吗?

    我正在研究操作系统概念 我发现套接字作为通信的端点 那么套接字到底是什么 它是系统通信的一个过程吗 提前致谢 通过阅读维基百科文章 我可以明白为什么您可能会感到困惑 套接字是一个虚拟设备 也就是说 它是一种用软件编写的设备 没有物理设备 因
  • 如何在 Struts 2 中使用 jQuery Ajax 检查唯一用户?

    我有任何应用程序email id是唯一的 并且当最终用户输入他的email id我已经通过 Ajax 触发了 SQL 查询 它检查这是否email id存在或不存在 直到这里它都工作正常但现在我如果那样怎么办email id存在 然后我想将
  • Android上Service和Activity的通信

    Android 上 Activity 和 Service 之间的通信方式有哪些 今天我学习了如何通过从 Activity 发送 Intent 并使用 BroadcastReceiver 进行回复来进行通信 我还有哪些选择 有人有这方面的教程
  • 在内存中而不是物理文件中创建 PDF

    如何使用 itextsharp 在内存流而不是物理文件中创建 PDF 下面的代码正在创建实际的 pdf 文件 相反 我如何创建一个 byte 并将其存储在 byte 中 以便我可以通过函数返回它 using iTextSharp text
  • 在多线程应用程序中使用 GeckoFX

    我在使用 GeckoFX 时遇到了如何准确处理线程的问题 当尝试在其他线程中使用 GeckoWebBrowser 时 它似乎不断抛出错误 具体来说 我在此测试应用程序中尝试执行的操作是生成网页的缩略图并将其显示在表单上 而不是 WebBro
  • Delphi - 使用表单在应用程序内安装、启动、停止服务[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有 Delphi 应用程序 我添加了service对此 我如何安装并启动和停止它主表格
  • PreferenceActivity 中的自定义标题栏?

    我在所有活动中使用自定义标题栏 但我可以在 PreferenceActivity 中使用它 我在 PreferenceActivity 中能做的就是 Override protected void onCreate Bundle saved
  • Java中的重叠继承

    我有一个重叠的继承层次结构 系统了解可以是客户 提供商和代理的人员 一个人必须属于这些类别之一 但可以属于两个或三个 即一个人可以同时是客户和提供者 在数据库中 我认为问题已经解决 每个类一个表 人员 客户端 提供者和代理表 以及从子类表的
  • 从 Font Awesome 中提取 SVG

    我想从中获取 SVG 路径数据字体真棒字形 以便我可以在 HTML 中直接将它们用作 SVG 我认为这就像复制粘贴路径数据一样简单fontawesome webfont svg 但是当我在 HTML 中使用它时 符号全部呈现颠倒 有人知道为
  • LINQ to Entities - 如何在调用 SaveChanges() 后最好地获取 IDENTITY 值

    该网站上提出了许多与执行插入后检索 IDENTITY 相关的问题 我们获取身份的方法是在调用 SaveChanges 之后立即进行以下调用 context MyClass OrderByDescending c gt c Id FirstO
  • Angular7输入类型文件上传不起作用

    目前我正在工作 Angular Angular 7 输入类型 文件 不工作 Angular6 工作正常 Angular 6提交输入文件类型数据 我会得到这样的字段列表 但 Angular 7 只能得到这样的图像路径 只有我将 Angular
  • 使用 odeint 函数定义

    很菜鸟的问题 所以请耐心听我说 我按照这里给出的例子 gt http www codeproject com Articles 268589 odeint v2 Solving ordinary Differential equations
  • gensim - Doc2Vec:在英语维基百科上训练时出现 MemoryError

    我从英语维基百科转储中提取了 145 185 965 个句子 14GB 我想根据这些句子训练 Doc2Vec 模型 不幸的是我 只有 32GB RAM 并且得到了内存错误当尝试训练时 即使我将 min count 设置为 50 gensim