Scala
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.sql.functions._
object ChineseTextClassification {
def main(args: Array[String]): Unit = {
// 读取训练数据
val df = spark.read.format("csv").option("header", "true").load("data/train.csv")
// 中文分词
val stopwords = sc.broadcast(Set("的", "是", "在", "了", "和", "为", "有", "这", "我"))
val tokenizer = new RegexTokenizer().setPattern("\\w+").setInputCol("文本内容").setOutputCol("分词内容")
df = tokenizer.transform(df)
// 将分词结果转换为特征向量
val hashingTF = new HashingTF().setNumFeatures(1000)
val tf = hashingTF.transform(df.select("分词内容"))
// 训练模型
val naiveBayes = new NaiveBayes()
val model = naiveBayes.fit(tf)
// 测试模型
val testData = spark.read.format("csv").option("header", "true").load("data/test.csv")
val testTf = hashingTF.transform(testData.select("分词内容"))
val predictions = model.predict(testTf)
// 计算准确率
val accuracy = predictions.zip(testData.select("文本类别")).map{ case (p, l) => if (p == l) 1 else 0}.sum() / testData.count()
println(s"准确率:${accuracy}")
}
}
该代码首先读取训练数据。训练数据包括文本内容和文本类别两列。
然后,我们使用中文分词器将文本内容转换为分词结果。在本例中,我们使用了 Spark MLlib 提供的 RegexTokenizer 类。
接下来,我们使用 HashingTF 对象将分词结果转换为特征向量。特征向量的维度设置为 1000。
最后,我们使用朴素贝叶斯算法训练模型,并在测试数据上进行测试。
以下是 10 个中文文本分类的 GitHub 资源:
- 649453932/Chinese-Text-Classification-Pytorch:基于 PyTorch 实现的中文文本分类,包括 TextCNN、TextRNN、FastText、TextRCNN、BiLSTM_Attention、DPCNN、Transformer 等模型。
- gaussic/text-classification-cnn-rnn:基于 Keras 实现的中文文本分类,包括 TextCNN、TextRNN、BiLSTM 等模型。
- brightmart/bert_language_understanding:基于 BERT 实现的中文文本分类。
- brightmart/text_classification:包含各种中文文本分类模型的实现,包括 TextCNN、TextRNN、FastText、TextRCNN、BiLSTM_Attention、DPCNN、Transformer 等模型。
- chenyuntc/PyTorchText:用于自然语言处理的 PyTorch 工具包,包含中文文本分类模型的实现。
- thunlp/THUCNews:中文文本分类数据集。
- wenet-e2e/wenet:中文文本分类模型,基于 CTC 和 Attention 等技术。
- wenet-e2e/wenet_transformer:中文文本分类模型,基于 Transformer 技术。
- wenet-e2e/wenet_bert:中文文本分类模型,基于 BERT 技术。
这些资源提供了丰富的中文文本分类模型和数据集,可以帮助您快速入门中文文本分类