【问题标题】:Spacy: save parsed modelSpacy:保存解析的模型
【发布时间】:2016-09-15 10:51:05
【问题描述】:

我正在使用 Spacy,它是一个 Python 自然语言处理库,将原始文本解析为这种更复杂的面向对象格式,更具体地说是依赖树。

上述操作执行需要一段时间:我需要加载一个非常昂贵的模型,然后解析非常大量的文本。我希望在后续执行中节省一些时间,以便在完成初始解析后更快地迭代处理数据。

如何在第一次运行后“保存”这些结果,然后在后续运行中更快地重新加载这些预处理版本?

PICKLE: 尝试使用 pickle 时,我在反序列化 Docs/Tokens 类时收到以下错误:

File "spacy/tokens/token.pyx", line 56, in spacy.tokens.token.Token.__cinit__ (spacy/tokens/token.cpp:3868)
TypeError: __cinit__() takes exactly 3 positional arguments (0 given)

谢谢。

【问题讨论】:

  • 您解决了吗?你能举一个mcve你在做什么的例子吗?我感兴趣;)
  • 感谢您的评论...我确实通过大致执行以下操作解决了这个问题:重新实现 Spacy 的 2 个类,Span(用于句子)和 Token 类。解析原始文本后,我将 Spacy Doc 对象转换为 Span 列表。然后我将该列表腌制到磁盘。有趣的是我还实现了迭代器,因此它是“透明的”,因为我不必更改处理这些对象的其余代码。
  • 可能很快就会按照 mcve 原则写出正确的答案。
  • 是的,我想看看,如果你愿意,我肯定会投赞成票

标签: python serialization nlp pickle spacy


【解决方案1】:

没有 pickle 解决方案,但我过去写了 this script 以将 SpaCy 输出存储为 XML(以 NAF 格式)。

根据您的管道,您还可以尝试以 CoNLL 格式存储输出(例如 CoNLL-U)。这使您的代码可以与许多其他 NLP 工具互操作,这非常棒,因为您可以毫无问题地更改解析器。

我没有这方面的示例代码,但过程应该类似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2021-06-24
    • 1970-01-01
    • 2023-03-07
    • 2020-12-19
    相关资源
    最近更新 更多