THUCTC: 一个高效的中文文本分类工具包

项目介绍
THUCTC(THU Chinese Text Classification)是由清华大学自然语言处理实验室推出的中文文本分类工具包,能够自动高效地实现用户自定义的文本分类语料的训练、评测、分类功能。文本文类通常包括特征选取、特征降维、分类模型学习三个步骤。如何选取合适的文本特征并进行降维,是中文文本分类的挑战性问题。我组根据多年在中文文本分类的研究经验,在THUCTC中选取二字串bigram作为特征单元,特征降维方法为Chi-square,权重计算方法为tfidf,分类模型使用的是LibSVM或LibLinear。THUCTC对于开放领域的长文本具有良好的普适性,不依赖于任何中文分词工具的性能,具有准确率高、测试速度快的优点。

使用方法
我们提供了两种方式运行工具包:

使用java开发工具,例如eclipse,将包括lib\THUCTC_java_v1.jar在内的lib文件夹下的包导入自己的工程中,仿照Demo.java程序调用函数即可。

使用根目录下的THUCTC_java_v1_run.jar运行工具包。

使用命令 java -jar THUCTC_java_v1_run.jar + 程序参数

运行参数

[-c CATEGORY_LIST_FILE_PATH] 从文件中读入类别信息。该文件中每行包含且仅包含一个类别名称。
[-train TRAIN_PATH] 进行训练,并设置训练语料文件夹路径。该文件夹下每个子文件夹的名称都对应一个类别名称,内含属于该类别的训练语料。若不设置,则不进行训练。
[-test EVAL_PATH] 进行评测,并设置评测语料文件夹路径。该文件夹下每个子文件夹的名称都对应一个类别名称,内含属于该类别的评测语料。若不设置,则不进行评测。也可以使用-eval。
[-classify FILE_PATH] 对一个文件进行分类。
[-n topN] 设置返回候选分类数,按得分大小排序。默认为1,即只返回最可能的分类。
[-svm libsvm or liblinear] 选择使用libsvm还是liblinear进行训练和测试,默认使用liblinear。
[-l LOAD_MODEL_PATH] 设置读取模型路径。
[-s SAVE_MODEL_PATH] 设置保存模型路径。
[-f FEATURE_SIZE] 设置保留特征数目,默认为5000。
[-d1 RATIO] 设置训练集占总文件数比例,默认为0.8。
[-d2 RATIO] 设置测试集占总文件数比例,默认为0.2。
[-e ENCODING] 设置训练及测试文件编码,默认为UTF-8。
[-filter SUFFIX] 设置文件后缀过滤。例如设置“-filter .txt”,则训练和测试时仅考虑文件名后缀为.txt的文件。
样例程序
我们随工具包提供了一个调用THUCTC的样例代码Demo.java,其中实现了三种功能:

对文本进行训练并测试(runTrainAndTest);
读取已经训练好的模型,对文件进行分类(runLoadModelAndUse);
按照自己的想法添加训练文件,训练模型(AddFilesManuallyAndTrain);
BasicTextClassifier类接口说明

BasicTextClassifier 是系统的入口类,提供多种设置接口供使用者调用。利用此入口类可以从文件中读入别信息、设置训练语料路径、设置训练参数以及模型保存路径等。

其中常用的类成员函数包括:

public void Init(String[] args)

功能:输入运行参数,初始化系统。

public void runAsBigramChineseTextClassifier()

功能:根据参数,运行系统。

public boolean loadCategoryListFromFile(String filePath)

功能:从文件中获取分类列表,等同于参数-c filePath

public boolean loadCategoryListFromFolder(String folder)

功能:从文件夹中获取分类列表

public void addTrainingText(String category, String filename)

功能:给定类别,添加训练文本

public void addfiles(String filename)

功能:根据训练文件所在的文件夹名称,自动判别类别并加入训练,等同于参数-train filename

public ClassifyResult[] classifyFile(String filepath, int topN)

功能:对一个文件进行分类,返回前 topN 个分类结果。如果输入的 filepath 是文件夹,则只会在 Console 中打印每个子文件的分类结果,返回值是空数组,等同于参数-classify filepath -n topN

public ClassifyResult[] classifyText(String text, int topN)

功能:对一个文本进行分类,返回前 topN 个分类结果

public void testfiles(String filename)

功能:对文件进行自动分类测试,等同于参数-test filename

public double getPrecision()

功能:获得测试准确率

项目地址:http://thuctc.thunlp.org/

Related posts

Leave a Comment