我目前有大约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很重要?
编辑:我应该提到,我确实需要文件信息,以便以后用于根据文件的文本预测准确性