基于统计学模型的无指导中文文本分析

摘要:以下为清华大学统计学研究中心邓柯分享的主题为“基于统计学模型的无指导中文文本分析”的演讲。

基于统计学模型的无指导中文文本分析


邓柯:今天下午非常荣幸参加这样的活动,也非常感谢活动的主办方,清华大学数据科学研究院的邀请。今天给大家分享一个我们最近做的工作。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析

刚才主持人介绍了我的教育背景。我本科和博士都是在北大念的,拿的统计学博士。北大毕业之后到哈佛大学统计系,做了几年博士后,做了一些研究工作。在2013年加入到为清华大学邱成同数学科学中心做助理教授,去年我们清华大学刚刚成立了统计学研究中心,统筹统计学科的建设和发展,我就从数学中心出来到了统计中心,现在也是做的助理教授,同时帮助(刘军)主任建设中心,这是我自己简单的情况。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析

我们“统计中心”刚刚成立,哈佛大学统计系的刘军教授和哈佛大学生物统计系的林希虹教授是我们中心主任和共同主任。两位教授都是华人统计学界非常知名的统计学家,都在美国拿到国际统计学最高奖,在国际领域上统计学领域是非常有影响的学者。
我们中心学术委员会有七位教授,也都是国际上各个大学非常知名华人教授,大家非常无私的贡献出很多时间来帮助我们建设“统计学研究中心”。我们的“顾问委员会”包含很多美国的院士、澳洲的院士、台湾的院士,都是国内、国际统计学界非常资深的老师,共同指导中心的发展。
我们目前有四位全职老师,都是从美国留学回来。这些年举办了一系列的活动,去年也和我们数据科学研究院举行过一个Rong系列的讲座。在大数据时代统计能够发生什么样的作用?统计学怎么能够把它用好?我觉得这个也是非常重要的一个问题。有一种声音认为:到了大数据时代,统计学变得不重要了。作为统计学家,我们认为对这个观点很错误的,也是很危险的。我们认为,在大数据时代,统计学的作用不仅没有被削弱,反而是越来越重要了。

过去,国内统计学界对统计学的教学、科研太偏重于理论,对应用统计,对重要的实际问题,大家的注度普遍不够。但是统计学的应用还是非常重要和广泛。我们统计中心去年成立的时候,刘军主任接受了人民日报的专访,谈到在大数据时代怎么看待统计学,怎么用统计学解决大数据时代的问题。当时提出一个观点:大数据是原油不是汽油。大数据里饱含宝贵的数据资源是一种财富,但这种资源更像是“原油”,离直接能用还需要一个数据整理和数据分析的过程。这个过程中,“数据科学”是一股决定性的力量,统计在里面是很重要的一部分,我们应该发挥更大的作用。在科研实践当中,我们也应该这么做。最近,我们从统计学的角度做了一中文文本分析的工作,取得了好的效果,在实际应用上有积极的意义。

首先我介绍一下问题。我们知道,在我们现在大数据时代,我们获取各种各样的文本是越来越容易,对文本进行分析产生很多商业价值。包括在金融方面,刚才嘉宾讲过通过各种文本的分析了解客户需求,可以采取不同的策略,就会带来很多的效果。还有,我们可以到“大众点评”或者“淘宝”抓到的客户评论。抓到的这种文本写作方式非常得自由,这是网络文本的显著特征。这样的文本怎么去分析?其实还是有些挑战,我们从网上看到的文本和正规新闻文本很不一样,淘宝上小二的嘻笑怒骂跟新华社的社论也是完全不一样的,这个文本有很多新特征,很多新词汇,技术性名词包括很多商品、商标一些俗语,网络词汇层出不穷,写作多样化,给我们分析带来很多挑战。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析

我们讲医疗大数据,医疗大数据中非常重要的组成部分是医院里的电子病历。这是一个病例的例子,它是非结构化的自由文本,不同类别的名词,我们用不同的颜色标了出来。拿到这种文本以后,我们还是蛮头疼,这个文本是非结构化,对它进行分析结构处理不是很容易。我们想通过分析把非结构化的文本变成结构化的文本,这个过程当中还是需要艰苦的努力,并不是非常容易。医生写出医疗文本,专业性很强,医生叙述的语言、方式和我们新闻、人民日报有非常大的差别,这样的文本怎么挖掘、分析也是有它的一些难度的地方。现在,很多公司都在关注做这件事情,但是在技术上还是有难度的。


