虽然没有做过考试题分类,但从描述看起来像是个文本主题多分类的问题。偶提供一下的一些思路,效果因为也没有尝试过,所以偶也不确定是否好。
首先第一步,分类之前肯定是需要提取特征的,也就是把你的考试题向量化。向量化有以下几种方法。
1. 自己设置特征,比如设置中英文字数,数字的字数,自己设置一些名词,名词出现的频率等,这些特征你自己设置,最后可以转换成向量
2. 词袋模型,用TF*IDF表示,具体可以搜一下什么是TF*IDF
3. word embedding模型,该模型结合了语义信息,比如用word2vec这种可以表示每个单词的语义向量,整个文档的语义可以每个单词加起来,或者直接用doc2vec,python的gensim有api,可以直接实现,但是推荐了解下原理。
上面3个方法,都能把一道题转换成一段向量,这样就相当于向量的多标签分类问题了。
分类方法:
1. 可以当成0/1分类问题,即假设有5个分类ABCDE,你分别训练5个模型,判断该向量是否属于这个分类。这种2分类的方法有很多,效果比较好的,可以直接丢进去的有随机森林,逻辑回归,svm
2. 设置一个阈值,直接搞。假设考试题A的向量表示是X, 对应的标签是分类B和C(有ABCDE5类),那最终的结果向量就是0 1 1 0 0 ,把向量丢到神经网络里,最后连个softmax,输出每个分类的概率,比如是0.1 0.6 0.8 0.4 0.3, 超过0.5的你就认识是该分类,来训练。
3. 比较推荐用RNN(lstm/gru都可以)训练,RNN对这种类型的效果一般都还可以,而且可以适应不同长度的输入,不用固定成多少维的向量。方法是用word2vec,把考试题的每个单词向量化了,然后丢到RNN里面(如果题目很长,考虑加入attention机制,cell选择lstm或者GRU),输出的结果接一个sigmoid,就是方法1中的0/1分类问题,如果接个softmax,就是方法2中的设置阈值
4. 可以尝试下topic model,比如LDA主题模型。看看每个分类的topic words是什么,然后直接关键字搜索。比如都是分类A的考试题,提取topic word,以此类推。把这些topic word结合特征1做个分类,但是目测效果随数据集会有很大变化
大致想到了以上的方法,未经试验,仅供参考