在 Spark NLP 中,BERT 作为预训练模型出现。这意味着它已经是一个经过训练、拟合等并以正确格式保存的模型。
话虽如此,没有理由再次安装或保存它。但是,一旦将 DataFrame 转换为具有每个令牌的 BERT 嵌入的新 DataFrame,您就可以保存它的结果。
例子:
使用 Spark NLP 包在 spark-shell 中启动 Spark 会话
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)
如果您有任何疑问或问题,请告诉我,我会更新我的答案。
参考资料: