CountVectorizer와 CountVectorizerModel은 텍스트 문서를 토큰 개수의 벡터로 변환할 수 있다. 


CountVectorizer는 어휘 추출을 위한 에스터메이터(estimator)로 사용되어 CountVectorizerModel을 생성한다. 


해당 모델은 어휘를 통해 문서에 대한 희소한 표현을 생성한 다음 LDA와 같은 알고리즘으로 전달할 수 있다.


다음은 피쳐를 만드는 간단한 데이터 프레임을 생성하는 예이다.



scala>

val df = spark.createDataFrame(

Seq((0, Array("Jason", "David")),

(1, Array("David", "Martin")),

(2, Array("Martin", "Jason")),

(3, Array("Jason", "Daiel")),

(4, Array("Daiel", "Martin")),

(5, Array("Moahmed", "Jason")),

(6, Array("David", "David")),

(7, Array("Jason", "Martin")))).toDF("id", "name")



scala>

df.show(false)


// 결과


+---+----------------+

|id |name            |

+---+----------------+

|0  |[Jason, David]  |

|1  |[David, Martin] |

|2  |[Martin, Jason] |

|3  |[Jason, Daiel]  |

|4  |[Daiel, Martin] |

|5  |[Moahmed, Jason]|

|6  |[David, David]  |

|7  |[Jason, Martin] |

+---+----------------+





대부분의 경우 setInputCol을 사용해 입력 컬럼을 설정할 수 있다. 다음과 같이 코퍼스의 CountVectorizerModel 오브젝트를 피팅한다.



scala>


import org.apache.spark.ml.feature.CountVectorizer

import org.apache.spark.ml.feature.CountVectorizerModel


val cvModel: CountVectorizerModel = new CountVectorizer()

                          .setInputCol("name")

                          .setOutputCol("features")

                          .setVocabSize(3)

                          .setMinDF(2)

                          .fit(df)



이제 추출기를 사용해 다음과 같이 토큰 개수에 대한 벡터를 얻는다.



scala>

val feature = cvModel.transform(df)


scala> 


feature.show(false)

+---+----------------+-------------------+

|id |name            |features           |

+---+----------------+-------------------+

|0  |[Jason, David]  |(3,[0,1],[1.0,1.0])|

|1  |[David, Martin] |(3,[1,2],[1.0,1.0])|

|2  |[Martin, Jason] |(3,[0,2],[1.0,1.0])|

|3  |[Jason, Daiel]  |(3,[0],[1.0])      |

|4  |[Daiel, Martin] |(3,[2],[1.0])      |

|5  |[Moahmed, Jason]|(3,[0],[1.0])      |

|6  |[David, David]  |(3,[1],[2.0])      |

|7  |[Jason, Martin] |(3,[0,2],[1.0,1.0])|

+---+----------------+-------------------+





이름에 대한 피쳐가 생성되었다.

Posted by '김용환'
,