必威体育Betway必威体育官网
当前位置:首页 > IT技术

文本分析算法简单介绍-1

时间:2019-07-19 04:11:07来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

文本分析

以下内容是基于李博《机器学习实践应用》,邹博小象学院《机器学习课程》以及李航书籍《统计学习方法》加上自己的理解提炼而成

文本分析算法大致可以分成3种方法:机械分词,统计分词和机器学习分词。

1)机械分词:机械分词就是从一个很大的词库种找出匹配的词语,将其筛选出来。该方法实现非常简单,但是有一些问题:效率问题,因为要遍历一边词库,所以复杂度将会是O(m * n),m代表的是文档中文字的数量,n是词库的数量。往往词库的数量都非常大,这样就会导致分词的效率低下。另一个问题就是会出现语意的分歧,比如词库里有“中国”“中国人”,那么当在遍历含有“中国人”的文章时,当先遍历到中国这个词时,会发生分词错误的情况。

2)统计分词:统计分词就是简单的基于概率的分词,思想就是从海量文本中找出频率很高的几个字。比如“小红买了个鸡蛋,他爸爸说你买的鸡蛋真大”。这里“鸡”,“蛋”同时出现的概率大,所以就能够把这个词语挑出来。这种分词的好处:对新的词语的感知能力强

3)机器学习分词:这类分词是基于人工标注的词性和统计特征对中文进行建模,实际的分词过程其实就变成了对结果的预测过程,通过计算没中分词的可能性概率大小进行哦分词并且得到最终结果。比较常见的就是隐马尔可夫模型hidden Markev Model, HMM韩梅梅模型),以及条件随机场(conditional Random field, CRF)算法。

                       

HMM模型介绍,隐马尔可夫模型的“隐”这个词是什么意思呢,就是代表隐变量的意思。我们通过一个经典的例子来解释:假如一个人A,根据基于天气状况来安排自己的活动,A有三种活动“散步”,“购物”和“清理房间”。怎么观察A天天在干嘛呢,A有个习惯,会通过发新浪微博来记录自己每天做的事情。虽然我们不知道A所在的城市的天气状况,但是可以通过他的活动来推理A所在城市每天的天气,因为之前说过A会根据基于天气状况来安排自己的活动。比如说如果这一天是雨天,那么A出门散步的概率就不会很大。因此,在这个案例中天气状况就是我们要预测的“隐”信息,这里边的天气和A活动间的关系就能够通过状态概率矩阵来表示,HMM就是这样一个通过概率模型训练的机器学习算法。

隐马尔可夫模型主要解决三种基本问题:评估问题,解码问题和学习问题。我们可以把HMM输入分为以下五元组,InitStatus(初始状态集合), StatusSet(状态值集合), ObservedSet(观察值集合), TransProbMatrix(转移概率集合), EmitProbMatrix(发射概率矩阵)。本文讲的是分词,该功能本质上是一种解码问题,该问题本质上是寻找最优的隐状态序列,通常是利用Viterbi算法来求解,该算法已知 InitStatus(初始状态集合), ObservedSet(观察值集合), TransProbMatrix(转移概率集合), EmitProbMatrix(发射概率矩阵)求解 StatusSet(状态值集合)。

下面我们来讲讲具体的算法推倒过程是咋样的吧,举个栗子:

假设我们观察到一个人,我们叫他B,他有三种状态分别是笑,无表情和哭,通过观察他的表情推测他的隐含状态:高兴或者不高兴。

已知:

初始状态,InitStatus = {高兴:0.6,不高兴:0.4}

隐含的心情状态,StatusSet = {高兴,不高兴}

观察到的状态,ObservedSet = {笑,无表情,哭}

转移概率矩阵,TransProbMatrix = [[0.6, 0.4], [0.7, 0.3]],具体的含义是高兴->不高兴的概率P(不高兴|高兴)=0.4,高兴->高兴的概率是P(高兴|高兴) = 0.6,不高兴->高兴的概率是P(高兴|不高兴)=0.7,不高兴->不高兴的概率P(不高兴|不高兴)=0.3

在相应心情状况下的表情概率,EmitProbMatrix = ([0.6, 0.3, 0.1], [0.2, 0.2, 0.6]),这个矩阵的具体含义是概率矩阵{高兴:P(笑)=0.6,P(无表情)=0.3,P(哭)=0.1,不高兴:P(笑)=0.2,P(无表情)=0.2,P(哭)=0.6}

以及 B最近三天的表情是 笑,无表情和哭

求解:

B这三天的心情是怎样的    

第一天的心情为:

P(高兴) = P(笑|高兴) * P(高兴|初始状态) = 0.6 * 0.6 = 0.36

