添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在400K以上的文件上运行时,改善spaCy的内存使用和运行时间?

0 人关注

我目前有大约40万份文件,每份都有一个相关的组和ID号。它们平均约有24K字符和350行。总的来说,有大约25GB的数据。目前,它们被分成了不同的组,将需要处理的文件数量减少到大约15K。当我在一台拥有128GB内存的机器上运行时,我遇到了内存使用和分段故障的问题(我相信后者是前者的结果)。我已经改变了处理文件的方式,使用批处理来一次性处理这些文件。

def batchGetDoc(raw_documents):
        out = []
        reports = []
        infos = []
        # Each item in raw_documents is a tuple of 2 items, where the first item is all 
        # information (report number, tags) that correlate with said document. The second 
        # item is the raw text of the document itself 
        for info, report in raw_documents:
            reports.append(report)
            infos.append(info)
        # Using en_core_web_sm as the model
        docs = list(SPACY_PARSER.pipe(reports))
        for i in range(len(infos)):
            out.append([infos[i],docs[i]])
        return out

我使用的批处理量是500,即使如此,仍然需要一段时间。这些速度和内存方面的问题是由于在完整的文件而不是句子上使用.pipe()造成的吗?难道单独运行SPACY_PARSER(report)会更好吗?

我正在使用spaCy从每个文档中获取命名实体、它们的链接实体、依赖图和知识库。这样做会不会有丢失信息的风险,而这些信息在以后获取上述数据时对spaCy很重要?

编辑:我应该提到,我确实需要文件信息,以便以后用于根据文件的文本预测准确性

2 个评论
你可以尝试去掉for循环,作为一个开始
@pissall 会的。我应该如何将文件信息与从spaCy返回的文件相匹配?
python
nlp
spacy
named-entity-recognition
Gorlan
Gorlan
发布于 2019-11-17
1 个回答
aab
aab
发布于 2019-11-18
已采纳
0 人赞同

解析器和NER中存在内存泄漏,在v2.1.9和v2.2.2中得到了修复,如果有必要,请更新。如果你有很长的文件,你可能想把它们分成段落或章节来处理。(对于超过100万字符的文本,你会得到一个错误)。