我们的客户经常要处理大都非常相似却又不尽相同的大型文档流。鉴于每年处理如此之多的信息日益显得繁琐,我们提出了一个将此任务高精度自动化的技术解决方案。
不妨设想一下,有来自数百家合同方的数万张发票等待处理。按以前的做法,要实现信息的分类和提取的自动化,必须创建一个供应商数据库,再为每个类型的文档手动创建一个具体描述(设置各字段相对于彼此的线性关系信息)。过去客户实现这样一套解决方案要用去 3 到 6 个月的时间。
为简化并加快此项任务的完成,从总体上方便客户的工作,我们制定了一套新的聚类机制并开发出了 FastML 技术,再将这些工作整合为一体。
该解决方案中聚类的出现让供应商数据库维护成为了过去式,且 FastML 还具备基于用户学习工作的能力:此技术会将文档流划分为各个特定的组,再根据每个组学习不同的搜索模式。因此,新解决方案能更好地适应文档的外部差异,处理速度亦提高数倍。
但仍兼顾流程之先后缓急。
哪些情况会用到聚类
我们首先了解一下文档处理过程中分类与聚类的区别。
若某公司一直同少量(如十个)供应商合作,也清楚其文档类型和差异,则需要分类。这种情况下,分类器中的识别模型已经过充分训练且将正确进行处理。
若公司合作的对象不是十个、而是成千上万,则要用到聚类。 这类客户也不能准确掌握文档的内容和结构,不清楚其中类别的类型和数量。
聚类会让该客户轻松许多:无需维护供应商数据库,无需不停地更新它并更改设置 - 通过相似性函数实现一切工作的自动化。
相似性函数是量化两个对象之间相似性的函数。这种测量方法是相似对象取大值,而极不相似的对象取零或负值。聚类任务中的相似性函数会将新文档与现有聚类中的文件进行对比,从而决定将其划分至对应组还是创建一个新类。
例如,若某供应商更改了公司名,文档类型仍与之前相同,则将自动继续由现有聚类中的相同模型进行处理。若该供应商随名称一道更改了文档类型,则该技术将自动创建一个新聚类,而文档处理过程不会中断。
聚类算法
回到该客户的问题上来:它有一个非结构化文档和图像均以文件夹和子文件夹形式进行组织的庞大资料库。对其内容完全不得而知。该客户需要对大量文件进行聚类:确定对应内容从属于哪份文件。
聚类可解决此问题。以下即解决此问题的一种大致算法。
1. 首先,构建一个相似性函数。函数机制即返回一个反映一对文档之间相似程度的范围在 [0; 1] 内的值。这个在稍后将文档划分到聚类中时还要用到。顺便提一下,该函数本身还有几种不同的实现方式:分类器(如梯度分箱)、神经网络等。
该相似性函数既可解析式表达,亦可内置于算法。网格、SVD(奇异值分解)、图像等以及其组合均可作为功能使用。
- 将文档划分为类似网格的区域来创建网格,并找出每个单元格的属性和值。再将新文档的每个单元格的属性同聚类文档中对应单元格的属性进行匹配。
- SVD 是对具有相应出现频率的文字矩阵进行的奇异值分解。每份文档均可由其中使用的文字集及其出现频率表征。因此,文档的形式可以是左栏为文字(或其出现次数)而右栏为其在文档中各位置出现的次数(或仅出现次数)的矩阵。这样的矩阵会很大,也可以缩减为将其元素值作为属性的较小矩阵。
- 图像是表示卷积神经网络处理文档的结果的一组值。构建了图像(嵌入)的矢量表示。向网络中输入的是文档图像