浅谈我对机器学习和文本挖掘的新的理解

转眼间已经工作了一段时间了,回想起2014年初学机器学习时的付出、艰苦和努力,感觉都是值得的。从现在往前看,我是沿着“计算机->统计学->数据分析->数据挖掘->机器学习->文本挖掘”的路径走过来的,我觉得这个思路还是属于比较传统的进阶方法,学习的内容有不少的冗余,但相对来说更稳健一些。今天写这篇文章的目的是想总结一下我最近关于文本挖掘的工作体会以及我对机器学习的一些新的看法,只为探讨,还望与大家共勉。

我先来说一些文本挖掘的东西。似乎大家做Text Mining的不太多,可能并不太感冒,我就大体说一下我对Text Mining的理解吧(我觉得不管做哪一种数据挖掘,方法和思路应该都是相通的,您试着看一下,说不定会有些启发)。

文本挖掘,顾名思义,就是挖掘本文信息中潜在的有价值的信息。文本数据与数值数据的区别有三:第一,非结构化且数据量大;第二,它与人的语言是对接的;第三,文字的含义不唯一。下面我稍微展开来说。

首先,文本数据的数据量是非常之巨大的,一百万条结构化数据可能才几十到几百兆,而一百万条文本数据就已经是GB了。当然文本数据的数据量无法与每天的log数据相比,但在基础数据中算是占比很大的数据类型了。大数据容量的数据和大数据条目的数据处理方式完全不一样,普通的机器甚至都无法按条处理;其次呢,文本数据是非结构化数据。非结构化意味着没有任何的列可供你定义和参考。举个例子来说:如果我们想要提取用户登录的行为数据,只要提取用户的id、登录时间、行为时间、行为内容之类的数据就可以很完整的表达用户的行为;但对于文本数据却没法这么做,比如:“今天的天真好啊!”,提什么呢?当然可以提出这句话的主语等句法结构来,但那已经是挖掘之后的结果了,而不是挖掘以前的原始提取。

第二点是最重要的,就是文本数据与人的思想直接对接。如果我获取一对情侣的短信数据,男生对女生发“我爱你”的次数和时间能直接反应男生对女生的态度。比如,男生总在对女生嘘寒问暖之后说一句“我爱你”,并且一个月内经常说,可能代表男生真的很喜欢这个女孩;而如果男生每次说我爱你之后对女生各种不耐烦或敷衍,那么这个男生可能与女生有些间隙了。当然,我只是举了个例子,不过却能证明文本挖掘也许这能挖掘出人的真实的态度。

第三点是文字的含义是不唯一的。这也是文本挖掘最大的难题所在。“你吃饭吗?”——“我也不知道”,请问这个到底是想吃饭还是不想吃饭?当然,这个需要从上下文去解读,但是在没有上下文的时候也会出现这两句话的(比如我们在宿舍)。如果按我们人的理解,大多数情况下,是这个人不太想吃饭,但可能出于某种原因(比如跟朋友一起去吃或者完了就没饭了)而又想去吃。反正根据我自己的经验,一般说不知道的最后都去吃饭了……那么,如何让计算机去理解这样的句子呢?目前来说,还是比较难的。

这是文本数据与数值数据最大的区别,就是难以量化。

那么对于难以量化的数据该怎么处理呢?

方法就是数据挖掘中的“数据转换”。

我们最终的目的是要量化一段文本(比如文本主题是哪一类、文本是什么态度等等),可以通过把文本转换成其他数据结构的数据,然后再根据该结构的类型判断数据的类别。比如我们把文本中能表达含义的基本单位“词”组织成词典,然后判断词典的类别,我们就知道文本的类别了。举个例子:“我喜欢刘亦菲”,分词之后通过代词词典知道“我”是一个代词,用当前用户的id替换掉代词,比如我的id是“小袁”,那么这句话就变成了“小袁喜欢刘亦菲”,再通过正向谓词词典知道“喜欢”是一个正向谓词,而刘亦菲是一个专有名词,那么当我们想要知道在所有用户中喜欢刘亦菲的有谁时,可以输出“小袁”。这在舆情分析和热点分析中的作用是非常大的。

当然,上面的方法只是一个例子,且不具有实用性。因为建立词典的代价是非常大的,更何况上面的例子还需要很多个词典,并且词典也很难包含所有的词。所以,好多人就想出了一些新的方法,我在这里就不一一列举了。

