关键词行业分类
Had oopEagl eEye
Feature Engineering
对于关键词分类,考虑到中文分词的准确性直接影响了最后分类效果的好坏,所以最后我们选择了利用字符组合与分词结果相结合的方案。
我们提取了4-gram的字符组合,比如对于“生日蛋糕”这样的词语,我们会提取“生日蛋糕”,“生日蛋”,“日蛋糕”,“生日”,“日蛋”,“蛋糕”,以及“生”,“日”,“蛋”,“糕”这些词语。
然后用bag-of-words向量化。
我们选取了大概180W种组合。
我们还使用了中文分词。
我们使用的分词器是开源项目IKAnalyzer。
我们不仅使用分词结果,同时还使用分词结果的组合。
比如对于词语“天津新开河街房价”这样的短语我们会提取“天津新开河街”,“天津房价”,“新开河街房价”,“天津”,“新开河街”,“房价”这样的组合。
最后也是用bag-of-words向量化,我们选取了大概570W中组合。
所以我们最后的特征维度有大约750W维
Classification
我们使用的是线性SVM分类器。
使用的解法是liblinear所提供的解法。
利用hadoop的mapreduce并行,虽然有大规模的数据(1000W*750W),但整个训练和测试过程都可以快速进行。
经过我们的测试,整个训练和测试过程都可以在1小时内完成。
Multi-class svm on had oop
对于有k个类的多分类的svm,我采用的是one-vs-rest的方案,即训练k个2分类svm,预测的时候使用分数最高的分类器结果作为最终结果。
而对于k个2分类svm,由于其训练过程相对独立,我们使用map reduce将其并行化如图:
由于每个运算节点内存有限,不能将数据文件全部读入内存。
所以我们在解SVM的同时使用了缓存技术,在内存中只缓存一部分最有用的数据进行训练。
而在测试的时候同样可以用map reduce并行化如图:。