scala - 管道能成为变压器吗?

标签 scala apache-spark machine-learning nlp apache-spark-mllib

我需要两个标记化和删除停用词的过程:

val tokenizer = new Tokenizer()
                  .setInputCol("seg_text")
                  .setOutputCol("raw_words")

val remover = new StopWordsRemover()
                  .setInputCol("raw_words")
                  .setStopWords(stop_words) 
                  .setOutputCol("words")

并创建管道:

val pipeline = new Pipeline()
                  .setStages(Array(tokenizer, remover))

最后,我希望通过这个管道获得输出。我不知道怎么做,或者也许不能。

最佳答案

管道是您必须首先训练的 ML 模型,然后它才能为您工作。

在您的情况下,您的管道仅包含预处理阶段,因此最终将在实际训练阶段之前使用它,例如 TF-IDF 分类。

您可以使用 fittransform 方法训练它:

val model = pipeline.fit(df).transform(df)

但在此之前,您需要使用一些培训文档填充 df。你可以这样做:

val df = sc.textFile(paths.mkString(",")).toDF("docs")

path是所有训练文档路径的Seq[String]。

您可以看到this example使用带有 StopWordsRemover 的管道的线性判别分析。

完成后,您将创建一个预处理机器学习模型。如果您需要模型实际进行真正的处理(例如分类、预测等),那么您可以将另一种算法添加到管道中(例如 TF-IDF),或者您可以将其用作另一个管道中的一种算法。

训练模型后,您可能想要保存它,以便稍后加载并使用它,而无需再次训练:

model.write.overwrite().save("/tmp/your-model")

然后你可以像这样加载它:

val alreadyTrainedModel = PipelineModel.load("/tmp/your-model")

关于scala - 管道能成为变压器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57441063/

相关文章:

matlab - 测试经过训练的神经网络 - Matlab

machine-learning - 尽管存在缺失值,但仍过度拟合,基于树的学习

java.io.FileNotFoundException : File file:/data/home/test/analysis. json 不存在。读取 json 时 Spark 错误

scala - 找不到 Ordered[T] 类型的证据参数的隐式值

Scala 伴生对象不是单例

scala - 如何使用Slick2.0.1映射postgresql自定义枚举列?

java - 如何为java的apache beam pipeline配置spark runner

apache-spark - 我应该避免在数据集/数据帧中使用 groupby() 吗?

matlab - 我的观察结果小于每个的特征向量。有什么解决方案可以克服这个问题吗?

scala - 编译包含 java 和 scala 代码的文件