2

私は(PySpark API経由)スパーク2.0にLDAを行うためのPipelineModelを作成しました:PySpark PipelineModelの個々のステージからメソッドにアクセスする方法はありますか?

def create_lda_pipeline(minTokenLength=1, minDF=1, minTF=1, numTopics=10, seed=42, pattern='[\W]+'): 
    """ 
    Create a pipeline for running an LDA model on a corpus. This function does not need data and will not actually do 
    any fitting until invoked by the caller. 
    Args: 
     minTokenLength: 
     minDF: minimum number of documents word is present in corpus 
     minTF: minimum number of times word is found in a document 
     numTopics: 
     seed: 
     pattern: regular expression to split words 

    Returns: 
     pipeline: class pyspark.ml.PipelineModel 
    """ 
    reTokenizer = RegexTokenizer(inputCol="text", outputCol="tokens", pattern=pattern, minTokenLength=minTokenLength) 
    cntVec = CountVectorizer(inputCol=reTokenizer.getOutputCol(), outputCol="vectors", minDF=minDF, minTF=minTF) 
    lda = LDA(k=numTopics, seed=seed, optimizer="em", featuresCol=cntVec.getOutputCol()) 
    pipeline = Pipeline(stages=[reTokenizer, cntVec, lda]) 
    return pipeline 

私はLDAModel.logPerplexity()方法で訓練されたモデルを使用してデータセットにパープレキシティを計算したいので、私が実行してみました次

try: 
    training = get_20_newsgroups_data(test_or_train='test') 
    pipeline = create_lda_pipeline(numTopics=20, minDF=3, minTokenLength=5) 
    model = pipeline.fit(training) # train model on training data 
    testing = get_20_newsgroups_data(test_or_train='test') 
    perplexity = model.logPerplexity(testing) 
    pprint(perplexity) 

これはちょうど、次のAttributeErrorになり:

'PipelineModel' object has no attribute 'logPerplexity' 

logPerplexityメソッドがLDAModelに属し、PipelineModelではなく、このエラーが発生する理由を理解していますが、そのステージからメソッドにアクセスする方法があるかどうか疑問に思っています。

答えて

4

パイプライン内のすべてのトランスは、stagesプロパティに格納されています。 stagesを抽出し、最後のものを取ると、あなたは行く準備が整いました:

model.stages[-1].logPerplexity(testing) 
+0

うわー、ありがとう。私のベーコンを救った! –

関連する問題