介绍
文本分类——常见分类模型
kNN分类模型的主要思想:通过给定一个未标注文档d,分类系统在训练集中查找与它距离最接近的k篇相邻(相似或相同)标注文档,然后根据这k篇邻近文档的分类标注来确定文档d的类别。
普通kNN实现
一般常规的kNN计算新输入文档与训练集中样本之间的距离,都是新输入文档与每一训练集样本计算相似度。数据结构及计算过程示意图如下:
如图1所示,新输入文档将于已有训练样本的d1、d2、dm逐个计算相似度(Similarity)。一种颜色代表一次计算。
由于文本具有词稀疏性(一篇文本一般仅含有几十到几百个词组,而词的总表中词的总数可以达到几十万。),一般按照上述方法实现kNN算法,很多词语的搜索过程都是无用的,即根本搜索不到匹配的词或不用搜索。例如:新输入文本的词组t5、t10与d1、d3、dm的计算都为0,无效运算。
快速kNN实现
本篇对普通kNN算法做了一些改进,调整训练文本的数据结构,不是一次计算未标注文本与一篇训练集文本的相似度,而是一次计算未标注文本中一个词(或特征)与训练集每篇文本的该词(或特征)的相似度分量。这样可以较大降低词的搜索空间,提高分类的速度。本文将这种算法的实现叫做快速k近邻实现算法(Fast k-Nearest Neighbor,F-kNN)。F-kNN并没有改变分类算法的本质,只是改善分类速度的实现方式。
实现的数据结构及流程如下图2 所示:
图 2 顶层采用HashMap数组存放词对应的文档Map引用,文档Map中存该词在相应文档下的权重。如图2所示,一次计算将词tk所对应的所有文档相似度分量 都计算出来。例如红线所示,t1一次计算出与d1和d2等的相似度分量。
实验对比
由于kNN算法是一种“懒”学习算法,没有实质的训练学习过程。但是在本设计实验部分采用FkNN,需要转换向量空间模型,并且也需要从硬盘加载数据,为了实验公平性,将此部分作为kNN算法的训练过程。
实验说明参见:文本分类——NLV算法研究与实现
为了便于对比测试普通k近邻(kNN)与快速k近邻(FkNN)算法的训练和分类所用时间,采用数据集划分方式(2)。两种kNN实现在三种数据集上的训练和分类测试时间如图3所示。都采用卡方校验(CHI)特征选择方法从三种数据集上选择出2000维特征,k值设置成13。
分析总结
由图3可以观察到,kNN与FkNN的训练时间都非常低,而分类时间差别较大。三种语料库数据集上FkNN比kNN算法的分类时间都降低了90%以上。FkNN实现方式极大改善了k近邻分类算法的分类速度,降低了分类时间。
参考文献:
[1] Sebastiani,F. Machine learning in automated text categorization [J]. ACM Comput. Surv. 2002, 34(1): 1-47.
[2] Yang,Y.,Liu,X. A re-examination of text categorization methods [C]. In: Proceedings of the 22nd ACM Int’l Conference on Research and Development in Information Retrieval. Berkeley: ACM Press, 1999: 42-49.