为了账号安全,请及时绑定邮箱和手机立即绑定

如何将文本文件拆分为 word2vec/gensim 的句子

如何将文本文件拆分为 word2vec/gensim 的句子

饮歌长啸 2023-03-30 16:52:12
我已经将大约 40MB 的英文维基百科提取为纯文本。我会用它来构建带有 gensim 的 word2vec 模型。为此,我需要先将其分成句子。我怎样才能做到这一点?我试过:from __future__ import unicode_literals, print_functionimport spacyfrom spacy.lang.en import English nlp = spacy.load('en_core_web_sm')nlp.max_length = 47084146ftest = open("test_02", "r")raw_test = ftest.read().replace("\n", " ")sentences = [i for i in nlp(raw_test).sents] f = open("sentences.txt", "w")for sent in sentences:    f.write(str(sent)+"\n")f.write("\n")f.close()但这失败了:MemoryError: Unable to allocate 34.8 GiB for an array with shape (9112793, 8, 64, 2) and data type float32我不知道它为什么要使用这么多 RAM!我怎样才能做到这一点?
查看完整描述

2 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

test_02问题是,一次处理的内容,中间数据结构不适合内存。分块处理应该可以解决问题。例如,如果句子从不在行之间拆分,则渐进处理将如下所示:


with  open("test_02", "r") as ftest, open("sentences.txt", "w") as f:

    for line in ftest:

        for sent in nlp(line).sents:

            f.write(str(sent)+"\n")

由于句子可以跨越多行,您可能希望使用不同的拆分策略test_02,例如通过双换行符来拆分for line in ftest.read().split('\n\n'),但很可能即使这种天真的方法也能正常工作。


查看完整回答
反对 回复 2023-03-30
?
莫回无

TA贡献1865条经验 获得超7个赞

你的直接原因MemoryError是将很多不需要的东西加载到内存中。

首先,整个test_02文件作为一个巨大的字符串被放入可寻址内存中。(你必须有很多内存,因为这一步对很多人来说都会失败!)

用空格替换所有换行符——为什么,确切地说?– 可能会暂时加倍内存需求,因为.replace()返回一个副本。(不过,令人惊讶的是,你还没有耗尽记忆力。)

然后,要求 Spacy 解析大量文本——Spacy 的解析本身通常是一个复杂的步骤——触发了 Spacy 代码深处的错误。(但是,如果运气好或扩展系统内存没有触发错误,那么您的下一行可能会尝试创建所有 . 的堆内列表.sents。)

好消息是:您可能不需要执行任何这些操作。尽管 gensim 的参数名称为Word2Vecsentences,但它实际上并不需要合法的句子。它只需要文本,其中每个文本都是一个字符串标记列表。(这些可以是许多段落的完整文章/文档,或其他任何内容。word2vec 的某些用法甚至会留下标点符号作为伪词。)

您的test_02文件,如果它已经被标记为您想要的“单词”,其中每一行都是合理大小的文本并且单词由单个空格分隔,则可能已经准备好传递给Word2Vec. 尝试...

from gensim.models.word2vec import LineSentence
corpus = LineSentence('test_02')

..然后corpus作为sentences参数提供给Word2Vec. 如果实际上您test_02需要更复杂的预处理/标记化,请先执行此操作,如果您需要那种复杂程度,则可以使用 Spacy,然后创建一个文件,每行一个文本和以空格分隔的标记。

在任何时候都没有必要将整个语料库加载到单个堆内字符串或列表中;它可以而且几乎总是应该根据需要从磁盘流式传输,以避免消耗太多主内存。


查看完整回答
反对 回复 2023-03-30
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信