当我们能够量化文本了之后,我们就可以抽取文本信息了。比如,我想知道近一个月的热门电影有哪些,我们就可以抽取出最近一个月的影评数据,然后抽取评论信息中的主语和宾语,通过自然语言处理方法进行消岐和消除指代后就可以找到文本的命名实体,通过对找到的实体进行聚类就能找到热门电影有哪些了。

那么机器学习在文本挖掘中有哪些应用呢?

(1)话题识别

话题识别属于文本分类,实验中常见的例子就是把新闻文本分类成“财经、教育、体育、娱乐”等等。我目前常用的方法主要是“word2vector”和“word to bags”。 word2vector即“词向量”,通过计算文本中词出现的位置、词性和频率等特征,判断新文本是否来自于此类。比如识别文字是评论性文本还是新闻类文本的一种方案就是评论性语句中出现的情态动词和感叹词比较多且位置不固定。“word to bags”是词袋,在topic model中应用的比较多。“word to bags”计算每个词出现在每个类别的概率,然后通过TF-IDF或者信息增益或者概率找到类别信息含量高的词语,通过判断这些词语的共线程度进行文本分类。

(2)情感分类

情感分析就是用户的态度分析。现在大多数情感分析系统都是对文本进行“正负二项分类的”,即只判断文本是正向还是负向的,有的系统也能做到三分类(中立)。比如,我要分析用户对2013年“马航370事件”的态度,只要找到该事件的话题文本,通过台大情感词典等工具判断情感词的极性,然后根据一定规则组合情感词的频度和程度即可判断文本的情感。但这种方法无法判断文本的评价刻面。比如,我现在有一百万条“小米手机评价”信息,我可以通过上面的方法了解大约有百分之多少的用户对小米手机是不满意的,但却无法知道这些不满意的用户是对小米手机的哪一个方面不满意以及占的比率(比如是外形还是性能)。常用的方法是构建小米手机相关词的种子词典,通过词典找到用户评论的刻面,再构建句法树找到评论该刻面的谓语和修饰副词,通过情感词典量化出情感极性,最后将量化后的评论刻面、修饰词、程度副词带入SVM进行文本分类。不过在这里并不适合使用naive bayes,因为在多刻面多分类中,naive bayes很容易出现过拟合。

(3)命名实体识别

所谓的命名实体识别是指让计算机自动识别出自己不认识的词。比如:“胡歌唱歌非常好听!”,计算机如何才能知道“胡歌”是一个词而不应该是“歌唱”是一个词呢?“胡歌”这个词对于绝大多数词库而言都不太可能存在,那么怎么能让机器识别出这个词并且以最大的可能认为这个词是正确的呢?我认为在所有的方法中,CRF的效果最好,甚至比HMM要好得多。CRF又称条件随机场,它能够记录训练数据中每个特征的状态及其周围特征的状态,当多个特征同时出现的时候,找出每个特征在多个特征组合中最有可能出现的状态。也就是说,CRF以“物以类聚”为基本论点,即大多数词出现的环境是有规律的,并不是杂乱无章的。选取特征的时候,以“字”为单位明显要比以“词”为单位好很多,因为命名实体的词是以字为单位才能理解的,比如“陈小春”,我们是以“陈/小/春”的意思来理解的,而不是“陈/小春”或者“陈小/春”。

(4)推荐系统

文本挖掘在推荐系统中的价值在于特征词权重的计算。比如我们给用户推荐一本新书。我们可以按照下面的方式进行建模:首先找到用户评论中关于书籍的所有特征词汇,建立特征词典;然后通过文本分析和时间序列分析结合用户评论的内容和时间紧凑度计算特征词的权重,表示某个用户关心的某个特征的程度。对建立好的用户评论特征程度表进行倒排索引,找到每个特征词的所有评价用户及其评价的权重,最后根据要推荐的书籍的特征找到可以推荐的用户列表,找到评论权重高的用户并把书籍推荐给他。

好了先说这么多,不过在最后,我想总结一下关于机器学习的一些认识的问题。

