胡庆锋
(里外(深圳)网络科技有限公司,深圳 518000)
金融知识图谱是金融行业语义理解和知识搜索的基础技术,可以为风险评估、预测、反欺诈、精准营销、智能搜索等提供技术支撑。在金融知识图谱中,知识被表示为“事实”的集合,以(主语、谓语、宾语)三元组的形式表示,其中主语和宾语是实体,谓语是这些实体之间的关系。在金融知识图谱的构建过程中,金融实体的实时识别是其中的关键技术之一[1]。根据2020 年美国股票市场算法自动交易的调查报告,约73%的股票交易是由计算机算法自动发出的交易决策。通过使用自然语言处理与金融知识图谱技术,计算机的交易模型可以在第一时间知道上市公司的年度报告或季度业绩报告中传递的关键信息,另外通过对互联网新闻或帖子的内容分析,计算机可以知道新闻中的事件传达出怎样的情绪,表达的情绪是积极的,消极的,或者中立的。这种情绪分析的结果再结合金融知识图谱中的关联信息可用于推理并再做出交易决策。
在社交网络和网上论坛中,每时每刻都有新的信息在发布。如何利用金融知识图谱从这些非正式文本中及时准确的识别其中的金融实体,捕捉关键信息并辅助投资决策是本文研究的重点。同时,互联网上存在着大量的非正式文本,例如一个句子“what r ya talking abt”,其正式的写法应该是“What are you talking about?”。这就为模型从非正式文本中提取信息提出了要求。非正式文本是指包含大量缩写和拼错单词的文本。因此,系统必须纠正这些词。系统应该能够实时生成非正式形式的文本以避免延迟问题。此外,在尝试生成语法正确的文本时,不应改变文本的真实含义,因为这可能会对后续的任务产生反作用。
Reddit 已成为社交媒体驱动型交易员和投资者的活动中心,这些市场参与者已经证明自己有能力影响市场,美国股市上的不少股票已经被掀起了一场又一场的波动性风暴。典型例子如发生在2021 年1 月的游戏驿站轧空事件(或称游戏驿站空头挤压事件,指美国电子产品销售商游戏驿站(GameStop)股票发生持续轧空的现象,导致对部分对冲基金造成重大财务影响)。本文研究的社交文本数据来自于Reddit,虽然它似乎不太可能是这种金融事件的源头,但是这个论坛一直是互联网网民讨论金融信息的中心之一。
Reddit 的很多子论坛是为投资者提供交流服务的,投资者可以自由的对市场上正在发生的事情进行大量讨论。人类已经无法实时阅读如此庞杂的信息,因此我们设计了信息抽取模型来处理这些数据。
要获取到Reddit 的帖子文本数据,目前有两种方法。第一种方法我们可以使用requests 库直接与Reddit API 接口。第二种方法是使用PRAW库(Python Reddit API Wrapper),它在访问Reddit API 时添加了一个额外的抽象层。在这个项目中,我们将通过requests库直接与Reddit API 交互。
在构建这样的金融信息提取框架时,我们需要做的第一件事就是确定我们提取的数据实际上是关于什么的——为此我们将使用命名实体识别(named entity recognition)。
命名实体识别(named entity recognition)是自然语言处理中的基本任务之一。在本文中,金融知识图谱中的实体包括公司名字,监管机构,金融机构,投资基金,ETF(exchange-traded fund)等。要从互联网上庞杂的数据中获得想要的信息,第一步就是从各种正式或非正式的财经新闻或帖子中识别公司实体。对于风控业务而言,如果模型对某公司的负面信息在识别时没有召回,这种信息的遗漏可能会为业务造成巨大的损失,所以模型的召回率就非常关键。另一方面,对于计算机辅助投资决策或者算法自动交易的场景而言,实体识别的实时性也非常关键。互联网上的新闻内容是实时更新的,社交网络中的帖子内容也是实时更新的。所以对于以上金融业务场景,必须设计一种速度快,召回率高的金融实体识别模型。
随着BERT[3]等大型预训练语言模型的诞生,预训练模型和CRF 的经典组合,成为业界最常见的NER 模型。然而,由于BERT 模型规模巨大,其模型参数多,预测速度慢、容易过拟合等缺点也引起了学术界的广泛关注。近两年,各种轻量级版本的BERT 层出不穷,例如DistillBERT[8]、
FastBERT[7]、DistillBERT[8]、Albert[5]、Electra[2]等等。它们具有与BERT-base 相似的性能,但训练和预测速度提高了数倍。其中最有影响力的模型是由Google 开源的Albert 和Electra。
模型的问题是一方面,在实际金融知识图谱项目中,缺少高质量的标注数据是许多算法工程师面临的棘手问题。一些研究人员试图开发一些在训练数据稀疏的情况下提高训练效果的策略。例如J.Foley 等人[4]探索将命名实体识别认为视为搜索任务。其中将感兴趣的命名实体类作为搜索关键词,而搜索出来的文档则是为包含该实体的语料库该类。他们还研究了如何构建了一些人工特征并基于NER-CRF 模型将它们转换为搜索关键词。L. Chen 等[6]提出了一种基于BERT 的远程监督下的两阶段训练算法,从而避免去大量人工标注数据。
在社交网络文本中,存在着大量的不规范文本,包括名称缩写,简写,拼写错误等。例如苹果公司可能写为Apple Inc, Apple, APPL, APP 等。为解决非正式文本中的金融实体识别问题,我们采用了字符串编辑距离测量,实体在上下文共现频率统计,实体名称在嵌入式空间的距离类聚等技术挖掘清洗了一批公司实体及其简写和常见错误拼写。构建了一个包含实体别名,简写与常见错误拼写的金融知识图谱。存储知识图谱常常需要一个图数据库,它使我们可以绕开传统关系型数据库的一些不便之处。在传统数据库中,当我们用它来处理大量包含互连关系的数据时,常常需要多表join 操作,导致性能下降。在金融应用场景中,存在大量互联关系数据,如果我们使用传统数据库,就会面临应用层在获取数据是性能下降的问题。本文使用了Dgraph,它是一个开源图形数据库,为Web 规模的生产环境构建,用Go 编写。 Dgraph 数据库可水平扩展,同时保持操作高效以支持实时运行任意复杂的查询。这样我们就可以高效地执行分布式连接、过滤和排序这样的复杂问题。
基于以上金融知识图谱的数据,我们构建了一个字典树(trie-tree)对网络论坛上的金融讨论文本数据进行回标。总共的回标非正式金融文本句子为95万。基于这些自动生成的训练数据,我们对Albert(small)- CRF 模型进行了3 轮fine tune 训练。注意训练的轮次不宜太大,否则可能会产生过拟合问题。训练完成之后,我们事先构建的包含1 万非正式金融文本的测试数据上对模型进行了测试。测试环境:4 个TITAN Xp 型号的GPU 显卡;CPU:48 核,内存:128 GB。通过试验结果我们可以发现,Alber(tsmall)+Fine Tune 模型的准确率,召回率都优于基准对比模型。模型的推断速度达到了5129 QPS(quest per sencond),提升了金融实体识别的实时性,有利于快速找到金融决策信息。
表1 在互联网非正式文本上进行金融实体识别的模型对比测试实验
通过试验我们发现,采用基本的Ber(tbase)模型加上一层CRF,在互联网非正式文本上即可用取的还不错的识别效果,准确率89%,召回率79%。但是这种方法的识别速度是一个性能瓶颈,平均每秒钟能处理1016个环联网非正式金融文本句子。为了减少模型的参数数量,减少模型训练时间和推理时间,我们采用了两种参数减少技术。第一种技术是分解嵌入参数化(factorized embedding parameterization)。通过分解将大的词汇嵌入矩阵分成两个小矩阵,我们将隐层的层数与词嵌入句子的大小的解耦了。这种分离使我们可以很容易的增加隐层的层数,不会显著增加词嵌入的参数数量。第二种技术是跨层参数共享。这种技术可以防止参数增长随着网络的深度。这两种技术都显着减少了BERT 模型参数的数量,而且不会严重明显影响准确性,从而提高参数效率。试验中我们发现推理速度从1016 提高到了5000 左右,速度提升了5 倍,准确率只下降了2个百分点。其中艾伯特Alber(tsmall)+Fine Tune训练到方法在互联网金融文本中的准确率为92.7%,召回率93.6%,推理速度为每秒钟5129 个句子文本。
本文给出了如何从Reddit 网络论坛获得实时的金融讨论文本数据,通过实体识别模型,识别文本中蕴含的金融实体。针对互联网非正式文本存在着大量的不规范文本,包括名称缩写、简写、拼写错误等,我们构建了一个包含实体别名,简写与常见错误拼写的金融知识图谱,并训练了一个Albert(small)- CRF fine tune 模型。在试验测试中,其模型的准确率,召回率都优于基准对比模型。另外模型的推断速度达到了5129 QPS(quest per sencond),提升了金融实体识别的实时性。