当我们训练自定义模型时,我确实看到我们有可以调整的dropout和n_iter参数,但是Spacy使用哪种深度学习算法来训练自定义模型?另外,在添加新的实体类型时,创建空白或在现有模型上训练它会很好吗?
答案 0 :(得分:8)
spaCy拥有自己的名为thinc的深度学习库,用于不同的NLP模型。对于大多数(如果不是全部)任务,spaCy使用基于CNN的深度神经网络进行一些调整。 spacy专门用于命名实体识别:
从移位减少解析器中借用的基于过渡的方法,在Lample等人的论文Neural Architectures for Named Entity Recognition中进行了描述。 Matthew Honnibal描述了spaCy如何在YouTube video上使用它。
一个名为“嵌入,编码,出席,预测”的框架(在视频中以here开始),幻灯片here。
嵌入:使用Bloom过滤器嵌入单词,这意味着单词哈希被保留为嵌入字典中的键,而不是单词本身。这样可以维护更紧凑的嵌入词典,使单词可能发生碰撞,并最终以相同的矢量表示形式结束。
编码:将单词列表编码为句子矩阵,以考虑上下文。 spaCy使用CNN进行编码。
参加:确定哪些部分在查询中提供更多信息,并获得针对问题的表示。
每个汉尼拔,该框架的优点是:
有关完整概述,Matthew Honnibal描述了this YouTube video中的模型。可以找到幻灯片here。
注意:此信息基于2017年的幻灯片。此后引擎可能已更改。
从理论上讲,当使用新实体对spaCy模型进行微调时,必须确保该模型不会忘记先前学习的实体的表示形式。如果可能的话,最好的办法是从头开始训练模型,但是由于缺乏数据或资源,这可能不容易或不可能。