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

时间:2020-02-24 17:33:52

标签: nlp spacy ner

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

1 个答案:

答案 0 :(得分:8)

spaCy使用哪种学习算法?

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

  1. 从移位减少解析器中借用的基于过渡的方法,在Lample等人的论文Neural Architectures for Named Entity Recognition中进行了描述。 Matthew Honnibal描述了spaCy如何在YouTube video上使用它。

  2. 一个名为“嵌入,编码,出席,预测”的框架(在视频中以here开始),幻灯片here

    • 嵌入:使用Bloom过滤器嵌入单词,这意味着单词哈希被保留为嵌入字典中的键,而不是单词本身。这样可以维护更紧凑的嵌入词典,使单词可能发生碰撞,并最终以相同的矢量表示形式结束。

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

    • 参加:确定哪些部分在查询中提供更多信息,并获得针对问题的表示。

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

每个汉尼拔,该框架的优点是:

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

有关完整概述,Matthew Honnibal描述了this YouTube video中的模型。可以找到幻灯片here

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

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

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