最近我们和哈佛大学东亚文明系的包弼德(Peter K. Bol)教授合作研究中国古代文献。包教授是国际上著名的汉学研究专家,他十多年前开始领导这个项目——“中国历代人物传记资料库”。尽可能收集中国历史上的文献,正史、地方志,家谱,卖房子的房契、地契都在里头,他要干什么事?想给历史人物建成一个“社会网络”。我们有脸书有社会网络,谁和谁是朋友、同学。在历史人物上也有这样的东西,谁是谁的朋友,同学,谁有亲戚做官。但古人已经去世多年,不可能从坟墓跑过来,在脸书上开个账号把自己的网络建起来。但是他们的信息是存在,就在历史文献里面。我们把历史文献整合起来,统筹处理这些数据,这些文本,就有可能解决这个问题。但这个文本又是非常特殊的文本,是古文,甚至没有标点符号。正史、地方志、家谱、墓志铭形式非常复杂,涵盖时间范围跨越一千多年,写作风格、用词句句法语法变化很大,这些文本跟《人民日报》也是很不一样的。

我们给出的这三个例子,网络文本和医疗文本和古文都是独特的文本,存在几个问题。
第一,我们不能假定我们知道所有的词库,词库开放。
第二,我们大家做任何中文分析,最基础是要切词。
第三,同时在我们很多的具体问题,对所谓的命名识别,医学里面、历史文献里面有非常复杂的专有名词,名词能不能准确识别,对我们后期用得好这是很关键的。这是我们要解决的三个问题。
我们刚才举了三个例子,不能够假定,三种数据都和现在的人民日报的文本是不同的,我们谈到中文语言分析的时候,该怎么做?我们需要训练语料库,北大有一个非常著名的《人民日报》语料库,过去十年人民日报全都搞下来,找专家把它切好词,做好词语标记,这样的话我们可以有一个人民日报的语料库,当然微软也有它的语料库,语料库的基本逻辑在生成的时候都以一种新闻文本作为基础,加上人工的干预形成的一个系统。我们的目标文本和训练文本差别非常大,用那个训练文本去做,效果是堪忧的。

同时我们已知的方法,假定这个词库还是知道比较全,稍微有点不清楚。同时倾向于用语法规则或者用rules帮助词法分析。我们可以看到举出三个问题,这三条好像基本上都不太对。第一,我们不能够假定我们有一个很好的训练文本,同时那个问题里面新词和未知技术名词很多,我们很难假定有一个完整的词库,同时在那些里面语法结构跟我们想象当中新闻文本的语法结构是很不一样的,医生写的语法根本就不是语法。我们传统的一些方法在这里面也都有它的一些局限性。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析



还有非常重要的领域,Topic Models,它的特性不关心文本当中细的信息,很关注很粗糙的信息。这个文本说数学、说物理还是说生物这个它可以搞定,我们想关心一些很细的信息,它并不能帮助我们。而刚才所举的例子,关注细的信息,处理医疗文本,知道病历里面说过病人到底得过什么样的病,吃过什么药。对于这个问题而言,Topic Models就太粗糙了。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析

我们在处理之前做了一些试验,斯坦福大学有一个著名的切词工具,哈工大也发展过一套算法来测中文分析,做得非常好。我们当时做过测试,随便网上抓了一条新闻,用斯坦福大学的软件分析,分得挺对,什么州,州党都分对了,但挺遗憾,马英九分错了。总体来讲对于抓取新闻文本还挺好。

我们把古文拿出来试一试,《宋史王安石传》,这里面不同的颜色标志不同的词,也有很多是错的,这错了也有道理,古文古代官名,人民日报从来没出现过,模型在训练的时候不知道有这样的词,显然不太容易分对,产生了很多错误。而且,技术名词的错误对我们应用非常致命,我们主要关注这些东西,切错了关系很大。

我们遇到了很多类似的实际问题,也一直在想怎么解决这个问题,我们觉得通过统计学的模型可能解决这个事。当然这个模型本身并不是我们提出来,最早一九五几年提出来的。这个模型在说什么事?我假设我有一个词典有6个词,两个复合词,四个单个词,每个词使用的频率,怎么从模型里面生成这个句子?从模型抓取一个词,抓取王安石这个词的概率是10%,同样一句话抓5次也可以抓出来,5次抓概率就不一样。例如:我有一个猴子坐盒子旁边,盒子里面有很多词有大有小,大小使用代表使用的频率,猴子每次从盒子里面抓一个词,就可以生成非常简单的统计学模型生成文本。这个模型显然太简单了,任何一个作家都不会是这样写作,但是这也就是统计学模型魅力所在,模型看上去很简单粗糙肯定不是真的,但是在这样非常简单模型下可以做很多的事情,可以做很多分析推断帮助你解决很多问题,毛主席曾经说过矛盾是无处不在的,我们抓住主要矛盾就很行了,我们希望统计学模型帮助我们主要矛盾。

