【问题标题】:Could pipeline become transformer?管道能变成变压器吗?
【发布时间】:2019-12-17 20:17:09
【问题描述】:

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

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))

最后,我希望得到这个管道的输出。我不知道怎么做,或者可能做不到。

【问题讨论】:

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


    【解决方案1】:

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

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

    您使用fittransform 方法对其进行训练:

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

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

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

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 2020-07-22
      • 2018-01-02
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2015-10-17
      相关资源
      最近更新 更多