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

new*_*bie 5 nlp spacy ner

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

Omr*_*374 13

spaCy 使用哪种学习算法?

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

  1. 一种从 shift-reduce 解析器借用的基于转换的方法,在Lample 等人的论文Neural Architectures for Named Entity Recognition 中有所描述。Matthew Honnibal 描述了 spaCy 如何在YouTube 视频中使用它。

  2. 一个名为“嵌入。编码。参加。预测”的框架(从视频的这里开始),幻灯片这里

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

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

    • 参加:根据查询确定哪些部分的信息量更大,并获得特定于问题的表示。

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

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

  1. 主要相当于序列标记(另一个任务 spaCy 提供模型)
  2. 与解析器共享代码
  3. 轻松排除无效序列
  4. 任意特征很容易定义

有关完整概述,Matthew Honnibal 在此 YouTube 视频中介绍了该模型的工作原理。幻灯片可以在这里找到。

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

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

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

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

  • 我不认为它结合了 LSTM 或 CRF。这可能就是为什么它比循环模型快得多的原因。如果我必须用一句话来形容,我会说“CNN on top of Bloom embeddings with Attention” (2认同)