如何使用 Spark 的 MLLib 对推文进行矢量化?

How can I vectorize Tweets using Spark's MLLib?

我想将推文转化为机器学习的向量,这样我就可以使用 Spark 的 K-Means 聚类根据内容对它们进行分类。例如,所有与亚马逊相关的推文都归为一类。

我曾尝试将推文拆分为单词并使用 HashingTF 创建向量,但不是很成功。

还有其他方法可以矢量化推文吗?

您可以试试这个管道:

首先,标记输入推文(位于 text 列)。基本上,它会创建一个新列 rawWords 作为从原始文本中提取的单词列表。为了获得这些词,它按字母数字词 (.setPattern("\w+").setGaps(false))

拆分输入文本
val tokenizer = new RegexTokenizer()
 .setInputCol("text")
 .setOutputCol("rawWords")
 .setPattern("\w+")
 .setGaps(false)

其次,可以考虑去掉停用词,去掉文本中不太重要的词,比如a, the,

val stopWordsRemover = new StopWordsRemover()
 .setInputCol("rawWords")
 .setOutputCol("words")

现在是向量化 words 列的时候了。在此示例中,我使用的是非常基本的 CountVectorizer。还有很多其他的,比如TF-ID Vectorizer。您可以找到更多信息 here.

我已经配置 CountVectorizer 以便它创建一个包含 10,000 个单词的词汇表,每个单词在所有文档中至少出现 5 次,并且在每个文档中至少出现 1 次。

val countVectorizer = new CountVectorizer()
 .setInputCol("words")
 .setOutputCol("features")
 .setVocabSize(10000)
 .setMinDF(5.0)
 .setMinTF(1.0)

最后直接创建pipeline,通过传入dataset对pipeline生成的模型进行拟合和变换

val transformPipeline = new Pipeline()
 .setStages(Array(
   tokenizer,
   stopWordsRemover,
   countVectorizer))

transformPipeline.fit(training).transform(test)

希望对您有所帮助。