Spacy 在训练自定义模型时使用哪种深度学习算法?

Which Deep Learning Algorithm does Spacy uses when we train Custom model?

当我们训练自定义模型时,我确实看到我们有 dropout 和 n_iter 参数需要调整,但是 Spacy 使用哪种深度学习算法来训练自定义模型?另外,在添加新的实体类型时,是创建空白还是在现有模型上训练它好?

spaCy 使用哪种学习算法?

spaCy 有自己的名为 thinc 的深度学习库,用于不同的 NLP 模型。对于大多数(如果不是全部)任务,spaCy 使用基于 CNN 的深度神经网络并进行了一些调整。专门针对命名实体识别,spacy使用:

  1. 一种基于转换的方法 借鉴了 shift-reduce 解析器,Lample 等人在论文Neural Architectures for Named Entity Recognition 中对此进行了描述。 Matthew Honnibal 描述了 spaCy 如何在 YouTube video.

    上使用它
  2. 一个名为 "Embed.Encode.Attend.Predict" 的框架(开始 here on the video), slides here.

    • 嵌入:使用布隆过滤器嵌入单词,这意味着单词哈希值作为关键字保留在嵌入字典中,而不是单词本身。这维护了一个更紧凑的嵌入字典,单词可能会发生冲突并以相同的向量表示结束。

    • Encode:将单词列表编码成句子矩阵,以考虑上下文。 spaCy 使用 CNN 进行编码。

    • 参加:确定给定查询哪些部分信息量更大,并获得问题的具体表示。

    • Predict: spaCy 使用多层感知器进行推理。

根据 Honnibal 的说法,此框架的优点是:

  1. 大部分等同于序列标记(spaCy 提供的另一任务模型)
  2. 与解析器共享代码
  3. 轻松排除无效序列
  4. 轻松定义任意特征

为了获得完整的概述,Matthew Honnibal 在 this YouTube video. Slides could be found here 中描述了该模型的工作原理。

注意:此信息基于 2017 年的幻灯片。此后引擎可能已更改。

添加新实体类型时,我们应该创建空白模型还是训练现有模型?

理论上,在使用新实体微调 spaCy 模型时,您必须确保模型不会忘记先前学习的实体的表示。如果可能的话,最好的办法是从头开始训练模型,但由于缺乏数据或资源,这可能并不容易或不可能。

2021 年 2 月编辑:spaCy 版本 3 现在使用 Transformer 架构作为其深度学习模型。