有一些学习机器学习的朋友曾经问我,为什么他学机器学习有一段时间了但是感觉没学一样,也不知道究竟该怎么用。我觉得有三种可能:第一,看待问题不够宏观;第二,没有从实际出发去思考机器学习这门技术;第三,前面的基础没打好,导致看后面的内容不知所以然。举个例子来说,我们常常要对网站的评论进行挖掘,努力找出评论信息中能代表用户特征、行为、习惯、爱好、态度等信息的内容。要完成这样的一份工作需要这么几个步骤:获取原始数据、数据清洗、数据转换、归约和降维、选择特征项、选择分类器、建立特征抽取模型、训练数据、分类数据、结果评测、模型调整……如果我们不能宏观的以解决问题为目的而以使用某种技术方法的角度去看待这个任务,我们根本无从下手,因为某种技术仅仅是解决问题的一种手段,而不是必要的一个步骤。这是第一个错误的来源。

再来说第二个错误。所谓的“从实际出发”是指我们并往往不是“因为要解决某个问题而使用某种技术”,而经常是“因为我会某种技术而去解决某个问题”。举个例子,当我第一次看明白SVM的时候我很兴奋,我找了一大堆数据来跑SVM,比如对影评或微博评论进行态度情感分类之类的工作。可是当我做到特征抽取的时候就发现我很难量化出一段文字描述的内容及其程度来。后来想了好多办法来解决,最终把向量空间变异成了语言空间模型,才实现了最终的结果,而且精读也不是很高。这个时候基本也已经不是原来的SVM了。在整个过程中,我强行的使用某种方法去解决一个问题,最终导致工作趋于失败的方向(虽然勉强实现了,但结果差强人意。后来发现使用bayes效果更好)。我认为第二个错误是绝大多数新手都会犯的错误,我在这方面犯了无数次跟头,希望大家引以为戒。

最后一个错误也很普遍,也是很多同学经常出现的老大难的问题,典型例子就是理论推导。比如,SVM中引入拉格朗日乘子α来处理掉w和b,将两个参数的推待求方程变为了一个参数的待求方程。那么引入拉格朗日参数的原因是什么?甚至会问“拉格朗日是什么来着?”这些都需要我们回头去查资料的。如果数学和计算机的理论不够,我们很难往下推动学习的进展,也难以理解算法采用某种方法的原理是什么。

不过,在我们最求所以然的时候,也要在某些细枝末节上学会“不求甚解”。好多同学(包括我在内)都曾经因为一个积分算不出来而失去了学下去的整个动力。其实我很建议大家有的时候不要太过于纠结为什么积分结果是这样,为什么结果形式变了,而应该多想一想为什么要求这个结果?这个结果有什么用?这对大家更深入的理解算法有用得多。那么为什么不建议大家去想计算的细节呢?因为在实际应用中计算过程被计算机给代替了。

好了,码了这么多字,有点累了。还是那句话,只是一个阶段性总结,写的不周到的地方,还望大家指出,小弟不胜感激!

——小袁NLP

时间: 2024-10-07 05:45:19

浅谈我对机器学习和文本挖掘的新的理解的相关文章

【转载】李航博士的《浅谈我对机器学习的理解》 机器学习与自然语言处理

李航博士的<浅谈我对机器学习的理解> 机器学习与自然语言处理 [日期:2015-01-14] 来源:新浪长微博  作者: 李航 [字体:大 中 小] 算算时间,从开始到现在,做机器学习算法也将近八个月了.虽然还没有达到融会贯通的地步,但至少在熟悉了算法的流程后,我在算法的选择和创造能力上有了不小的提升.实话说,机器学习很难,非常难,要做到完全了解算法的流程.特点.实现方法,并在正确的数据面前选择正确的方法再进行优化得到最优效果,我觉得没有个八年十年的刻苦钻研是不可能的事情.其实整个人工智能范畴

经验浅谈,新人如何快速上手一个新项目