P(不高兴) = P(笑|不高兴) * P(不高兴|初始状态) = 0.2 * 0.14 = 0.08

因为 P(高兴) > P(不高兴),所以第一天的心情是高兴的可能性较大。

第二天的心情为:

P(前一天高兴,今天高兴) = P(前一天高兴) * P(高兴->高兴) * P(无表情|高兴) = 0.36 * 0.6 * 0.3 = 0.0648

P(前一天高兴,今天不高兴) = P(前一天高兴) * P(高兴->不高兴) * P(无表情|不高兴) = 0.36 * 0.4 * 0.2 = 0.0288

P(前一天不高兴,今天高兴) = P(前一天不高兴) * P(不高兴->高兴) * P(无表情|高兴) = 0.08 * 0.7 * 0.3 = 0.0168

P(前一天不高兴,今天不高兴) = P(前一天不高兴) * P(不高兴->不高兴) * P(无表情|不高兴) = 0.08 * 0.3 * 0.2 = 0.0048

max 为 今天高兴,所以推测今天高兴

第三天心情的推导也一样。。

对于HMM应用到分词,可以这样玩:

假设要对这句话进行分词:李雷是中国人

把这句话的每一个字看成一个状态,ObservedSet = {李,磊,是,中,国,人}。有了观察状态,我们需要挖掘隐藏状态,其实对分词这样的场景来讲,只要可以抓住每个词的开头和结尾的字就可以把词语区分出来。因此,我们可以将其隐含状态设为 {B: begin, M: middle, E: end,S: single},B代表词语的开头,M代表词语的中间,E代表词语的结束,S代表单个字的词

我们只要在 状态为E,S的地方做一个分词,这样就能够对一篇文章做分词了。

那么,输入的矩阵是怎么来的呢?

输入矩阵需要通过获取到海量的做过标记的文章来生成,比如对某一篇文章的一句话我们可以这样标记:

“一个张口闭口肿胀的男人,多像一只昼夜不息发情的公猫。”

BEBMMEBESBE,BEBEBMMEBESBE

首先,         初始状态(InitStatus)是咋来的呢,通过统计海量文章的每句话的第一个字的状态获得初始专题矩阵

接下来,      隐含的状态(StatusSet)就是 {B,M,E,S}

再接下来,   观察到的状态(ObservedStatus)就是 {所有汉字}

再再接下来,转移矩阵(TransProbMatrix)是咋来的呢,是通过统计海量文章每个字的转移前的状态到新的状态就能够得到

比如对之前的句子:

“一个张口闭口肿胀的男人,多像一只昼夜不息发情的公猫。”

BEBMMEBESBE,BEBEBMMEBESBE

这样我们就可以得到状态转移矩阵:

  通过频率估算概率,这样就能够得到状态转移矩阵了。

so,分词的办法和之前的心情和表情那种办法一样,就能够搞出来分词的结果了

常见的分词系统有中科院的ICTCLAS,哈工大的ltp,东北大学的NIU parser以及jieba分词

现在介绍如何对文本文件进行打标,当我们打开一篇关于足球比赛的新闻的时候,往往可以看到在新闻的正文前面会有“体育”,“足球”这样的标签,这样有足浴人们对文章进行分类。对于打标,有一种自动打标的算法TF-IDF。

词频-逆向文件频率(TF-IDF)是我们常说文本的打标。什么是文本打标,就是找出最能代表这个文本意义的一些词语,这里涉及两方面:

1. 打标词语要足够多

2. 标记个性词语,不要 非个性词语如 “的”“是”这样的。

TF-IDF公式如下:

TF(t, d) = |t|/|d| TF代表单个词在对应的文章中出现的频率

   IDF(t, D) = log(|D|/|{d ∈ D: t ∈ d}|) IDF表示出现某个词语t的文章占到总文章集合的百分比

     TF-IDF(t, d, D) = TF(t, d) * IDF(t, D),

因此tf-idf值越高,越能够作为文章的标签。我们来看看这个公式是如何满足打标的第二方面的,

当 |D|/|{d ∈ D: t ∈ d}| 接近为 1时,log( |D|/|{d ∈ D: t ∈ d}| ) = 0,那么tf-idf为0

当 |D|/|{d ∈ D: t ∈ d}| 大于1,且比较大时,log( |D|/|{d ∈ D: t ∈ d}| ) 也大,那么tf-idf值变大

这样就不难从公式中理解,当一个词语在所有文章中都有出现,那么log( |D|/|{d ∈ D: t ∈ d}| ) 就为0,当一个词语在某一个文章出现的很厉害,那么log( |D|/|{d ∈ D: t ∈ d}| ) 就比较大,这样不就能够满足第二方面了吗。

接下来会讲讲LDA,敬请期待

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读