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

文本分析算法大致可以分成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,敬请期待

文本分析算法简单介绍-1相关推荐

  1. 文本处理工具简单介绍

    文本处理工具简单介绍 1.文本文件查看 分页查看more,less 显示文本前面或后面的行内容 head 显示文件或标准输入的前面行 tail 与 head 相反 抽取文本cut 合并文件 2.分析文 ...

  2. Karplus-Strong 算法简单介绍和实现

    Karplus-Strong 算法简单介绍和实现 本文为Coursera数字信号处理课程第一周内容,对相关课程刚兴趣的同学,请参看这里 为了有更好的交互性,本文所有代码均上传至Microsoft Az ...

  3. 【转载】Relief 特征选择算法简单介绍

    Relief 特征选择算法简单介绍 原创 2017年03月11日 16:56:11 标签: 机器学习 4279 相关文章  特征选择  LVW(Las Vegas Wrapper)特征选择算法简单介绍 ...

  4. 用文本分析算法探索20个新闻组数据集

    什么是NLP 20个新闻组数据集,顾名思义,由从新闻文章抽取的文本组成.它是由Ken Lang采集的,广泛用于机器学习技术驱动的文本类应用的实验,尤其是用自然语言处理技术开发文本类应用. 自然语言处理 ...

  5. 垃圾回收算法简单介绍——JVM读书笔记lt;二gt;

    垃圾回收的过程主要包含两部分:找出已死去的对象.移除已死去的对象. 确定哪些对象存活有两种方式:引用计数算法.可达性分析算法. 方案一:引用计数算法 给对象中加入一个引用计数器.每当有一个地方引用它时 ...

  6. LRU(Least Recently Used)算法简单介绍

    文章目录 LRU算法简介 使用场景 简单实现 简单介绍 LRU算法简介 LRU英文翻译过来就是least recently used,字面意思就是最近最少使用,说白了就是一种淘汰算法,当有新的元素插入 ...

  7. 灰色关联分析的简单介绍以及使用

    灰色关联分析概述 在许多问题分析当中,哪些是主要因素,哪些是次要因素,哪些因素对发展影响较大,这些都是系统分析中都是人们普遍关心的问题 灰色关联分析的优势 无论样本量的多少和样本有无规律都可以适用 计 ...

  8. 朴素贝叶斯——最适合简单的文本分析算法

    一.朴素贝叶斯核心思想 首先我将举个例子以便理解.假设我收到一封邮件,内容描述如下:您提交的3215号工单:来自李先生的留言.请点击链接查看工单处理进度:https://tingyun.kf5.com ...

  9. 【机器学习PAI实践七】文本分析算法实现新闻自动分类

    一.背景 新闻分类是文本挖掘领域较为常见的场景.目前很多媒体或是内容生产商对于新闻这种文本的分类常常采用人肉打标的方式,消耗了大量的人力资源.本文尝试通过智能的文本挖掘算法对于新闻文本进行分类.无需任 ...

最新文章

  1. python神经网络原理pdf_《深度学习原理与 TensorFlow实践》高清完整PDF版 下载
  2. IPv6新形势下的安全解决方案
  3. matlab narxnet,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
  4. 【SQLSERVER】SQL SERVER 2008筛选表报错
  5. [学习笔记]Javascript可选的分号
  6. 拉格朗日中值定理ξ怎么求_微分学核心定理——中值定理
  7. linux启动 mongo 不了问题
  8. caffe的protocol buffer使用例子
  9. linux内存管理初始化
  10. ODIN SNN处理器
  11. 位运算4 起床困难综合症
  12. 芝加哥大学校长:诺贝尔奖人才是怎样炼成的?
  13. List接口(ArrayList集合和LinkedList集合)
  14. 本周最新文献速递20220306
  15. 今天是 Java 诞生日,Java 24 岁了!
  16. Hue 之 SparkSql interpreters的配置及使用
  17. 【计算几何7】帝国边界划分问题【Voronoi图的原理】
  18. 彻底解决不要脸的360更改浏览器主页
  19. 未越狱iphone与 Android短信备份迁移攻略
  20. 模糊综合评判法实现学生互评

热门文章

  1. 2023年天津美术学院油画(表现)考研上岸前辈备考经验
  2. python怎么画地球绕太阳转_如何利用Python动态模拟太阳系运转
  3. CANoe/capl开发注意事项:子函数的变量声明,要单独初始化
  4. 基于子空间的OFDM系统盲信道估计附matlab代码
  5. linkage_mapper安装包+用户手册分享
  6. windows 命令行拷贝文件夹
  7. 携手共赢 决胜2021——芯讯通全球合作伙伴大会
  8. 【Excel】日期格式
  9. 工艺路线和工序有差别吗_你知道吗?市政道路排水工程的主要工序施工工艺是什么...
  10. 互联网家装元年,土巴兔能否成为阿里、国美们做家装的风向标?