正在将维基百科 XML 文件加载到 Gensim 中
Loading Wikipedia XML files into Gensim
我是 NLP 的新手,想加载匈牙利维基百科语料库 (807 MB) 的压缩 XLM 文件。我下载了转储文件并开始使用 Gensim 在 Python 中解析它,但 4 小时后我的笔记本电脑崩溃了,抱怨我 运行 内存不足。我有一台相当旧的笔记本电脑(4GB RAM),想知道是否有任何方法可以通过
解决这个问题
- (1) 要么修改我的代码,例如,通过取 1/10 的随机样本来减少语料库;
- (2) 或使用一些云平台来增强我的 CPU 能力。我在 this SO post 中读到 AWS 可用于此类目的,但我不确定我应该使用哪种服务 select(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)
任何指导将不胜感激。
压缩后的 807MB 可能会扩展到未压缩的 4GB 以上,因此您不会幸运地将整个数据加载到计算机的内存中。
但是,许多 NLP 任务不需要内存中的完整数据集:它们可以根据需要从磁盘重复流式传输数据。
例如,无论您的最终目标是什么,您通常都可以逐篇迭代 hun_wiki.get_texts()
序列。 不要 尝试使用 list()
操作将其加载到单个内存列表中。
(如果你真的只想加载一个子集作为列表,你可以只从那个迭代器中获取第一个 n,或者通过其中一个想法获取一个随机子集在像 this one.)
这样的回答
或者,你可以租一台内存更大的云机。您选择的具有更多内存的几乎所有内容都适用于基于 运行 Python 的文本处理代码,因此只需按照每个服务各自的教程学习如何设置和登录到新的租用实例。
(4GB 对于现代严肃的工作来说是相当小的,但如果你只是 tinkering/learning,你可以使用较小的数据集并且在不需要时不将所有内容加载到内存中是有效的。)
我是 NLP 的新手,想加载匈牙利维基百科语料库 (807 MB) 的压缩 XLM 文件。我下载了转储文件并开始使用 Gensim 在 Python 中解析它,但 4 小时后我的笔记本电脑崩溃了,抱怨我 运行 内存不足。我有一台相当旧的笔记本电脑(4GB RAM),想知道是否有任何方法可以通过
解决这个问题- (1) 要么修改我的代码,例如,通过取 1/10 的随机样本来减少语料库;
- (2) 或使用一些云平台来增强我的 CPU 能力。我在 this SO post 中读到 AWS 可用于此类目的,但我不确定我应该使用哪种服务 select(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)
任何指导将不胜感激。
压缩后的 807MB 可能会扩展到未压缩的 4GB 以上,因此您不会幸运地将整个数据加载到计算机的内存中。
但是,许多 NLP 任务不需要内存中的完整数据集:它们可以根据需要从磁盘重复流式传输数据。
例如,无论您的最终目标是什么,您通常都可以逐篇迭代 hun_wiki.get_texts()
序列。 不要 尝试使用 list()
操作将其加载到单个内存列表中。
(如果你真的只想加载一个子集作为列表,你可以只从那个迭代器中获取第一个 n,或者通过其中一个想法获取一个随机子集在像 this one.)
这样的回答或者,你可以租一台内存更大的云机。您选择的具有更多内存的几乎所有内容都适用于基于 运行 Python 的文本处理代码,因此只需按照每个服务各自的教程学习如何设置和登录到新的租用实例。
(4GB 对于现代严肃的工作来说是相当小的,但如果你只是 tinkering/learning,你可以使用较小的数据集并且在不需要时不将所有内容加载到内存中是有效的。)