В Spark NLP BERT поставляется в качестве предварительно обученной модели. Это означает, что это уже модель, которая была обучена, подходит и т. Д. c. и сохраняется в правильном формате.
Это, как говорится, нет никаких причин, чтобы соответствовать или сохранить его снова. Однако вы можете сохранить его результат, как только преобразуете свой DataFrame в новый DataFrame с вложениями BERT для каждого токена.
Пример:
Запустите сеанс Spark в spark-shell с помощью Пакет Spark NLP
spark-shell --packages JohnSnowLabs:spark-nlp:2.4.0
import com.johnsnowlabs.nlp.annotators._
import com.johnsnowlabs.nlp.base._
val documentAssembler = new DocumentAssembler()
.setInputCol("text")
.setOutputCol("document")
val sentence = new SentenceDetector()
.setInputCols("document")
.setOutputCol("sentence")
val tokenizer = new Tokenizer()
.setInputCols(Array("sentence"))
.setOutputCol("token")
// Download and load the pretrained BERT model
val embeddings = BertEmbeddings.pretrained(name = "bert_base_cased", lang = "en")
.setInputCols("sentence", "token")
.setOutputCol("embeddings")
.setCaseSensitive(true)
.setPoolingLayer(0)
val pipeline = new Pipeline()
.setStages(Array(
documentAssembler,
sentence,
tokenizer,
embeddings
))
// Test and transform
val testData = Seq(
"I like pancakes in the summer. I hate ice cream in winter.",
"If I had asked people what they wanted, they would have said faster horses"
).toDF("text")
val predictionDF = pipeline.fit(testData).transform(testData)
predictionDF
- это DataFrame, который содержит вложения BERT для каждого токена в наборе данных. BertEmbeddings
предварительно обученные модели поступают из TF Hub, что означает, что они представляют собой точно такие же предварительно обученные веса, опубликованные Google. Доступны все 5 моделей:
- bert_base_cased (en)
- bert_base_uncased (en)
- bert_large_cased (en)
- bert_large_uncased (en)
- bert_multi_cased (xx)
Дайте мне знать, если у вас есть какие-либо вопросы или проблемы, и я обновлю свой ответ.
Ссылки :