AI内参_45_043_文档理解第一步文档分类
你好,我是洪亮杰。
今天我和你分享的主题是文档理解第一步,文档分类。
我们在前几周的专栏里讲解了最经典的信息检索技术,以及基于机器学习的排序学习算法,并且花了一定的时间分享了查询关键词,理解这一关键搜索组件的核心技术要点。
上周我们还详细讨论了如何从线上和线下两个层面来评价一个搜索系统。
这周啊我们的分享将转移到搜索的另外一个重要部件。
文档理解文档理解最基本的一个步骤就是给文档分类看这些文档表达什么类别的信息。
今天我就来和你聊一聊文档分类的一些基本概念和技术,让你对这方面的开发与研究有一个基本认识。
我先来说说文档分类的类型。
如果我们把文档分类看作是一个监督学习任务的话,那么在各式应用中就经常使用以下几种类型的文档分类。
第一个类别就是二元分类或者称为二分文档。
分类目的就是把文档分成两种不同的类别,比如把文档分成商业类或者非商业类。
第二个类别自然就是多类分类,也就是判断文档是否属于好几种。
不同类别中的某一个。
比如把文档划归为艺术、商业、计算机或者运动类别中的某一类。
当然在多类分类的下面,我们还可以分三个小类别。
第一个小类别是多类单标签硬分类什么意思呢?就是说每一个文档只能在多类分类问题中被赋予唯一的标签,并且所有互相的类别是不兼容的。
第二个小类别就是多类、多标签、硬分类。
也就是说每一个文档可以被认为属于多个类别,然而,每个这样的分类都是唯一确定的。
最后一个小类别则是多类软分类,也就是认定每个文档以概率的形态属于多个类别。
在这个分类基础上还有一种分类的方法,那就是可以把所有的类别看作一个平面的结构或者是有组织结构的。
通常情况下,如果把文档分类到一个层次组织里,就叫层次分类。
在这样的情况,下一个文档同时属于这个层次结构上,从根节点到叶子节点的所有类别。
一般来说,上层节点相对于下层节点更加抽象,了解了文档分类的基本类型。
之后我们接着来讨论文档分类所用到的经典特性。
我们最先想到的当然是使用文档上原本的文字信息,最直接的文字特性,可能就是每个英文单词或者中文词语。
这种完全把文字顺序打乱的方式叫做词袋模型。
从很多实践者的报告来看,词带模型虽然不考虑文字的顺序,但是在实际使用中依然不失为一种非常有效的特性表达方式。
同时在词袋模型中,每个词的权重其实可以用我们之前介绍过的TFIDF或是语言模型对单词进行加权。
关于TFIDF以及语言模型,建议你回到我们前面讲过的内容去复习一下。
除了磁带模型以外,还有一些不同的尝试是希望能够保留部分或者全部的词序。
比如我们曾经讲过的恩元语法对文字的表达方法就是一种非常有效的保留部分词序的方法。
不过,恩元语法最大的问题就是极大的增大了特性空间,同时每一个n元组被观测到的次数明显减少,这也就带来了数据的稀少减少。
除了n元语法以外,近年来随着深度学习的推广,比较新的思路是用递归神经网络来对序列,在这里,也就是词句进行建模。
有不少研究表明,这样的效果要明显好于词带模型。
除了文档上的原始文字以外,文档上的排版格式其实也是很重要的。
有些字段有很明显的特征,比如一个文档的标题,显然占据了举足轻重的地位。
有一些文档,有章节、段落等结构。
除中这些n标题对文章的主要内容有很大的指导意义。
于是对文章的不同字段进行建模,对文档分类的效果可能会有比较大的影响。
另外,针对某些特殊文档,仅仅考虑文字的基本信息可能是不够的。
例如,现代网页的原始HTML表达和最终在浏览器中呈现出来的效果很可能会有较大区别。
因此,针对网页,我们可能还需要采用浏览器中最终呈现出来的视觉效果来提取特性。
对于孤立的文档来说,单个文档的信息可能是比较有限的。
但是在互联网上,很多文档都不是孤立存在的。
就拿普通网页来说,互联网的一个特点就是很多网页都通过各种链接连到一起。
这些和当前网页相连的其他页面,很可能就会为当前页面提供一些额外信息。
在所有这些周围的页面中有一类页面值得在这里提一下。
那就是这些页面上会有链接指向当前我们需要分类的目标网页。
这些链接往往有文字描述来叙述目标网页的一些特质,甚至有些周围的文字描述也是有意义的。
比如当前网页是微软公司的首页,上面也许因为有各种精美的图片而缺乏文字描述,而周围的页面上很可能就有微软公司官方网站等链接指向微软公司的首页。
这样我们就通过这些链接文字得出了微软公司的信息。
然后如果我们又知道微软公司是软件公司,那么就比较容易对这个页面进行分类了。
根据这个思路,我们就可以尝试去使用周围文档中更多的信息。
不过值得指出的是,周围文档信息所带的噪声也是比较多的,已经有各类研究尝试去理解。
周围文档中更多有价值的信息,这里就不赘述了。
最后我来讲解文档分类的相关算法。
根据我们刚刚讲过的不同文档的分类类型,就可以直接借用已知的熟悉的监督,学习各种算法和模型。
假如是简单的二分文档分类问题,那对数几率回归支持向量机,朴素的贝斯分类器,就都能够胜任工作。
而针对多类分类问题,也是标准的监督学习设置。
刚才说到的这几类,算法和模型,在一定的改动下也能够做到。
近些年,深度学习席卷很多领域,在文档分类领域,各类深度学习模型也都展示出了一定的优势。
需要注意的是,并不是所有的分类算法都天生支持概率的输出结果。
也就是说,如果我们需要对多类软分类文档问题进行建模,那就会有一些问题。
比如支持向量机就是这么一种情况。
在默认的状态下,支持向量机并不输出每一个数据样例,属于每一个类别的概率,因此这里就需要用到一些技巧。
在实际应用中,我们经常采用的是一种叫普拉特调别的方法。
简单来说,其实就是把支持向量机的输出结果再当做新的特性,学习一个对数几率回归。
除了我们刚刚讲的,利用基本的监督学习手段进行文档分类以外。
另外一种方法就是我们前面说的,利用周围有关系的文档,也就是所谓的关系学习关系。
学习是说希望利用文档与文档之间的关系来提高文档的分类效果。
这一方面的很多方法都会利用这样的思想,相似的页面,很有可能是相同的类别。
如果是在层次分类的情况下,相似的页面,就很有可能在层次结构上距离比较近。
这里相似,有可能被定义成文字信息相似,也有可能是在文档与文档之间所组成的图上位置类似。
比如某一个公司的很多子页面,虽然上面的文字本身有差异,但因为都是这个公司的页面。
从大的文档页面网络上看,他们都代表这个公司的信息。
因此在进行文档分类的时候,也很有可能会把它们放到一起。
今天我为你讲了现代搜索技术中又一个至关重要的环节,那就是文档理解中的文档分类问题。
你可以看到文档分类所要了解的信息还是比较多的。
一起来回顾一下要点。
第一,简要介绍了文档分类的主要类型,包括二元分类、多类分类以及层次分类。
第二,详细介绍了文档分类所可能用到的种种特性,比如文档上原本的文字信息、文档的排版格式,以及周围有关系的文档。
第三,介绍了如何利用监督、学习以及其他的算法工具来完成文档分类的任务。
最后给你留一个思考题。
如果一个文档中既有图片也有文字,那我们该如何组织这些特性,然后放到我们的分类器中去学习呢?欢迎你给我留言,和我一起讨论。