经验浅谈,总结下自己如何接手一个新项目: 1.向同事问清楚当前的开发环境,而且现今的发展,要区分64位和32位2.搞明白当前项目的运行环境,如果是多项目的话,要搞清楚依赖关系3.让同事帮忙搞定本机可运行项目的环境4.当环境都弄好.项目能启动后,开始代码之旅,也是最重要的一步. a)看配置.通看一遍配置文件,了解当前项目用了哪些框架,做到心中有数 b)学业务(重点*).了解各页面间的跳转及异步请求,写一个临时Filter,拦截/*的所有请求,在doFilter()方法中,打印出每次请求的路径( S

浅谈我对机器学习的理解

算算时间,从开始到现在,做机器学习算法也将近八个月了.虽然还没有达到融会贯通的地步,但至少在熟悉了算法的流程后,我在算法的选择和创造能力上有了不小的提升.实话说,机器学习很难,非常难,要做到完全了解算法的流程.特点.实现方法,并在正确的数据面前选择正确的方法再进行优化得到最优效果,我觉得没有个八年十年的刻苦钻研是不可能的事情.其实整个人工智能范畴都属于科研难题,包括模式识别.机器学习.搜索.规划等问题,都是可以作为独立科目存在的.我不认为有谁可以把人工智能的各个方面都做到极致,但如果能掌握其中的

李航博士:浅谈我对机器学习的理解

原文:http://www.itongji.cn/article/06294DH015.html 机器学习方法非常多,也很成熟.下面我挑几个说. 首先是SVM.因为我做的文本处理比较多,所以比较熟悉SVM.SVM也叫支持向量机,其把数据映射到多维空间中以点的形式存在,然后找到能够分 类的最优超平面,最后根据这个平面来分类.SVM能对训练集之外的数据做很好的预测.泛化错误率低.计算开销小.结果易解释,但其对参数调节和核函数的参 数过于敏感.个人感觉SVM是二分类的最好的方法,但也仅限于二分类.如果

浅谈JDK8相对于JDK7的一些新特性

上两天阿海升级了一下JDK环境,IDE版本更新成了Eclipse Neon. 不得不说,这个版本的Eclipse确实很不错,用起来页比较舒服多了.尤其是这个Eclipse的暗黑主题"Drack"改进了不少,这也是我一直用的主题.且看我先秀一下图: 这个主题中,改进最大的就是JSP编辑器,各种高亮很完全哦!JS块中的语法高亮也很带感,然而美中不足的事,仍然没有JS的语法提示.各种图片我就不再秀了,这篇文章主要介绍JDK8的一些新的特性. 哦对了,假如喜欢这个版本的Eclipse的话,下面

iOS应用架构浅谈

缘由 从事iOS工作一年多了,主要从事QQ钱包SDK开发和财付通app维护,随着对业务的慢慢熟悉,最近在思考这两款应用架构设计的思想,刚好昨天在微信里看了一篇iOS大牛对终端应用架构的分享,乘热打铁,下面浅谈下我对ios应用架构设计的理解,写的不好或不对的地方,欢迎大家拍砖,我们一起来探讨. 假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 不要急着给出你的答案,可以先在你的脑子里思考3分钟,再看下面我要讲的内容. 其实对于iOS客户端应用的架构来说,复杂度不亚于服

浅谈分布式计算系统和集群系统的区别

随着项目经验的增长笔者对分布式计算的了解是越来越深入,那么接下来笔者就和大家浅谈下分布式系统的特点吧,可以这样理解,分布式系统是将多个子任务分布在不同的物理机上并行工作.是以空间换时间并行计算来提高程序的可靠性和性能.分布式系统的高性能计算属于MIMD的范畴领域.它是按不同的业务分配不同的节点(单点),组织比较松散,一个节点垮掉那么些节点负责的业务就不能正常处理,当然,技术到位肯定会有其他解决方案例如基于Remoting通信方案WCF通信方案. 而采用集群方案,同样提供10台服务器,每台服务器都

浅谈自然语言处理基础(下)

命名实体识别 命名实体的提出源自信息抽取问题,即从报章等非结构化文本中抽取关于公司活动和国防相关活动的结构化信息,而人名.地名.组织机构名.时间和数字表达式结构化信息的关键内容,所以需要从文本中去识别这些实体指称及其类别,即命名实体识别和分类. 21世纪以后,基于大规模语料库的统计方法成为自然语言处理的主流,以下是基于统计模型的命名实体识别方法归纳: 基于CRF的命名实体识别方法 基于CRF的命名实体识别方法简便易行,而且可以获得较好的性能,广泛地应用于人名.地名和组织机构等各种类型命名实体的识

【转载】浅谈深度学习(Deep Learning)的基本思想和方法

浅谈深度学习(Deep Learning)的基本思想和方法 分类: 机器学习 信息抽取 Deep Learning2013-01-07 22:18 25010人阅读 评论(11) 收藏 举报 深度学习(Deep Learning),又叫Unsupervised Feature Learning或者Feature Learning,是目前非常热的一个研究主题. 本文将主要介绍Deep Learning的基本思想和常用的方法. 一. 什么是Deep Learning? 实际生活中,人们为了解决一个问