一份文档放在你面前,哪一部分是表格,哪一部分是图片,哪一部分是段落,每个段落是在说什么,一目了然,你内心吐槽,这还需要任何思考嘛!
但是计算机比较文盲,如果你不告诉它这一块是什么东西,它就不知道是什么东西,对它来说,这些都是二进制数据。
怎么办呢?这篇文章正围绕此展开,一场席卷几十亿群体的文盲行动就此展开。
作者介绍:
王爽,文因互联工程总监,觉得自然语言处理挺好玩,日常工作主要是从金融文档中挖掘信息,喜欢文本结构化相关技术,期待有一天能用在历史文献的处理上。最近我正在找靠谱前端工程师、自然语言处理工程师,如果感兴趣,就加入我们吧,详见文末。
王爽:大家好,我是王爽,今天给大家讲讲如何拯救几十亿文盲(笑)好吧,严肃一点,《如何让机器读懂文档》。
先说说为什么要做这件事。
我们知道,人类的知识是要存储到文档当中的。先给大家看三张图片。
最左侧的一张图片是著名的亚历山大图书馆,但是它是希腊式文化的文化中心,就是因为这个图书馆太著名了,基本上所有的古希腊经典都囊括进来,导致它虽然不在希腊,反而成了希腊式文化的中心。
欧洲进入中世纪,希腊式文化衰败,文化中心到了阿拉伯帝国的巴格达,因为巴格达有一个非常著名的图书馆叫智慧宫图书馆,中间那幅图就是对这座图书馆的想象,这个图书馆更不得了,直接开启了整个伊斯兰文化的黄金时代。
当然不只是国外了,中国国内有很多的图书馆,右图是天一阁藏阁楼里面的一些藏书。基本上每个地方只要有藏书楼,它就是这个区域的文化中心。
这么多的知识存储在这些文档中,都是给人类准备的,计算机并不能理解。这样一个强大的“劳动力”竟然是个文盲!太可惜了!
怎么让计算机理解文档?这是一个开放命题,而且是非常活跃的研究领域。
文因互联在这方面做了非常多的工作,但因为这个问题本身非常宏大,最终还是集中到了财务文档这个子领域上。
从宏观上来讲,这个过程主要分成两个步骤:第一个步骤是文档结构化,把文档中所有的信息点提取出来;第二个步骤是建立知识图谱,知识图谱的作用就是把提取出来的信息点互相关联起来,最终成为计算机可以理解的知识。
我们今天的侧重点主要在于第一步,文档结构化。
拯救文盲行动开始——
机器看到的文档是什么样子的?
我们以PDF文档为例,详细讲解一下,文档结构化这一块到底在做什么事情。
第一件事儿,就是要让机器读懂信息。
下面这张图,最左边是一个企业参与的所有仲裁事件的文档,我们人一看就明白这些东西,哪一部分内容是表格,哪一部分是图,或者哪一部分是段落,一目了然,不需要任何思考,因为我们的大脑经过多年的进化,充分适应了图表混排的格式。
但是计算机比较文盲,如果你不告诉它这一块是什么东西,它就不知道是什么东西。计算机看来,这份文档其实只有字符以及其位置等简单的信息,如中间这张图显示的那样,并没有我们人看PDF时的那种表格结构。
PDF内部只是规定了比如说“万”这个字,它应该在屏幕上什么位置,或者说这个线条,应该在屏幕上什么位置出现。这些元素本身没有任何语义上的信息。
我们的工作就是把完全没有语义信息的数据,通过一步步抽象、一步步计算,最终达到结构化数据的效果,正如最右边这张图示意的那样。
文档提取的技术难点
文档结构化过程中,到底有什么技术难点呢?
整个过程大体上分为文档解析,版面分析,篇章分析,表格提取,文本提取等五个步骤。
首先需要让机器读懂人是如何认知文章结构的。这需要运用计算机视觉的技术,计算人看到的结构是什么样的。以及自然语言处理的技术,计算这些字符组合在一起是如何被人理解的,所以需要做好版面分析与篇章分析,这两个前置工作。
在此基础上继续用更深层次的提取技术,从表格中、文本中把相关的信息提取出来。这些技术就包括深度神经网络,基于金融领域独有的知识与逻辑规则开发出来的提取技术等等。
我们具体用什么技术来解决这些难点呢?这个部分就很细节了,可以说每一步都要用很多种技术的综合处理来解决。
举一个具体的小点,比如说章节结构这一个小点,我怎么能知道这句话是描述一个章节的标题,我们就可以使用深度学习里面的LSTM Classifier来做一些判断。此外,我们也会针对具体的文档结构归纳出来一些规则,来辅助进行推理。
再比如命名实体识别这个环节,其实就从文本中识别出来各种各样的公司、财务指标这些信息,我们会有机会使用传统的基于机器学习的条件随机场算法来做一些推断。因为我们累计了大量的公司名、人名、财务指标实体库,我们会把这些信息再综合利用上,对条件随机场的输出做一些后处理,来提高precision。这张图里的信息点也比较多,我剩下的都不再一一讲解了。
走完了所有的流程,文盲拯救完成了,这些家伙从此可以愉快地提取文档信息了,基本达到小学生水平。
第二步,如何用知识图谱把提取出来的信息点互相关联起来,最终成为计算机可以理解的知识,顺利拿到高中毕业证,请听下回分解。
结构化数据有什么用?
假设解决了全部问题,拿到了一份结构化数据,当然想做点事。
怎么才能样最大化程度地利用它的价值,这也是一个开放问题,因为数据的使用方式跟具体的应用场景是分不开的。脱离应用场景来谈数据应用,是一种耍流氓的行为。
对于文因互联这家公司来讲,我们主要关注的是金融领域,因此首选的是金融文档,比如:
- 某某公司 2017 年年度报告.pdf
- 关于参股公司2017年度现金分红的公告.pdf
- 关于对某某股份有限公司的年报问询函.docx
- 本期发生额及余额试算平衡表.xls
- 某某房屋所有权证.jpg
- 某公司和某公司战略合作协议.png
- ……
将其中有价值的字段信息提取出来,为进一步深度研究和加工做准备。
最简单的方式就是直接调用,API 一键调用或者导出 EXCEL 均可,我们当前提供的数据包括但不限于:
基于数据进一步分析,能探索出不少有意思的结论。比如人事变动公告,详见文章:我们研究了2017年3653个上市公司高管的离职原因,原来… 以及 知识提取的一种应用,从上市公司年报中抽取因果关系
除此之外,我们还会和各种类型的金融逻辑结合起来,进一步加工,解决一些流程自动化的问题。
比如监管方向,监管机构对企业有很多监管逻辑,人工审查费时费力,有了结构化数据便进一步加工,结合业务逻辑做到自动预警。
比如:这个企业有远高于同行业的毛利率,更换过审计事务所或 CFO,有隐瞒关联交易的情形或收入严重依赖关联交易等等。
如果我们不停地往这中间加各种监管的逻辑,最终我们就得到了监管自动化这样一个东西。
类似的还有审计自动化,企业发布的年报中,会描述很多财务指标,这些财务指标其实并不是孤立的关系,比如说对于总资产这个财务指标,它要等于流动资产加上非流动资产。
我们从文档中拿到它的财务指标之后,可以把这三个值套入公式,如果它们不相等,就说明这里面肯定是某一个值出了问题,这样就可以避免很多财务指标上的低级错误,能节省很多的人力成本。
报告自动化同理,通过聚合公司定期报告、临时公告、即时新闻等多种信息源,自动生成报告,详见: 企业基本信息报告标准件以及报告自动化定制服务
除了金融领域,这一项技术也能广泛应用于其他领域。
如果你对运用文档结构化技术满足业务需求感兴趣,欢迎直接和商务人员联络,技术可实现企业系统私有化部署,详情可咨询商务人员,她会很愿意和你聊聊。
拓展阅读:
加入我们
如果你还不熟悉文因互联:文因互联是位于北京的智能金融创业公司。技术团队来自MIT、RPI、IBM、Samsung等知名大学和公司,深耕人工智能十余年,是知识图谱领域的领军团队。我们用人工智能技术解决交易所、银行、券商等面临的投资研究、自动化监管、投资顾问等问题。经过两轮融资,财务健康,目前市场拓展顺利,也建立了良好的行业口碑。
以下招聘岗位职责描述仅供参考,请不要让它们限制住你的想象和勇气。
前端工程师
【岗位职责】
1. 负责与产品需求和设计团队、开发架构团队密切配合,完成前端框架设计和技术实现方案
2. 负责按照各类需求文档和设计文档,完成前端代码开发
3. 负责创建用户友好、符合标准的跨浏览器应用
4. 遵循并参与项目开发规范和开发流程
【优先考虑】
1. 精通 HTML5、CSS3、ES6 等 Web 前端开发技术
2. 熟悉 JavaScript 面向对象编程、函数式编程及其相关设计模式
3. 熟悉 React /Vue技术栈,了解 Redux/Vuex 或基于它们二次开发的状态管理框架
4. 熟悉 webpack、Babel、npm/Yarn 等现代前端开发工具
NLP工程师
【岗位职责】
1. 信息抽取、文本摘要、自动问答等方面的研发以及语言资源/知识库维护
2. 金融知识图谱构建
3. 客户项目开发
【优先考虑】
1. 有自然语言处理经验,熟悉分词、实体识别等NLP基本模块(知道基本原理,并且使用过某个相关库)
2. 有Python项目开发经验,熟悉collections标准库下的数据结构
3. 可以完全在linux下工作
4. 有git开发项目经验,并能描述自己的workflow
5. 良好的沟通能力,一定的学习能力
【加分项】
1. 遵循良好的代码风格(如Google Style或PEP8)。
2. 有全周期项目开发经验加分。有开源项目、个人微博、博客证明自己者优先
3. 熟悉机器学习、深度学习,有使用深度学习在NLP中的应用经验,熟悉至少一种开源库,如tensorflow。
商务经理
【岗位职责】
1. 完成年度商务指标和相应营销工作
2. 完成所在区域金融客户的跟踪推进工作。包括拜访区域内各主要银行、券商等金融机构、发展维护渠道合作伙伴关系
3. 组织协调公司资源,完成与客户签约相关的招投标、谈判、签约、收款及售后客户关系工作
4.维护本地金融客户日常关系,收集反馈客户对公司产品和服务等方面的意见
【优先考虑】
1. 统招本科及以上学历,特别优秀者可放宽,专业、工作经验不限。
2. 喜欢与客户交流沟通,能适度出差
3. 具有良好的自我学习能力与团队合作精神,有强烈责任感。
4.对金融、银行、证券等业务熟悉的优先,有计算机专业背景的优先。
数据标注实习生
【岗位职责】
1. 使用标注工具,针对文本数据进行归类、整理、标注。
2. 学习标注规则,及时反馈标注质量及进度。
3. (如有编程能力)协助编写数据清理和处理代码。
【优先考虑】
1. 本科或硕士在校生优先,专业不限。
2. 对数据敏感,细致踏实;有较强的沟通能力。
3. 每周出勤时间不少于3天,最好能连续实习两个月。
【加分项】(非必须项):
1. 有一定的编程能力,熟悉 Python。
2. 有数据标注和校验经验。
3. 有语言学、自然语言处理或金融、财会背景。
是人才我们都不想错过,欢迎你过来一起聊聊。公司博客是 http://blog.memect.cn/ 主页是 http://memect.cn/
简历投递地址:hr@memect.co 等着你来!
发表回复