文本分类

Posted yefan19

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本分类相关的知识,希望对你有一定的参考价值。

背景

       文本分类属于文本挖掘。文本挖掘从已知文本提取未知的知识,即从非结构的文本中提取知识。文本挖掘主要领域:搜索和信息检索;文本聚类;文本分类;Web挖掘;信息抽取;自然语言处理;概念提取。[1]

  1. 搜索和信息检索:存储和文本文档的检索,包括搜索引擎和关键字搜索。
  2. 文本聚类:使用聚类方法,对词汇,片段,段落或者文件进行分组和归类。
  3. 文本分类:对片段,段落或文件进行分组和归类,在使用数据挖掘分类方法的基础上,经过训练地标记示例模型。
  4. Web挖掘:在互联网上进行数据和文本的挖掘,并特别关注网络的规模和相互联系。
  5. 信息抽取:从非结构化文本中识别与提取有关的事实和关系;从非结构化或半结构化文本中抽取出结构化数据的过程。
  6. 自然语言处理:将言语作为一种有意义,有规则的系统符号,在底层解析和理解语言的任务。

  文本分类方法:

  一、基于模式系统。也称为专家系统,将知识以规则表达式的形式进行分类‘;

   二、基于机器学习,即广义的归纳过程,采用一组与分类的例子,通过训练简历分类,是一种自动分类的技术。

中文短文本多类分类(multi-label-class)[2]

单标签多分类概述

一、单标签二分类算法

  单标签的 label 标签取值只有两种,并且算法中只有一个需要预测的标签的label 标签,即分类算法构建一个分类线将数据划分为两个类别。

  常用算法:Logistic、SVM、KNN、决策树等。

二、单标签多分类算法

  单标签多分类:待预测的 label 只有一个,但是label 标签的取值有多个,例如,

  假设有类["酸", "甜", "苦", "辣", "香"], "这个水果点酸"(label="酸"),"这个菜看起来很香"(label="香");

  常见算法:Softmax、SVM、KNN、决策树(集成学习 ----RF(Bagging)、Boosting(Adaboost、GBDT);XGBoost)

多分类问题转换为二分类算法的延伸,即将多分类任务拆分为若 干个二分类任务求解,
具体的策略如下:

  •  One-Versus-One(ovo):一对一
  •  One-Versus-All / One-Versus-the-Rest(ova/ovr): 一对多
  •  Error Correcting Output codes(纠错码机制):多对多

1、OVO(一对一)

  原理:将K个类别中的两两类别数据进行组合,然后使用组合后的 数据训练出来一个模型,从而产生K(K-1)/2个分类器,将这些分类器的结果进行融合,并将分类器的预测结果使用多数投票的方式 输出最终的预测结果值。

技术图片

 

 2、OVR (一对多)

1、ovr与softmax的区别:
  softmax 每一次训练模型用的是整个训练数据中的某一类别的数据,从而的该类别的权重系数,通过测试集计算各个类型权
重的预测值,取最大的预测值(或者概率)的类型作为预测类型。
  ovr 每一次是代入所有的训练集数据来训练子模型,取出结果为正例的类别(多个正例取最大值)。

FastText 文本分类算法[3]

 

fasttext的命令包括: 
supervised: 训练一个监督分类器 
quantize:量化模型以减少内存使用量 
test:评估一个监督分类器 
predict:预测最有可能的标签  
predict-prob:用概率预测最可能的标签 
skipgram:训练一个 skipgram 模型 
cbow:训练一个 cbow 模型 
print-word-vectors:给定一个训练好的模型,打印出所有的单词向量 
print-sentence-vectors:给定一个训练好的模型,打印出所有的句子向量
nn:查询最近邻居 
analogies:查找所有同类词

 

 

fasttext文本分类模型

1、训练文本分类器,使用 fasttext.train_supervised 函数,如下所示:

import fasttext  model = fasttext.train_supervised(‘data.train.txt‘)

其中,data.train.txt 是一个文本文件,每行包含一个训练语句以及标签。默认情况下,我们假定标签是带有字符串 __label__ 前缀的词

 

训练好模型后,可以检索单词和标签的列表:

print(model.words) print(model.labels)

 

为评估模型的精度和召回率,使用 test 函数:

def print_results(N, p, r):     print("N " + str(N))     print("P@{} {:.3f}".format(1, p))     print("R@{} {:.3f}".format(1, r))  print_results(*model.test(‘test.txt‘))

 

也可为特定文本预测标签:

model.predict("Which baking dish is best to bake a banana bread ?")

一般地, predict 函数值返回一个标签:即概率最高的标签。也可通过指定参数 k 返回多个标签,例如:

model.predict("Which baking dish is best to bake a banana bread ?", k=3)

也可预测多个数据,可以传递一个列表,如:

model.predict(["Which baking dish is best to bake a banana bread ?", "Why not put knives in the dishwasher?"], k=3)

 

 

参考

[1] https://www.cnblogs.com/xiaochi/p/10957729.html

[2] https://blog.csdn.net/qq_16555103/article/details/89104413

[3] https://pypi.org/project/fasttext

 

以上是关于文本分类的主要内容,如果未能解决你的问题,请参考以下文章

多类文本分类:如果输入与类不匹配,则新类

机器学习—朴素贝叶斯

用pickle加速sklearn/机器学习的分类任务?

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

在片段中设置文本颜色

在片段中动态添加文本视图