Работают ли предварительно подготовленные трубопроводы Spark-NLP только в системах linux?
Я пытаюсь настроить простой код, в котором я передаю фрейм данных и тестирую его с помощью предварительно подготовленного конвейера объяснения, предоставляемого библиотекой johnSnowLabs Spark-NLP. Я использую ноутбуки Jupyter от Anaconda, и у меня есть спарк-scala kernet, использующий Apache Toree. Каждый раз, когда я запускаю шаг, на котором он должен загрузить предварительно обученный конвейер, он выдает ошибку тензорного потока. Есть ли способ, которым мы можем запустить это на Windows локально?
I was trying this in a maven project earlier and the same error had happened. Another colleague tried it on a linux system and it worked. Below is the code I have tried and the error that it gave.
import org.apache.spark.ml.PipelineModel
import com.johnsnowlabs.nlp.pretrained.PretrainedPipeline
import com.johnsnowlabs.nlp.SparkNLP
import org.apache.spark.sql.SparkSession
val spark: SparkSession = SparkSession
.builder()
.appName("test")
.master("local[*]")
.config("spark.driver.memory", "4G")
.config("spark.kryoserializer.buffer.max", "200M")
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.getOrCreate()
val testData = spark.createDataFrame(Seq(
(1, "Google has announced the release of a beta version of the popular TensorFlow machine learning library"),
(2, "Donald John Trump (born June 14, 1946) is the 45th and current president of the United States"))).toDF("id", "text")
val pipeline = PretrainedPipeline("explain_document_dl", lang = "en") //this is where it gives error
val annotation = pipeline.transform(testData)
annotation.show()
annotation.select("entities.result").show(false)
Ниже появляется ошибка:
Имя: java.lang.UnsupportedOperationException Сообщение: Spark NLP попытался загрузить график Tensorflow с помощью модуля Contrib, но не смог загрузить его в этой системе. Если вы работаете в Windows, эта операция не поддерживается. Пожалуйста, попробуйте модель без контрибуции. Если это не так, пожалуйста, сообщите об этой проблеме. Исходное сообщение об ошибке:
Тип операции не зарегистрирован "BlockLSTM" в двоичном файле, запущенном на "MyMachine". Убедитесь, что Op и Kernel зарегистрированы в двоичном файле, запущенном в этом процессе. Обратите внимание, что если вы загружаете сохраненный график, который использовал ops из tf.contrib, доступ (например)
tf.contrib.resampler
это необходимо сделать перед импортом графика, так как вклады лениво регистрируются при первом доступе к модулю. StackTrace: тип операции не зарегистрирован "BlockLSTM" в двоичном файле, запущенном на "MyMachine". Убедитесь, что Op и Kernel зарегистрированы в двоичном файле, запущенном в этом процессе. Обратите внимание, что если вы загружаете сохраненный график, который использовал ops из tf.contrib, доступ (например)tf.contrib.resampler
это необходимо сделать перед импортом графика, так как вклады лениво регистрируются при первом доступе к модулю.
по адресу com.johnsnowlabs.ml.tensorflow.TensorflowWrapper$.readGraph(TensorflowWrapper.scala:163) по адресу com.johnsnowlabs.ml.tensorflow.TensorflowWrapper$.read(TensorflowWrapper.scala:202) по адресу com.johnsnowflowordel. $class.readTensorflowModel(TensorflowSerializeModel.scala:73) в com.johnsnowlabs.nlp.annotators.ner.dl.NerDLModel$.readTensorflowModel(NerDLModel.scala:134) в com.johnsnowlabs.raph. $. class.readNerGraph(NerDLModel.scala:112) в com.johnsnowlabs.nlp.annotators.ner.dl.NerDLModel$.readNerGraph(NerDLModel.scala:134) в com.johnsnowlabs.nlp.annotators.ner.draph$$anonfun$2.apply(NerDLModel.scala:116) на com.johnsnowlabs.nlp.annotators.ner.dl.ReadsNERGraph$$anonfun$2.apply(NerDLModel.scala:116) на com.johnsnowlabs.nlp.ParamsAndable $ $com$johnsnowlabs$nlp$ParamsAndFeaturesReadable$$onRead$1.apply(ParamsAndFeaturesReadable.scala:31) в com.johnsnowlabs.nlp.ParamsAndFeaturesReadable$$anonfun$com$johnsnowlabs$nlp$ParamsAndFeaturesReadable$$onRead$1.apply(ParamsAndFeaturesReadable.scala:30) в scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) в scala.collection.mutable.ArrayBuffer.foreuscray.foreach. 48) at com.johnsnowlabs.nlp.ParamsAndFeaturesReadable$class.com$johnsnowlabs$nlp$ParamsAndFeaturesReadable$$onRead(ParamsAndFeaturesReadable.scala:30) в com.johnsnowlabs.nlable.Reafs:41) в com.johnsnowlabs.nlp.ParamsAndFeaturesReadable$$anonfun$read$1.apply(ParamsAndFeaturesReadable.scala:41) в com.johnsnowlabs.nlp.FeaturesReader.load(ParamsAndFeaturesReadnowla.hl.FeaturesReader.load(ParamsAndFeaturesReadable.scala:8) в org.apache.spark.ml.util.DefaultParamsReader$.loadParamsInstance(ReadWrite.scala:652) в org.apache.spark.ml.Pipeline$SharedReadWrite$$anonfun$4.apply(Pipeline.scala:274) в org.apache.spark.ml.Pipeline$SharedReadWrite$$anonfun$4.apply(Pipeline.scala:272) в scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) в scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) в scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) в scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186) в scala.collection.TraversableLike$class.map(TraversableLike.scala 234: TraversableLike.scala 23:) на scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)
в org.apache.spark.ml.Pipeline$SharedReadWrite$.load(Pipeline.scala:272) в org.apache.spark.ml.PipelineModel$PipelineModelReader.load(Pipeline.scala:348) в org.apache.spark.ml.PipelineModel$PipelineModelReader.load(Pipeline.scala:342) по адресу com.johnsnowlabs.nlp.pretrained.ResourceDownloader$.downloadPipeline(ResourceDownloader.scala:135) по адресу com.johnsnowlabs.nlp.pretrained.Resdown.scala:129) на com.johnsnowlabs.nlp.pretrained.PretrainedPipelinenter code here
Д.(PretrainedPipeline.scala:14)
0 ответов
Я проверил, внутри этого конвейера есть модель NER. Эта модель NER была обучена с использованием TensorFlow, и в ней естьcontrib
код внутри, который совместим только с ОС на базе Unix, такими как Linux и macOS. Здесь есть открытая проблема:
https://github.com/tensorflow/tensorflow/issues/26468
С этой целью они выпустили несколько Windows-совместимых конвейеров, названныхnoncontrib
. Вы можете изменить имя конвейера на следующее:
val pipeline = PretrainedPipeline("explain_document_dl_noncontrib", lang = "en")
Источник для всех предварительно обученных конвейеров:https://nlp.johnsnowlabs.com/docs/en/pipelines
Полное раскрытие информации: я являюсь одним из участников библиотеки Spark NLP.
ОБНОВЛЕНИЕ: с момента выпуска Spark NLP2.4.0
, все модели и конвейеры теперь кроссплатформенные: https://github.com/JohnSnowLabs/spark-nlp-models
Это должно работать в Linux, macOS и Windows, если вы используете версию Spark NLP 2.4.0:
val pipeline = PretrainedPipeline("explain_document_dl", lang = "en")