首先能做什么?举个例子,我们假定有了这个词典,然后我们想来看看王安石为参政知事,怎么切分?在这样一个简单模型下有两种切分方式,但生成概率是不一样。有92%的概率用这个,如果用统计四大原则,我们认为切词还不错,如果知道了词典内容和那个词的词频这样的简单模型帮助你做切词,为什么他们做得好?尽可能用较小词分,少切一刀就占便宜。如果这个词太长,词本身每一个元素的概率也会下降,不能切得太粗糙,这个模型就能做得很好。


往往我们根本不知道词频是什么?一旦这个词频不知道,概率是多少我就不会算概率不会算,相应权重不会算,不会算,这个事就不知道怎么做,就不知道该怎么分。这又变成一个问题,如果我们有了很多的数据,我们能不能想办法估计一个词频,这是有统计推论,假定现在有一个词典,这些词我是知道,但是词频我不知道,但你想想我有很多文本数据,反过来能不能推断这个词频?这个东西,可以转化成数据模型,我们过去词频,句子该怎么切,如果你知道,词频是非常稳定的,王安石出现过一次,我填进去算就能算出来,但是难点在于我只这句话,不知道句子不怎么分?边界我们认为是小数据,我们用EM算法进行有效估计,时间关系,细节就不跟大家说了。

基于统计学模型的无指导中文文本分析


一开始不知道词频是多少,怎么办?我随机给你初始化的常数,我可以算每个概率,可以算相对权重。有了相对权重以后,我可以反过来update而这个估计,王安石在里面,在这个里面出现,王安石的概率是0.926,参政知事,在这里出现过,这儿也出现,有两个位置加起来等于1,王安石这三个单字仅在这个排序里出现,系数频率只有4.7%。新的分词和老的分词一样,你可以把这个过程重复做好多遍。

这里解决一个问题,回到这个问题里面,我们知道词典,但词频不知道,你给我一个数据,可以词频可以有效估计出来。这个框架20年前有人做过。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析



我们有一个很简单的想法,实际问题当中有个很大的问题,我们原始的词典也不知道,我现在只有文本不知道词典,词典也不知道,这个事就不好说了。我们从小词典生成大词典,单词出发,我把两个字的词加一起,三个字的词加一起,这个方法在2000年前后就有人做这个工作。这样做计算上还是很慢,中文字母表比较大,有很多计算问题并不好处理,这个方法就停滞了。我们提出一个很大胆的想法,不用从底下往上,我先把看上去是词的东西找到,生成超级大大词典,然后在超级大的大词典做了算法,一点一点搞法,这样就能解决,这是我一个想法,这个想法非常简单,这个简单方法效果非常好。

基于统计学模型的无指导中文文本分析


有了文本,怎么生成初始词典,长度小于L,L给到8,给到10,给到15,我来数一数,这个字块在文本出现的频数,一般我们取得到2和3,这样推动枚举全拿出来形成初始的词典,有这样一个短文本,L是为4L为2,按照这样的准则把所有的词库条变出来,我们把单词作为词放进去,我们就有这样的初始词典,每个词都有频数,EM的迭代过程就能完成,就能够生成初始的词。加上一些模型选择技术,大量的词汇不显著就被模型排除了,我们最后得到词典规模大概是原始词典规模的1%到5%,90%的词是被干掉,这是我们整体算法流程。

这是我们目标文本,这是数据挖掘中的算法,很快把所有的字符字块选出来,你装进来,得到超级大的初始词典,如果有训练可以用,用EM算法估计词频。我们加了模型控制,控制完得到非常精简的词典,进行排序,重要的词排在前面,把原始文本再做分析。

我们看看做法的效果,效果非常简单算法还是非常实用非常好。为了验证这个概念,我们找了一个英文小说,《白鲸记》,我把英文小说拿过来以后,标点符号全部去掉,空格去掉,英文小说变成字符串,20万个英文单词,有了这个以后就把原始数据输入到方法里面学习,这个是我们算法就是输出的结果,这里面英文单词我不知道,这个算法自动把词学出来,看一看,这个做得还是不错的,有红线的地方,就不是单词的,整体来讲在英文里做的不错。我们也做了精细的分析,我们知道有哪一些单词,我们做了一些比较,如果从找词角度,真实小说有1.7万词,出现两次以上的词是1700个,出现一次词从统计学很难发现,但是看我们的结果,6700个词,大概6300词非常准确抓取到,我们找到3000多个词组,新词发现做得非常好。从切词角度,大概有75%到80%,大家觉得87%还可以。大家来看看少了20%是在哪儿?我们少了20%在这个地方,原来moby和 dick中间应该有一个空格,我们没有把这个空格放进去。这虽然是个错误,但是从统计分析的角度是有道理的:这两个词经常在小说里出现,虽然不是一个单词,但是从统计分词的角度,它是一个词,我们缺了20%都在这个地方。如果把这个地方不算,做一个调整,我们切词大概在95%左右,这是非常高的标准。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析



