Сохраняйте модель BERT на диске как файл маринада - PullRequest
1 голос
/ 23 января 2020

Мне удалось заставить модель BERT работать с библиотекой johnsnowlabs-spark-nlp. Я могу сохранить «обученную модель» на диске следующим образом.

Подходящая модель

df_bert_trained = bert_pipeline.fit(textRDD)

df_bert=df_bert_trained.transform(textRDD)

сохранить модель

df_bert_trained.write().overwrite().save("/home/XX/XX/trained_model")

Однако

Во-первых, согласно документам здесь https://nlp.johnsnowlabs.com/docs/en/concepts, заявлено, что можно загрузить модель как

EmbeddingsHelper.load(path, spark, format, reference, dims, caseSensitive) 

, но мне неясно, что представляет переменная "ссылка" в этом точка.

Во-вторых, кому-нибудь удалось сохранить вложения BERT в виде файла рассола в python?

1 Ответ

1 голос
/ 14 февраля 2020

В 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)

Дайте мне знать, если у вас есть какие-либо вопросы или проблемы, и я обновлю свой ответ.

Ссылки :

...