我需要两个标记化和删除停用词的过程:
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 分类。
您可以使用 fit
和 transform
方法训练它:
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/