Spark-NLP 预训练管道只能在 Linux 系统上运行吗?

2023-11-23

我正在尝试设置一个简单的代码,在其中传递数据帧并使用 johnSnowLabs Spark-NLP 库提供的预训练解释管道对其进行测试。 我正在使用 anaconda 的 jupyter 笔记本,并使用 apache toree 设置 Spark scala 内核。每次我运行应加载预训练管道的步骤时,它都会引发张量流错误。有没有办法可以在 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 已尝试 使用 Contrib 模块加载 Tensorflow Graph,但加载失败 在这个系统上。如果您在 Windows 上,则不执行此操作 支持的。请尝试非贡献模型。如果不是这样,请 报告此问题。原始错误消息:

Op 类型未在运行的二进制文件中注册“BlockLSTM” “我的机器”。确保 Op 和 Kernel 已在 在此进程中运行的二进制文件。请注意,如果您正在加载已保存的 使用 tf.contrib 中的操作的图,访问(例如)tf.contrib.resampler应在导入图表之前完成,如下所示 当第一次访问模块时,contrib 操作会被延迟注册。 StackTrace:Op 类型未在运行的二进制文件中注册“BlockLSTM” “我的机器”。确保 Op 和 Kernel 已在 在此进程中运行的二进制文件。请注意,如果您正在加载已保存的 使用 tf.contrib 中的操作的图,访问(例如)tf.contrib.resampler应在导入图表之前完成,如下所示 当第一次访问模块时,contrib 操作会被延迟注册。
在 com.johnsnowlabs.ml.tensorflow.TensorflowWrapper$.readGraph(TensorflowWrapper.scala:163) 在 com.johnsnowlabs.ml.tensorflow.TensorflowWrapper$.read(TensorflowWrapper.scala:202) 在 com.johnsnowlabs.ml.tensorflow.ReadTensorflowModel$class.readTensorflowModel(TensorflowSerializeModel.scala:73) 在 com.johnsnowlabs.nlp.annotators.ner.dl.NerDLModel$.readTensorflowModel(NerDLModel.scala:134) 在 com.johnsnowlabs.nlp.annotators.ner.dl.ReadsNERGraph$class.readNerGraph(NerDLModel.scala:112) 在 com.johnsnowlabs.nlp.annotators.ner.dl.NerDLModel$.readNerGraph(NerDLModel.scala:134) 在 com.johnsnowlabs.nlp.annotators.ner.dl.ReadsNERGraph$$anonfun$2.apply(NerDLModel.scala:116) 在 com.johnsnowlabs.nlp.annotators.ner.dl.ReadsNERGraph$$anonfun$2.apply(NerDLModel.scala:116) 在 com.johnsnowlabs.nlp.ParamsAndFeaturesReadable$$anonfun$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.foreach(ArrayBuffer.scala:48) 在 com.johnsnowlabs.nlp.ParamsAndFeaturesReadable$class.com$johnsnowlabs$nlp$ParamsAndFeaturesReadable$$onRead(ParamsAndFeaturesReadable.scala:30) 在 com.johnsnowlabs.nlp.ParamsAndFeaturesReadable$$anonfun$read$1.apply(ParamsAndFeaturesReadable.scala:41) 在 com.johnsnowlabs.nlp.ParamsAndFeaturesReadable$$anonfun$read$1.apply(ParamsAndFeaturesReadable.scala:41) 在 com.johnsnowlabs.nlp.FeaturesReader.load(ParamsAndFeaturesReadable.scala:19) 在 com.johnsnowlabs.nlp.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:27​​4) 在 org.apache.spark.ml.Pipeline$SharedReadWrite$$anonfun$4.apply(Pipeline.scala:27​​2) 在 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) 在 scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)
在 org.apache.spark.ml.Pipeline$SharedReadWrite$.load(Pipeline.scala:27​​2) 在 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.ResourceDownloader$.downloadPipeline(ResourceDownloader.scala:129) 在 com.johnsnowlabs.nlp.pretrained.PretrainedPipelinenter code heree.(PretrainedPipeline.scala:14)


我查了一下,该管道中有一个 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 库的贡献者之一。

UPDATE:自从 Spark NLP 发布以来2.4.0,所有模型和管道现在都是跨平台的:https://github.com/JohnSnowLabs/spark-nlp-models

如果您使用 Spark NLP 2.4.0 版本,这应该适用于 Linux、macOS 和 Windows:

val pipeline = PretrainedPipeline("explain_document_dl", lang = "en")

2022 年更新:除了 M1 和 aarch64 架构(目前)外,所有 5000 多个模型/管道均兼容 Windows(8、10 和 11)、Linux(Ubuntu、Debian、CentOS 等)和 macOS 操作系统系统。 Spark NLP 模型中心:https://nlp.johnsnowlabs.com/models

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark-NLP 预训练管道只能在 Linux 系统上运行吗? 的相关文章

随机推荐