如何使用 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)
希望对您有所帮助。
我想将推文转化为机器学习的向量,这样我就可以使用 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)
希望对您有所帮助。