【问题标题】:Loading Wikipedia XML files into Gensim将 Wikipedia XML 文件加载到 Gensim
【发布时间】:2019-12-15 21:27:14
【问题描述】:

我是 NLP 的新手,我想加载匈牙利语维基百科语料库 (807 MB) 的压缩 XLM 文件。我下载了转储文件并开始使用 Gensim 在 Python 中解析它,但 4 小时后我的笔记本电脑崩溃了,抱怨我的 RAM 用完了。我有一台相当旧的笔记本电脑(4GB RAM),想知道是否有什么办法可以解决这个问题

  • (1) 修改我的代码,例如,通过抽取 1/10 的随机样本来减少语料库;
  • (2) 或者使用一些云平台来增强我的 CPU 能力。我在this SO post 中读到 AWS 可用于此类用途,但我不确定应该选择哪种服务(Amazon EC2?)。我还检查了 Google Colab,但对它在 Tensorflow 的上下文中列出了硬件加速选项(GPU 和 CPU)感到困惑,我不确定这是否适合 NLP。我没有找到任何关于那个的帖子。

这是我在从here 下载维基百科转储后尝试的 Jupyter Notebook 代码:

! pip install gensim 
from nltk.stem import SnowballStemmer
from gensim.corpora import WikiCorpus
from gensim.models.word2vec import Word2Vec

hun_stem = SnowballStemmer(language='hungarian')

%%time
hun_wiki = WikiCorpus(r'huwiki-latest-pages-articles.xml.bz2')
hun_articles = list(hun_wiki.get_texts())
len(hun_articles)

任何指导将不胜感激。

【问题讨论】:

  • 您使用的是 Jupyter Notebook 吗?您是否尝试过在 XML 的子集上运行您的程序,以查看问题是大小问题还是程序设计问题?
  • 您能告诉我如何在 XML 的子集上运行代码吗?是的,我正在使用 Jupyter Notebook,我刚刚也将那条信息添加到我的帖子中。
  • 这取决于数据的结构,我不熟悉。我刚刚注意到您实际上在帖子中提到了这种可能性,作为解决方案 (1)。

标签: python nlp gensim


【解决方案1】:

807MB 压缩后可能会扩展到超过 4GB 未压缩,因此您不会有幸将整个数据加载到计算机的内存中。

但是,许多 NLP 任务并不需要内存中的完整数据集:它们可以根据需要从磁盘重复流式传输数据。

例如,无论您的最终目标是什么,您通常都可以逐条迭代hun_wiki.get_texts() 序列。 不要尝试使用list() 操作将其加载到单个内存列表中。

(如果您真的只想将子集加载为列表,则可以从该迭代器中获取第一个 n ,或者通过 @ 之类的答案中的一个想法获取随机子集987654321@.)

或者,您可以租用内存更大的云计算机。几乎您选择的任何具有更多内存的东西都适合运行基于 Python 的文本处理代码,因此只需按照每个服务各自的教程学习如何设置和登录新的租用实例。

(对于现代严肃的工作来说,4GB 相当小,但如果您只是在修补/学习,您可以使用较小的数据集,并且在不需要时不会将所有内容加载到内存中。)

【讨论】:

  • 你是对的,我可以使用get.text() 序列进行迭代。但是,我刚刚意识到WikiCorpus() 函数似乎也运行了很长时间,如果我想最大化我的语料库中的文章数量,我不太明白应该提升其中的哪一个。无论花费多少时间,我想我的主要问题是,如果我依赖您建议的解决方案,小 RAM 是否也会成为问题,或者我不必再担心这个问题了?
  • 4GB 将限制此类工作:您通常必须限制您的方法、数据集或模型大小,以更好地适应该可寻址空间。您将能够做更多、更快、更少分心、更多 RAM。但它仍然可以做很多事情,尤其是作为初学者学习基本技术,在 4GB 中。我建议的流式传输是否足以满足您想要做的事情取决于您接下来想要做什么——您还没有真正详细说明。
  • 例如,如果只是按照某种规则转换所有文本——就像词干提取一样——很容易在一个文件中进行流式传输,将输出流式传输到另一个文件。另一方面,如果构建Word2Vec 模型,模型的大小很大程度上取决于您要保留的单词数。使用更少的内存,您将不得不丢弃更多的低频词以保留在可用 RAM 中。但是对于词向量的大量使用,丢弃低频词并不会造成太大伤害。因此,在您进入特定目标/技术之前,没有明确的答案来说明它的局限性。
  • 这些函数的参数我要多理解一些,谢谢反馈!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
相关资源
最近更新 更多