管道可以变成变压器吗?

时间:2019-08-10 09:48:06

标签: 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))

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

1 个答案:

答案 0 :(得分:1)

管道是您必须首先训练的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。

完成后,您将创建一个预处理ML模型。如果您需要模型实际执行真实的处理(例如分类,预测等),则可以将另一种算法添加到管道中(例如TF-IDF),也可以将其用作另一种管道中的一种算法。

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

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

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

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