Python我爱编程

词频统计分析

2018-08-09  本文已影响141人  自由01

笑粉们可能不一定读过,但一定听过一本书——《TOEFL核心词汇21天突破》。这本书是李笑来老师经常在演讲中的提及的一个例子,它一出版就是畅销书,现在仍然源源不断的创造着睡后收入。市面上的英词考试辅导书汗牛充栋,这本书有什么特别吗?那当然有——这是一本基于词频统计的单词书。《TOEFL核心词汇21天突破》中汇集了200多份TOEFL真题中出现高频词汇,让考生在准备时有的放矢,可以重点突破,而词频(Term Frequencey)统计是这本书从一般的单词书变成畅销书甚至长销书的关键。

词频统计有助于我们从大量的文本中获得洞见(insight),也是机器学习处理自然语言文本的一种基础手段。现在词频统计的手段有很多,可以利用现成软件,也可以编程实现。本文使用Python的sklearn库,重点结合实例介绍词频统计相关的概念。

词袋与N元模型

词袋(Big of words: BoW)指把一段文本分成一个个词的"袋子",然后统计每个词出现的次数,并且生成向量,而N元(N-gram)则是统计N个词的词组, N=1的N-gram等价于BoW。比如

'The quick brown fox'

进行BoW拆分后就是

'the', 'quick', 'brown', 'fox' 

这样可以统计出文本中每个词出现次数,但是BoW忽略了词序代表的信息,比如统计brown fox就比单独统计brownfox得到的信息要多,而使用N-gram则可以有效的解决这个问题。比如N=2时,N-gram就涵盖了两词的词组

'the quick', 'quick brown', 'brown fox'

N-gram可以是一个范围,取值1:2时就包含了上面所有的组合

'the', 'quick', 'brown', 'fox', 'the quick', 'quick brown', 'brown fox'

英文的词形还原

英文中一些词会在不同的情况中有不同的形态:名词有单复数,动词有时态和语态,形容词有比较级。而在自然语言处理的一些场景中,这种形态的差异是没有意义的甚至有干扰作用,需要将不同形态的词转换为其 原型 ,这种处理就称为 "词形还原(Lemmatization/Lemmatisation)" ,得到的原型被称为 "词元(Lemma)"

Several women told me I have lying eyes

经过词形还原后就是

Several woman tell me I have lie eye

经过词形还原后就可以屏蔽掉因词形不同而产生的不同组合

词频统计

Kaggle网上面有一个分析Google招聘技能的竞赛,上面收集了Google在某一时间内所有招聘职位的数据,然后看谁能分析出应聘Google职位最看重的技能。分析方法当然有很多,其中有些很复杂,但是基于词频我们就可以快速获得一些洞见。

我们使用N-grame来分析Responsibilities中的高频词组,N-gram取值为1:4,也就是说分析1词到4词词组的情况。注意因为做了词形还原,分析结果中显示的是词元,与原文可能会有些许差别。排名前50个词大部分为单词,用wordcloud画出图后就是

列表观察,team, product, google, business和custome等词名列前茅。Google应该是个很重视团队和产品的公司,与我们的印象基本一致。

如果观察两词及以上词组的情况,google cloud, cross functional, business growth等高频词组说明了Google cloud相关的职位很多,侧面也说明了Google cloud是目前Google正在发力的一个方向,很多职位要求应聘者最好是多面手(cross functional),能够直接贡献增长率(busniess growth)

TF-IDF统计

TF-IDF(term frequency–inverse document frequency)是一种用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在资料库中出现的频率成反比下降。

我们也同样来分析职责中的词组的tf-idf情况,相比单纯分析词频,google, product, customer的排名更靠前

如果看两词以上词组,Google Cloud仍然排第一,可见其重要性。Project determin是来源于这句话"projects will be determined based on your educational background, interest and skills",就是说很多职位可以根据应聘者的特点灵活调整职责范围,反映出Google中工作职责灵活这一特点

本文中使用的代码在GitHub中,真正用于统计的代码不超过100行,看懂后用起来非常方便。你有兴趣也可以试一试,说不定这也会让你像笑来老师一样发现一个机会,甚至写出一本长销书来。

上一篇下一篇

猜你喜欢

热点阅读