NLP文本分类——豆瓣图书分类实践

文章大纲:
1.从0到1分类系统搭建流程介绍
2.相关技术背景和知识原理
3.分类测评结果

前言

有一段时间没有重新写文章了,这次主要写的内容是自己刚入门的机器学习领域中的文本分类。起初做这个的目的是考虑到一个问题,就是当我想去学习一个新的领域的知识或者尝试了解一些不同方向的东西时,我都需要去寻找这一领域的入门的资料或者书籍(途径之一,不绝对)。那我第一的想法就是去询问这一方面的朋友或者网络上查找有什么这一块入门的书籍推荐。所以想尝试通过大数据训练的方式来完成这个分类和筛选。

新手入门,如果有技术上的错误或者更正的地方,请多多指教。文章中说的大部分模块都放在了我的Github页面上,欢迎各种star和交流,提出issue等,非常感谢。

分类系统流程图

豆瓣图书分类系统

总结了一下整个工作的过程,然后用导图的形式给出来。

稍微的解释一下,第一部分我需要去豆瓣上抓取书籍数据,这里我抓取了书籍的基本信息和书籍的评论(根据书籍的受欢迎程度不同,有的书几百条,有的书有10万条),这里主要依靠的是免费髙匿代理IP框架来进行网络请求,因为目标网站反爬虫的原因,所以需要源源不断有新鲜的IP血液。针对豆瓣图书我已经编写好了爬虫规则,同时对里面的异常做了处理还有详细的日志,感兴趣数据抓取部分的可以移步这里,为了以后方便使用将数据存储在MongoDB中

第二部分就是数据的一些预处理阶段,需要对数据进行分词,使用了比较流行的中文分词的Python库jieba分词,之后清洗的阶段就需要对词进行一些过滤,把没用的词汇给剔除出去。

第三部分训练前的准备,就是需要对训练和测试集进行划分,我是把整个数据集中拿出40%作为测试集,这个比例你可以自己定义,我是大概规定了,没有什么学术的依据。然后进入比较重要的一步,就是特征降维和特征选择,其实特征的选择目的一个是为了达到特征降维的目的,还有就是可以将有效的或者其关键作用的特征筛选出来,提高分类器的效果和效率。

常用的特征选择函数有图中的几种,我在下面会具体介绍。这次也是使用了图中的那些来进行测试,选择效果最好的一种来为分类器做准备。

第四部分就是开始训练了,训练的时候就是将我们的训练数据和分类标签给到分类器,它就会开始训练了。这里拿了四个分类器进行测试,然后这里我测试的时候是直接一次性训练完成的。那么在实际的应用中可能需要使用增量学习,因为数据在不断的变化和更替,而且一次性训练过大的数据也不能达到memory-friendly的要求。

第五部分就是对结果进行评估,看看准确率、召回率、F值等。

技术背景

互信息(Mutual Information)

互信息(Mutual Information)衡量的是某个词和类别之间的统计独立关系,某个词t和某个类别Ci传统的互信息定义如下:互信息是计算语言学模型分析的常用方法,它度量两个对象之间的相互性。在过滤问题中用于度量特征对于主题的区分度。

信息增益方法(Information Gain)

信息增益方法是机器学习的常用方法,在过滤问题中用于度量已知一个特征是否出现于某主题相关文本中对于该主题预测有多少信息。通过计算信息增益可以得到那些在正例样本中出现频率高而在反例样本中出现频率低的特征,以及那些在反例样本中出现频率高而在正例样本中出现频率低的特征。信息增益G(w)的训算公式如下:其中P(w)是词w出现的概率,P(Ci)是取第i个目录时的概率,P(Ci|w) 是假定w出现时取第i个目录的概率。

TF-IDF

其中TF 称为词频,用于计算该词描述文档内容的能力。IDF 称为反文档频率,用于计算该词区分文档的能力。TF-IDF法是以特征词在文档d中出现的次数与包含该特征词的文档数之比作为该词的权重,即其中,Wi表示第i个特征词的权重,TFi(t,d)表示词t在文档d中的出现频率,N表示总的文档数,DF(t)表示包含t的文档数。用TF-IDF算法来计算特征词的权重值是表示当一个词在这篇文档中出现的频率越高,同时在其他文档中出现的次数越少,则表明该词对于表示这篇文档的区分能力越强,所以其权重值就应该越大。

word2vec词向量

一种最简单的词向量是one-hot representation,就是用一个很长的向量来表示一个词,向量的长度是词典D的大小N,向量的分量只有一个为1,其他全为0,1的位置对应该词在词典中的索引。这种词向量表示有一些缺点:容易受维数灾难的困扰。另一种词向量是Distributed Representation,它最早是Hinton于1986年提出来的,可以克服one-hot representation的上述缺点。其基本想法是:通过训练将某种语言中的每个词映射成一个固定长度的短向量。所有这些向量构成一个词向量空间,每个向量是该空间中的一个点,在这个空间上引入距离,就可以根据词之间的距离来判断它们之间的(词法、语义上的)相似性了。如何获取Distributed Representation的词向量呢?有很多不同的模型可以用来估计词向量,包括有名的LSA、LDA和神经网络算法。Word2Vec就是使用度比较广的一个神经网络算法实现的词向量计算工具。

各种分类器

篇幅有限,请翻阅周志华的《机器学习》西瓜书或者网上查阅相关理论。
这里链接一篇朴素贝叶斯的
算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

测评结果

这里我使用了pycharm为我的IDE,然后分别选取了200本入门书籍和200本非入门书籍进行测试。

先将各个特征选择的选择结果大概放出来看一下,有个直观的印象。


WLLR特征选择前10位特征
MI特征选择前10位特征
IG特征选择前10位特征
word2vec特征选择前10位特征

从这里可以看出特征选择上,word2vec的优势,在于能够更好的理解语义,不仅从概率上来选择。避免了低频词和部分文档信息的丢失。

WLLR特征选择下的四种分类器测评结果
MI特征选择下的四种分类器测评结果
IG特征选择下的四种分类器测评结果
词向量特征选择下的四种分类器测评结果

结论:WLLR和word2vec下的MultinomialNB分类器效果最接近。

最后我在项目中,还是使用了词向量模型,主要是觉得它更能理解语义,相信通过对模型的优化和调参(没错,我就是网友戏称的调参民工!)能够在这一块提高准确率。

使用300本入门和300本非入门,然后进行简单的词向量模型的调参之后的结果。

WLLR和词向量的对比

还是有一点变化的,词向量的特征选择出来的分类器结果有了一些改变。

最后提一下,我使用的机器学习库是Python的scikit-learn,然后在github上也训练了一个word2vec词向量中文模型,使用的是搜狗全网新闻语料(70多万词汇)。可以下载下来直接尝试一下词向量语义理解能力的强大

参考文献:
文本数据的机器学习自动分类方法(上)
文本数据的机器学习自动分类方法(下)
强烈推荐上面两篇infoQ的文章,我就是从这里入门了解整个文本分类的过程和工作的。那对于这一块还有很多相关的知识和理论不了解,所以没有形成很好的对比和实践。如果有更好的解决方案,请告诉我一起来完成。谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容