笔记整理时间:2017年1月11日
笔记整理者:王小草
SparkML 2.1.0的官方文档给出了21类特征转换的方法,其中关于自然语言处理领域的有3类,分别是:Tokenizer分词,StopWordsRemover去停用词,n-gram。本文主要介绍这三种方法的使用。
1. Tokenizer分词
在对文本做数据挖掘的时候,分词往往是第一步:将一个句子拆分成单词的集合。
在文本特征的提取笔记中,讲到可以用TF-IDF文档矩阵,word2vec词嵌入矩阵来做词或文档的向量表征,这些都是基于分词的基础上的。准确的分词是接下来特征提取与模型建立的成功垫脚石。
英文的分词很简单,只需按照标点与空格就可以提取word,而中文的分词就有点让人头痛了呢。sparkml此处提供的只是基于英文的分词方法。关于中文分词,我们还需要对其在巨大的语料库上进行训练而得到,常见的模型有隐马尔科夫模型HMM,条件随机场模型CRF等,这些模型的介绍请参见我的机器学习笔记哦~
Sparkml的分词提供了两种方法:
1.Tokenization,将英文句子分成单个的term。
// 创建一个dataframe,第二列是句子
val sentenceDataFrame = spark.createDataFrame(Seq(
(0, "Hi I heard about Spark"),
(1, "I wish Java could use case classes"),
(2, "Logistic,regression,models,are,neat")
)).toDF("id", "sentence")
// 默认的分词(自动转成小写)
val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val tokenized = tokenizer.transform(sentenceDataFrame)
tokenized.show(false)
输出结果:
+---+-----------------------------------+------------------------------------------+
|id |sentence |words |
+---+-----------------------------------+------------------------------------------+
|0 |Hi I heard about Spark |[hi, i, heard, about, spark] |
|1 |I wish Java could use case classes |[i, wish, java, could, use, case, classes]|
|2 |Logistic,regression,models,are,neat|[logistic,regression,models,are,neat] |
+---+-----------------------------------+---------