SPARKNLP或BERT中的BERT嵌入用于huggingface中的标记分类

SPARKNLP或BERT中的BERT嵌入用于huggingface中的标记分类,nlp,bert-language-model,huggingface-transformers,johnsnowlabs-spark-nlp,Nlp,Bert Language Model,Huggingface Transformers,Johnsnowlabs Spark Nlp,目前我正在Spark上开发productionize NER模型。我有一个当前的实现,它使用Huggingface DISTILBERT和TokenClassification head,但是由于性能有点慢,成本有点高,我正在尝试找到优化的方法 我已经检查了SPARKNLP实现,它缺少预训练的DISTILBERT,并且我认为有一种不同的方法,因此出现了一些与此相关的问题: Huggingface使用整个BERT模型,并为令牌分类添加一个头部。这是否与获取BERT嵌入并将其馈送给另一个NN相同 我

目前我正在Spark上开发productionize NER模型。我有一个当前的实现,它使用Huggingface DISTILBERT和TokenClassification head,但是由于性能有点慢,成本有点高,我正在尝试找到优化的方法

我已经检查了SPARKNLP实现,它缺少预训练的DISTILBERT,并且我认为有一种不同的方法,因此出现了一些与此相关的问题:

  • Huggingface使用整个BERT模型,并为令牌分类添加一个头部。这是否与获取BERT嵌入并将其馈送给另一个NN相同
  • 我这样问是因为这是SPARKNLP方法,一个帮助实现这些嵌入并将其用作另一个复杂NN功能的类。这难道不是失去了伯特内心的一些知识吗
  • SPARKNLP是否有任何关于SPARK的优化,这有助于缩短推理时间,还是只是另一个BERT实现

  • 要回答您的第一个问题:

    拥抱脸部在不同的任务中使用不同的头部,这与BERT的作者在他们的模型中所做的几乎相同。他们在现有模型的基础上添加了特定于任务的层,以针对特定任务进行微调。这里必须注意的一点是,当您添加特定于任务的层(一个新层)时,您将共同学习新层并更新伯特模型的现有学习权重。所以,基本上你的伯特模型是梯度更新的一部分。这与获取嵌入然后将其作为神经网络的输入是完全不同的

    问题2: 当您获取嵌入并将其用于另一个复杂的模型时,我不确定如何量化丢失的信息,因为您仍然在使用从数据中获取的信息来构建另一个模型。因此,我们不能将其归因于信息丢失,但与在BERT之上(以及与BERT一起)学习另一个模型相比,性能不一定是最好的


    通常,由于资源限制,人们会获得嵌入,然后将分类器作为输入输入到另一个用户,而训练或微调BERT可能是不可行的。

    我让其他用户回答问题3,因为我不太了解spark nlp。