问题描述
最近要开发一个文章的地域分类器用于本地化推荐。简单地说,就是给定一篇文章,判断这篇文章属于以下哪个地域(或者不属于任何地域):
大连、福州、成都、重庆、东莞、佛山、南京、哈尔滨、杭州、济南、青岛、厦门、深圳、沈阳、苏州、天津、温州、武汉、西安、郑州
首先google之,避免重复造轮子,然而并没有找到相关的开源工具(也可能是我没找到),那就决定自己动手了。
方案设计
由于之前一直有听说google的word2vec,却从没有用过;故而这次想基于word2vec来表征单词和文章。因为相比于tfidf的one-hot表征,word2vec能挖掘词与词之间的相似度(基于上下文)。就像word2vec项目首页所描述的那样:
vector(‘Paris’) - vector(‘France’) + vector(‘Italy’) 与 vector(‘Rome’)非常接近
尽管我觉得这种关系可能带来某种副作用,比如两个很相似的城市(e.g. 北京和天津)可能会难以被区分;但是这个模型所带来的增益应该会大于这个不足。
word2vec是将每个词映射成一个向量,所以在此之前,还需要将文章进行分词,我使用的是jieba分词。然而一篇文章 Dk 由不定长的词集合构成 {
wi}|Dk|i=1 ,假设每个词由 d 维的向量表示,这样用一个定长的向量来表示文档
- mean pooling
- max pooling
- bag of words
- Fisher
- Aggregating local descriptors into a compact image representation
这里,我使用最简单的mean pooling,即