搜索技术之文档理解文档格式.docx
- 文档编号:19479741
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:8
- 大小:22.75KB
搜索技术之文档理解文档格式.docx
《搜索技术之文档理解文档格式.docx》由会员分享,可在线阅读,更多相关《搜索技术之文档理解文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
在这样的情况下,一个文档同时属于这个层次结构上从根节点到叶子节点的所有类别。
一般来说,上层节点相对于下层节点更加抽象。
文档分类经典特性
了解了文档分类的基本类型之后,我们接着来讨论文档分类所用到的经典特性。
我们最先会想到的当然是使用文档上原本的文字信息。
最直接的文字特性可能就是每个英文单词,或者中文的词语。
这种完全把文字顺序打乱的方式叫作“词袋模型”(Bag-of-wordsModel)。
从很多实践者的报告来看,“词袋模型”虽然不考虑文字的顺序,但是在实际使用中,依然不失为一种非常有效的特性表达方式。
同时,在“词袋模型”中,每个词的权重其实可以用我们之前介绍过的TF-IDF或是语言模型(LanguageModel)对单词进行加权。
关于TF-IDF以及语言模型,建议你回到我们前面讲过的内容去复习一下。
除了“词袋模型”以外,还有一些不同的尝试,是希望能够保留部分或者全部的词序。
比如,我们曾经讲过的“N元语法”(N-gram)对文字的表达方法,就是一种非常有效的保留部分词序的方法。
不过,N元语法最大的问题就是极大地增大了特性空间,同时,每一个N元组被观测到的次数明显减少,这也就带来了数据的稀少(Sparsity)问题。
除了N元语法以外,近年来随着深度学习的推广,比较新的思路是用“递归神经网络”(RNN)来对序列,在这里也就是词句进行建模。
有不少研究表明这样的效果要明显好于“词袋模型”。
除了文档上的原始文字以外,文档上的排版格式其实也是很重要的。
有些字段有很明显的特征,比如一个文档的标题显然占据了举足轻重的地位。
有一些文档有“章节”、“段落”等结构,其中这些小标题对文章的主要内容有很大的指导意义。
于是,对文章的不同“字段”(有时候也叫做“域”)进行建模,对文档分类的效果可能会有比较大的影响。
另外,针对某些特殊文档,仅仅考虑文字的基本信息可能是不够的。
例如,现代网页的原始HTML表达和最终在浏览器中呈现出来的效果很可能会有较大区别。
因此,针对网页,我们可能还需要采用浏览器中最终呈现出来的视觉效果来提取特性。
对于孤立的文档来说,单个文档的信息可能是比较有限的。
但是在互联网上,很多文档都不是孤立存在的。
就拿普通网页来说,互联网的一个特点就是很多网页都通过各种链接连到一起。
这些和当前网页相连的其他页面很可能就会为当前页面提供一些额外信息。
在所有这些周围的页面中,有一类页面值得在这里提一下。
那就是这些页面上会有链接指向当前我们需要分类的目标网页。
这些链接往往有文字描述来叙述目标网页的一些特质,甚至有一些周围的文字描述也是有意义的。
比如,当前网页是微软公司的首页,上面也许因为有各种精美的图片而缺乏文字描述,而周围的页面上很可能就有“微软公司官方网站”等链接指向微软公司的首页。
这样,我们就通过这些链接文字得出了“微软公司”的信息,然后如果我们又知道微软公司是软件公司,那么就比较容易对这个页面进行分类了。
根据这个思路,我们就可以尝试去使用周围文档中更多的信息。
不过,值得指出的是,周围文档信息所带的“噪声”也是比较多的。
已经有各类研究尝试去理解周围文档中更多有价值的信息,这里就不赘述了。
文档分类相关算法
根据我们刚刚讲过的不同文档的分类类型,就可以直接借用已知的、熟悉的监督学习各种算法和模型。
假如是简单的二分文档分类问题,那“对数几率回归”(LogisticRegression)、“支持向量机”(SVM)、“朴素的贝叶斯分类器”(Na?
veBayesClassifier)就都能够胜任工作。
而针对多类分类问题,也是标准的监督学习设置,刚才说到的这几类算法和模型在一定的改动下也能够做到。
近些年,深度学习席卷很多领域。
在文档分类领域,各类深度学习模型也都展示出了一定的优势。
需要注意的是,并不是所有的分类算法都“天生”(Natively)支持“概率的输出结果”。
也就是说,如果我们需要对“多类-软分类”文档问题进行建模,那就会有一些问题。
比如支持向量机就是这么一种情况。
在默认的状态下,支持向量机并不输出每一个数据样例属于每一个类别的概率。
因此,这里就需要用到一些技巧。
在实际应用中,我们经常采用的是一种叫“普拉特调整”(PlattScaling)的办法。
简单来说,其实就是把支持向量机的输出结果再当做新的特性,学习一个对数几率回归。
除了我们刚刚讲的利用基本的监督学习手段进行文档分类以外,另外一种方法就是我们前面说的利用周围有关系的文档,也就是所谓的“关系学习”(RelationalLearning)。
关系学习是说,希望利用文档与文档之间的关系来提高文档的分类效果。
这一方面的很多方法都会利用这样的思想:
相似的页面很有可能是相同的类别。
如果是在“层次分类”的情况下,相似的页面就很有可能在层次结构上距离比较近。
这里,“相似”有可能被定义成文字信息相似,也有可能是在文档与文档之间所组成的“图”(Graph)上位置类似。
比如,某一个公司的很多子页面,虽然上面的文字本身有差异,但因为都是这个公司的页面,从大的文档页面网络上看,他们都代表这个公司的信息,因此在进行文档分类的时候,也很有可能会把他们放到一起。
第二:
文档聚类
(DocumentClustering)
文档聚类的类型
和了解文档分类的思路相似,我们先来看看文档聚类的分类。
一般来说,可以把文档聚类看作非监督学习的典型代表。
先说一种直观的分类方法。
如果把文档分为“互不相关”的几个聚类,那就叫作“扁平聚类”(FlatClustering);
如果这些聚类相互之间有一定的结构关系,那就叫作“层次聚类”(HierarchicalClustering)。
“扁平聚类”中的“互不相关”是说文档所划分进去的聚类之间本身没有重合。
而“层次聚类”的特点是,希望在聚类之间找到关系,从而把这些文档组织到一个有层次的结构中。
在这种层级结构里,根节点所代表的内容往往比较抽象,而叶节点所表达的内容则比较具体。
值得注意的是,不管是“扁平聚类”还是“层次聚类”,相较于文档分类来说,这里最大的不同就是这些聚类以及它们之间的关系都不是事先定义好的,或者说研发人员事先并不知道这些聚类的存在。
从这个角度来看,聚类的确是比分类要困难的任务,难在如何衡量聚类的好坏。
除了“扁平聚类”和“层次聚类”这种区分以外,聚类方法中还有一个类似的区分,那就是“硬聚类”(HardAssignment)和“软聚类”(SoftAssignment)的区别。
顾名思义,“硬聚类”是说对于每一个文档,不管是“扁平聚类”还是“层次聚类”,都确定性地分配到一个或者一组聚类中。
而“软聚类”则往往学习到文档分配到聚类的一个分布,也就是说所有的分配都是以某种概率存在的。
文档聚类的应用
在搜索系统为背景的场景中,我们为什么要强调文档聚类?
首先,文档聚类可以帮助文档提取和排序。
很多文档能够聚合到一个类别肯定是因为文档在某种情况下“相似”。
相似的文档很可能都满足用户的某种“信息需求”(InformationNeeds)。
实际上,在类似“语言模型”(LanguageModel)或者其他概率模型的场景中,对文档相关度的预测经常需要从相似文档群体中寻找额外信息。
举个例子,在“语言模型”中,我们需要估计文档相对于查询关键字的相关度。
单独的某一个文档,数据信息可能比较匮乏,因此一个常用的策略就是从整个数据集中补充信息。
如果我们已经有了文档的聚类,那自然就可以从这些聚类中补充,而不需要数据全集。
其次,文档聚类能够帮助整理搜索结果。
在最普通的搜索结果上,如果只是完全“平铺”所有的结果,用户很可能对成百上千的结果“不得要领”。
因此,在这些结果上体现某种结构就成为了很多搜索引擎提升用户体验的一种方法。
当然,这里可以用我们之前提到的“文档分类”的方法,把返回的结果按照类别组织。
这样,哪一个类别有什么结果就清清楚楚。
在这里,文档聚类相比于文档分类的优势是,聚类更能反应文档之间更本质的联系,而不是类似于分类这样“先入为主”地对文档的关系有一个定义。
文档聚类不仅仅是搜索结果的展示利器,很多时候,文档聚类还可以帮助研究人员来浏览一个文档集合,而不需要太多的先期假设。
在有“层次聚类”的帮助下,研发人员可以很容易地根据层次之间的关系来对一个文档集合进行分析。
利用文档聚类来浏览文档集合常常是发现问题,并且进行下一步工作的有效步骤。
文档聚类的基本模型
最基础的文档“扁平聚类”方法当属“K均值算法”(K-Means)。
首先,一个最基本的步骤就是要把文档表示成“特性向量”(FeatureVector)。
具体的做法可以采用我们周一讲过的几个方式,比如最基本的“词袋模型”(BagOfWord),这是一种把文字顺序完全打乱的方式。
在“词袋模型”中,每个词的权重可以用我们之前介绍过的TF-IDF或是语言模型对单词进行加权。
当然,还有“N元语法”(N-gram)和“递归神经网络”(RNN)两种思路,这一部分可以回到我们周一的内容再复习一下。
把文档表达成为“特征向量”之后,就可以开始聚类了。
“K均值算法”的基本思路是这样的。
给定一个数据样本集,K均值算法尝试把所有的样本划分为K个聚类。
每个聚类都是互斥的,也就是说样本都被有且唯一地分配到这些聚类中。
K均值算法在优化一个目标函数,那就是每个样本到目标聚类中心的平均平方误差最小。
这里,目标聚类中心是指当前这个样本被分配到的聚类;
而聚类中心则是所有被分配到这个聚类的样本的均值。
很明显,根据不同的样本被分配到不同的聚类,聚类中心也会随之发生变化。
通俗地说,K均值算法的目标函数要达到的目的是,让聚类内部的样本紧紧围绕在聚类的均值向量周围。
整个目标函数的值越小,聚类内样本之间的相似度就越高。
和我们熟悉的线性回归模型(LinearRegression)以及对数几率回归(LogisticRegression)一样,目标函数本身仅仅描述了当最终的聚类分配最佳时的一种情况,并没有描述如何能够得到最佳聚类分配的情况。
实际上,对于K均值算法而言,直接最小化这个目标函数并不容易,一般来说,找到它的最优解是一个NP难的问题。
不过幸运的是,贪心算法一般能够找到不错的近似解。
下面我就介绍一个通过迭代优化来近似求解目标函数的算法。
首先,我们对均值向量进行初始化。
比较简单的初始化方法就是直接随机地选择某几个点来当做聚类均值。
然后,我们依次对每一个样本点进行聚类划分。
每个数据点被分配到距离某一个均值向量最近的那个聚类里。
当我们进行了所有的分配之后再对均值向量更新。
这就完成了一次迭代,整个算法需要进行多次迭代更新。
若迭代更新后聚类结果保持不变,就将当前聚类划分结果返回。
文档聚类的难点
在今天分享的最后,我想来谈一谈文档聚类的一些难点。
首先,怎样衡量聚类的质量好坏,也就是如何评价聚类算法以及比较不同的算法,一直都是聚类模型,甚至说是无监督机器学习算法的共同问题。
有一些评价手段基于定义聚类内部数据的相似度,并且认为聚类内部数据应该比聚类之间的数据更加相似。
然而,这样的定义并不能真正反映聚类的质量。
其次,在聚类算法中,往往有一个参数非常难以决定,那就是聚类的个数。
对于一个决定的数据集来说,我们不可能事先知道这个参数。
当聚类的个数过少的时候,我们可能无法对数据集进行比较完备的K均值算法描述。
而聚类的个数过多的时候,可能数据又被切割成过多的碎片。
因此,要确定这个参数就成了聚类算法研究的一个核心难点。
第三:
文档理解的重要特例:
多模文档建模(MultimodalModeling)
多模数据
我们首先来了解一下,到底什么是多模数据。
多模数据,其实就是说数据有多种模式(Modal)的表达途径。
而这些多种不同的模式都共同参与描述同一个数据点的不同方面。
比如,有一张照片反映的是美国总统特朗普在华盛顿白宫的致辞。
那么照片本身是对这个场景的一个描述,这是一个模式。
然后,和照片相应的文字描述,说明这是特朗普在白宫的致辞,又是另外一个模式。
这两个模式是相辅相成的,都是对这个场景的描述。
很明显,针对这样多种数据模式的建模是多媒体时代、社交媒体时代非常重要的课题。
在文档领域,非常普遍的情况是文字和图片混搭。
一般来说,新闻网站一般都有大量的图文信息。
而有一些特殊场景,文字和图片则出现很不对称的混合情况。
比如,一些社交媒体(例如Instagram、Pinterest甚至Twitter)上很多短文档都仅仅包含图片或者图片和很少的文字。
在这些情况中,文字和图片就成了非常重要的互相补充的信息源。
另外,在电子商务网站中,商品的图片正在成为越来越重要的信息途径。
用户经常依靠图片来判断是否要购买某个商品。
在电子商务网站上已经很难看到只有文字描述的商品信息了。
因此,对于文档的搜索来说,对图文信息的理解是一个核心的技术问题。
那么,多模数据的建模难点是什么呢?
不同模式的数据其实是有不同的特征,如何能够有效利用各自的特性来最优地反映到某一个任务中(比如分类或者聚类等),是多模数据建模的难点。
多模数据建模基础
那么,如何对多种模式的数据进行建模呢?
多模数据建模的核心思路就是数据表征(Representation)。
我们需要思考的是如何学习到文字的表征,以及图片的表征。
然后,又如何把文字和图片的表征能够联系到一起。
一个最直接的思路,应该是文字采用我们熟悉的各种文字特性,然后利用图片相关的特性提取技术来对图片进行表征。
得到文字和图片各自的表征之后,直接把两个不同的特征向量(FeatureVector)连接到一起,就得到了一个“联合表征”(JointRepresentation)。
比如,假设我们学习到了一个1000维度的文字特征向量,然后一个500维的图片特征向量,那么,联合特征向量就是1500维度。
一个相对比较现代的思路是利用两个不同的神经网络分别代表文字和图片。
神经网络学习到“隐含单元”(HiddenUnit)来表达图片信息以及文字信息之后,我们再把这些“隐含单元”联结起来,组成整个文档的“联合隐含单元”。
另外一个思路,那就是并不把多种模式的数据表征合并,而是保持它们的独立。
在文字图片这个例子中,那就是保持文字和图片各自的表征或者特征向量,然后通过某种关系来维持这两种表征之间的联系。
有一种假设就是,虽然各种数据模式的表象是不一样的,例如图片和文字的最终呈现不一样,但是内在都是这个核心内容的某种表述。
因此,这些数据模式的内在表达很可能是相近的。
这个假设套用到这里,那就是我们假设文字和图片的各自的表征相近,而这个“相近”是依靠某种相似函数来描述,比如这里就经常使用“余弦相似函数”(CosineSimilarity)。
有了上述两种思路之后,一种混合的思路就很自然地出现了。
混合思路的基本想法是这样的。
数据不同的模式肯定是某种内在表征的不同呈现,因此,需要一个统一的内在表征。
但是,只采用一种表征来表达不同的数据源,又明显是不够灵活的。
所以,在这种混合的思路里,我们依然需要两种不同的特征来表达文字和图片。
具体来说,混合思路是这样的。
首先,我们从文字和图片的原始数据中学习到一个统一的联合表征。
然后,我们认为文字和图片各自的表征都是从这个联合表征“发展”或者是“产生”的。
很明显,在这样的架构中,我们必须要同时学习联合表征以及两个模式的、产生于联合表征的、单独的各自表征。
值得注意的是,不管是从原始数据到联合表征,还是从联合表征到各自表征,这些步骤都可以是简单的模型,不过通常是多层的神经网络模型。
值得一提的是,在需要多种不同的表征,不管是联合表征还是各自表征的情况中,文字和图片的原始输入甚至是最开始的表征,不一定非要“端到端”(End-to-End)地从目前的数据中学习到。
实际上,利用提前从其他数据集中训练好的文字嵌入向量表达来作为文字的输入,是一个非常流行也是非常高效的做法。
有了数据表征之后,很自然地就是利用这些学习到的表征来进行下一步的任务。
我们这里就拿文档分类为例。
有了联合表征之后,下一步就是利用这个新的表征当做整个文档的特征,学习分类器来进行分类任务。
而对于独立的数据表征来说,通常的方法是针对各自表征分别学习一个分类器。
这样,我们就有了两个独立的分类器,一个用于文字信息,一个用于图片信息。
有了这两个分类器之后,我们再学习第三个分类器,根据前面两个分类器的分类结果,也就是说这个时候分类结果已经成为了新的特征,来进行第三个分类器的分类。
很明显,这个过程需要训练多个不同的分类器,为整个流程增加了不少复杂度。
其他多模数据建模应用
除了我刚才所说的表征的学习以及如何构建分类器以外,多模数据还有一些其他的富有挑战性的任务。
在有文字和图片的情况下,我们经常还需要在这两种模式之间进行转换,或者叫做“翻译”。
比如,在已知图片的情况下,如何能够产生一段准确的文字来描述这个图片;
或者是在已经有文字的情况下,如何找到甚至产生一张准确的图片。
当然,这样的“翻译”并不仅仅局限于文字图片之间,在其他的数据模式中,例如文字和语音之间、语音和图像之间等等,也是普遍存在的。
在这种“翻译”的基础上,更进一步的则是把文字和图片等信息“对接”(Align)起来。
比如,针对一组图片,我们能够根据图片的变化产生图片的描述信息。
还有一种应用叫做“可视化问答”(VisualQuestion&
Answering),是指利用图片和文字一起回答问题。
很显然,要想能够回答好问题,我们需要同时对图片和文字信息进行建模。
不管是“翻译”还是“可视化问答”这些任务,都是近些年来大量利用深度学习所带来的序列模型(SequentialModeling),特别是类似于RNN或者LSTM等模型的领域。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 搜索 技术 文档 理解