我们后来试一些别的例子,拿经典的《红楼梦》,算得非常快,《红楼梦》那本书不到一分钟,十几秒整个算法算完了,得到几千上万红楼梦的人名、词都出来了,我们是找出来前一百个词,大家看看王夫人、林黛玉、贾宝玉、凤姐等等都在这个地方,这个词还选得不错,阿弥陀佛。

基于统计学模型的无指导中文文本分析

我们发现所有的人名会在一边,人名结构算法我们能有效捕捉到,这是蛮有意思的现象。

我们还做了精细的比较,从识别人名,《红楼梦》当中有将近780个人名,其中371个人名出现两次以上,我们分析的结果,370个人名成功抓取345个,这是斯坦福的算法,这是哈工大的方法,这两个算法在人名识别上很低,只识别了312个,miss了将近60个,这个方法更差,miss了90多个,我们只有25。我们用的信息很少,但是在识别人名角度比这些方法都做得好。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析



《宋史》上做了例子,《宋史》将近600万汉字,10分钟左右算出来,我们学到8万有意义的词和词组,排到前一百个,天干地支都在里面,重要的宋代官职这样一些有意义的词汇都可以很准确抓取到。我们也可以手工做分类,这是人名这是官名这是地址这是官号,这是传统名词,皇帝的名词,大臣的名词还是准确抓取到了,所以认为这个还是一个蛮有效的算法。我们用同样的思路,把它放在一个空间上,可以把不同的颜色标准不同的词。

基于统计学模型的无指导中文文本分析


红的里面是岳飞,我发现岳飞是在这儿,离他最近的两个人是韩世忠和张俊,是跟他一块打仗的宋代将军。而黄色是什么?地址,你一看这些地址都是将军们曾经打仗的地方,通过我们方法识别加上标准的技巧,很快速捕捉到核心的信息。

基于统计学模型的无指导中文文本分析


我们也可以通过方法学习人和人,宋代的语学的代表性人物,在《宋史》里面他们名字经常在不同的段落里面共同出现,我们用一个算法来做这件事情,自动提取。

基于统计学模型的无指导中文文本分析


这是我们做的关于《宋史》的例子,对《宋史》做切分,这是斯坦福切的结果,这些名词切得不对,这是我们的方法,切的结果,专有名词切大部分切得还是非常准确,表现还是相当不错。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析



后来我在新浪微博上做了点事情,新浪微博一百人弄下来,我们都可以算,前词是什么?左一刀右一刀这种词是非常难识别,这种词一般常规算法识别出来是非常困难,但是这些词在我们的算法里面信号非常强,很容易把它都抓出来。这是可以做的事情,这是《明朝那些事》做分析,基本上专有名词、人名、官名都可以抓得挺明确,努尔哈赤,还有日本人的名字,丰臣秀吉,我们觉得还是不错的。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析



我们有了切词以后,我们看每一个人写作的特征就可以看到,马鼎盛是说军事,叶檀、潘石屹跟他有关的一些词,信号还是很明确的,我们看每一个人写作的特征就能看到,李承鹏说体育说足球,马鼎盛说军事,叶檀说金融经济,潘石屹说房地产和金融。徐静蕾是说情感话题或说的别的话题比较丰富,同样把这些关键词用不同的颜色标记在这张图,我们可以展现这样的一些结构。

基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析
基于统计学模型的无指导中文文本分析





最后我们总结一下,我们提出的这个方法有这样一些优点。它的统计学基础还是非常清晰,整个方法建立在严格的统计分析和模型选择基础上。它非常快,几百万字的分析几分钟就做完了;最多做过4亿个汉字,两小时所有分析结束。它还可以发现一些很低频的词汇,例如很多仅出现两次三次的成语都可以准确识别。它还可以把重要的词排在前面。我们已经有的一些知识也可以非常容易地加到模型当中。我们的这项研究成果已经被《美国科学院院刊》接收,详细内容供大家参考。我就说到这儿,谢谢大家!

来源:199it

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(1)
张乐的头像张乐编辑
上一篇 2016-04-24 16:27
下一篇 2016-04-27 23:49

相关文章

关注我们
关注我们
分享本页
返回顶部