作者介绍:谌明,浙江核新同花顺网络信息股份有限公司首席技术官,浙江省金融信息工程技术中心副主任,之江实验室金融大数据智能计算实验平台专家;曾主持多个国家重点项目,总投入资金数亿元;发表 SCI/EI 高水平学术论文 20 余篇,申请或授权发明专利 31 项;荣获中国 IT 年度人物杰出 CTO 和杰出工程师等奖项。
本文根据 谌明 老师在「澜舟NLP分享会」上的演讲整理。文内从业务角度介绍了大模型技术在同花顺业务上的应用以及未来探索的方向。
众所周知,大模型参数量大,通用能力强,综合性能好。但在同花顺业务场景中最初使用大模型的时候,发现用大模型的效果与传统方法差距不大,甚至有时候逊于原先传统的方法。所以最初在业务角度并不够重视,然而近期随着大模型技术的快速发展,我们也在逐步尝试将大模型在业务中落地,目前大模型在自然语言处理相关的业务里都取得了比传统模型更优的效果,下面详细介绍相关工作。
图 1
图 2
同花顺的问答业务主要是“同花顺问财”,主要场景在同花顺APP语音助手、问财APP端、问财Web端等。业务形式是将用户输入的问句解析为 condition (比如股票标的、指标、时间),然后从同花顺的后台海量的金融数据中取数并生成回答、表格等(如图 2 右侧所示)。
问句涉及的领域一般领域包括常见的征信市场、股市、基金市场、债券,也会包括一些宏观业务等。目前问财的用户每日问句数量大概在 1000 万左右,累计不同问句数量约 5 亿。用户量也很大,大约 300+万。这个问句量和用户量在问答系统中应该算非常大的。
图 3
问财对话系统在大模型的应用上有几个难点。
首先,它偏重金融业务知识,并且对于时效性要求很高。 这里特别说明一下“时效性”的问题。之前很多典型的问答系统一般会有这类常识问题,比如“世界最高的山是什么?”“中国的首都是哪里?”,但在问财里碰到的用户提问往往是“今天的股价”,而提到股价就涉及到“今天股价的变化情况”;或者用户问“某个公司的业绩如何”等等,这里就涉及到时间维度,因为每个公司年报、半年报或季度报发布的时间点不同,如果用户在前一天问,系统回答的是年报的结果;如果用户在今天问,系统可能就要回答季报的内容了,所以时效性问题非常重要,要保证用户获得最新的信息。
第二个难点是精确性问题。现在很多大模型的知识是通用的、持久不变的知识,但在问财系统里的知识在不同情况下会有一些变化,内含了一些金融逻辑。 如果出现给用户返回的结果错误,就可能会导致很严重的问题,比如给用户返回了数据错误,就可能导致用户投资或者其他决策上的偏差,造成财产损失。
总体来说,问答是比较难做的一个业务方向。因此我们之前采取了比较保守策略,使用了一套需要大量人工的规则系统。常常有人说,科研界和工业界之间有巨大的鸿沟,科研界全是深度学习,到了工业界全是用规则来做。确实在我们的业务模型里,规则占比非常大,也是因为涉及用户财产问题,技术上会比较保守。
下面具体介绍问答系统里大模型应用的经验和取得的成果。
图 4
图 4 右侧是问财系统的框架示意图,其中“通用语义识别”之前是基于大量规则做的,投入人力非常大,标注人员有几十人,做了十年左右。这套规则系统准确率 90%,覆盖语义 2 万多,整体效果基本能满足业务需求。但它面临的问题是,1)这套系统积累了很多年才达到目前的效果,而长尾问题需要花非常长的时间来解决。2)新的知识不断地融入涌入和迭代,全靠规则来处理,会有非常大的问题。
所以从前两年开始我们采用深度学习模型来做通用语义识别。图 4 有一个通用语义识别的小例子,输入问句是:“董事长持股大于 50 万”,解析时主干识别需要识别出“持有”和“大于”,并且要识别出“大于”这个语义是包含“持有”的,即“(大于(持有))”,语义角色需要识别出“持股”语义主体是“董事长”,“大于”的“客体”是“50 万”。
目前通用语义识别方面大模型的效果已经慢慢显现了。前****两年我们采用的是常规深度学习模型 TextCNN 准确率为 88%,后来和澜舟合作使用了孟子Mengzi 轻量化预训练模型,从图 4 左下角表格看,效果有显著的提升。 考虑到线上耗时问题,我们使用的是参数较少的模型来做,比如孟子BERT-base准确率可以达到 94.16%,Electra-small 模型提升了 4% 是因为做了数据迭代,加了更多数据,进一步提升了效果,后续孟子BERT模型再迭代数据也会有更多提升。
而领域语义识别主要是针对特定的金融领域的识别,涉及到 NER、linking 和一些谓词推理。 我们现在对NER,用得比较多的是时间、机构、地址、人名和数量 5 种。比如,输入是“马云在杭州参观了同花顺 2 次”,就需要将“今天”、“同花顺”、“杭州”、“马云”、“2 次”等实体识别出来;而对部分实体词,需要linking到数据库中的标准词上,如“同花顺”需要 linking 到上市公司“浙江核新同花顺网络信息股份有限公司”,但“同花顺”可能会出现在纸牌类游戏或者其他场景,因此需要在这个金融场景下,优化 linking。
图 5
以 NER 任务为例,我们尝试用常规的深度模型 LSTM + CRF 串联的 F1 值只有 92% 左右,使用大模型之后,F1 值可以达到 96~97%,提升了4~5% 。如果使用更大规模的模型,效果还有更多提升空间,但是考虑到经济问题和服务耗时与性能问题,目前还是用的参数量较小的 BERT-base 等。
图 6
上面的问答系统主要是取数问题,而对话系统主要涉及多引擎的对话分发、跨引擎的多轮对话异常流程调度等对话管理技术,行业内一般做单一的任务型对话或者开放型对话,但是我们的业务场景往往要求先做意图识别和分发,再同时支持任务型和开发型的对话。
目前同花顺业务中的对话机器人分为云端版和企业版,分别满足 C 端和 B 端的客户需求。C 端主要是智能投顾的业务中的“问财助手”,B 端主要是来电助理、数字人客服、智能外呼机器人等产品。
C 端的智能投顾业务通过对话技术,根据用户画像(投资目标及风险承受能力)提供投资建议。首先要拿到用户的背景知识,比如他个人的仓位盈亏,然后给出一些支撑压力位指标和投资建议。其中有一个“槽位”的概念, “槽位”是人工事前定义,我们从投资角度定义了 16 种槽位,包括投资标的、意向操作、盈亏状态等等。所以当用户问“贵州茅台基本面怎么样?”,我们首先要通过槽位抽取的模型识别出“贵州茅台”是“投资标的”,“基本面”是“目的知识点”。目前我们用了四层中文 BERT 模型,槽位可用度大概是 87% 左右。
B 端智能营销机器人是通过主动外呼的方式,向潜在客户进行产品营销,产品涉及房地产、运营商、银行理财产品的营销,需要识别用户回复的意图、并利用领域知识进行合理回复。这里需要使用意图识别、追问识别、答案排序等模型。以用户意图识别为例,需要引入领域知识,在用户接通电话以后,我们会根据用户的意图做 “肯定/拒绝/在忙/暂时不需要”等14 种任务分类,使用 3 层 RoBERTa 模型 ACC 准确率为 91%,使用 24 层 RoBERTa 可以提升两个点左右。
B 端智能客服机器人业务,我们对接了中国移动的西安电信、陕西移动等运营商的客服机器人,同样是接听用户来电,先做用户的意图和语义识别,但在客服业务中用户的语义会比较固定,我们梳理之后有几百种,所以我们会先做语义相似句子匹配,再选择匹配度高的句子进行回复。我们对比了 2 层 BERT、2 层 RoBERTa、12 层 RoBERTa,F1 值分别是 84.01%、84.66%、87.68%,从成本角度看,2 层 RoBERTa 更实用。
信息抽取应用场景主要是知识图谱构建和金融数据库构建两个方面。
我们业务中几乎所有数据组织形式都是以图谱为基础,金融知识图谱在风控、投研、投顾、银行理赔等等场景都非常重要,业务往往需要通过图谱梳理一些关系,比如用户询问公司与法人关系以判断一些关联风险,然后做推理决策。所以金融知识图谱对我们来说是非常大的课题,目前我们已经做了宏观经济图谱、A股大盘图谱、A 股个股事件图谱等。
图谱的数据来源依赖信息抽取,抽取的数据源包括研报、新闻资讯等,从研报和新闻资讯中自动抽取因果关系的三元组(因-影响-果) ,如图 7 所示。
图 7
这些因果关系的三元组抽取、事件论元抽取,都是通过大模型做的。早前使用的是 Char Embedding + LSTM,F1 不到 70%,使用我们自己研发的 BERT 模型之后 F1 达到了 77%,使用澜舟的孟子Mengzi-Fin-base 模型之后 F1 提升到了 78.5%。
在知识图谱之上,我们需要进一步优化的方向是金融数据库的构建。同花顺 iFind 金融数据库是业内最大的金融数据库之一,很多金融机构基于 iFind 数据库做投研、投顾。
图 8
图 8 右侧是一个具体的例子,一般来说上市公司的诉讼对金融投资有重要的风险提示作用。我们需要从诉讼公告中抽取执行情况、违规案例说明、对公司影响等信息。绿色的部分是违规案例说明,还需要进一步从违规案例说明里抽取诉讼详情,包括原告、被告、诉讼请求、违约金等信息。
对此我们尝试了不同的模型(图 8 表格),常规深度模型 word2vec F1 值为 83.15%,我们还尝试了 MacBERT、澜舟的孟子****Mengzi等模型,在优化增强(比如数据增强和 loss 优化)的条件下,澜舟孟子Mengzi 的 F1 值可以达到 96.67%。
图 9
我们有一个舆情系统叫“同花顺企洞察”,ToC 版本叫“快查”,用户范围比较广,公司、个人、监管机构等都会用来做参考,如政府会用于招商引资和精准营销。
舆情系统的一个重要的环节是“机构名称的识别”,抽象出来是“长文本NER任务”(如上图所示),机构名称抽取的难点是除了标准名称还有很多简称、别名或者其他叫法,一开始我们用 LSTM+ CRF 的效果不佳,F1 不到 70%,之后结合知识图谱+大模型,目前 F1 可以达到 86.4%,符合上线要求。
舆情监控业务中还有新闻资讯风险识别场景,新闻资讯正面还是负面可能会影响股价,如何第一时间告诉投资人新闻的正面/负面是比较大的课题。
图 10
业内一般做法是人工识别、打标签,这样的效率比较低,而新闻资讯的时效性比较高,我们的做法是机器先打标签,然后人工识别校验一次。这里的较难的关键点是除了正负面标签之外,还需要对负面信息进一步分析,提示风险在哪里。
比如图 10 的例子,判断为负面后,我们需要做风险归类,“法人变更”到底是管理风险还是政策风险导致的法人变更,这就需要进一步判断。之前我们用常规模型来做的时候准确率最多到 59%,目前使用大模型,考虑到本文较长且性能要求较高,因此使用参数较少的 tinyBERT, 准确率是 69.45%,后续还需要做更多优化工作。
大量研究表明通过调整预训练任务、使用更多训练数据、使用领域语料等方式,可以对原始的大规模预训练模型做进一步优化,达到更好的效果。比如通过增加训练语料、延长训练时间、移除“next sentence”任务、动态 mask 等优化方法,可以获得比 BERT 效果更好的模型;在 BERT 基础上,通过使用领域数据(DAPT)或任务数据(TAPT)进行第二阶段预训练,可以使模型在下游任务上表现得比 BERT更好。
为了进一步提升大模型在实际业务中的效果,同花顺与澜舟科技合作,引入孟子Mengzi 模型中的技术 ,针对大模型进行 Continue-Train 训练,让模型更适用于金融相关的 NLP 任务 ,主要有以下几点优化:
图 11
从图 11 能看出,Continue-Train 方面实际优化效果错很不错,比如长文本阅读理解有 3% 左右的提升。在这方面,我们也希望后续和澜舟科技及学术界一起探 索。
我们大部分的服务其实本质是一个免费的流量型服务,为其他的业务导流,所以对资源的使用要求做到轻量化,提高性能、减少耗时。大模型的参数增加会带来效果的提升,但是在实际应用的经济角度考虑,宁可损失一些效果,尽量减少对资源的占用,所以我们投入了很大的精力做“模型轻量化”工作。
图12
图 12 中有两个实际业务的例子,我们对模型预测耗时有非常严格的要求,因为响应时间太慢会导致用户体验变差,一般来说会要求不能超过 100ms,有部分模型甚至要求耗时在 20ms~50ms。所以我们用了知识蒸馏、剪枝、量化等常见的轻量化技术。比如“用户问句相似问生成”这个任务,我们用到了知识蒸馏技术,将 10 层以上的大模型蒸馏成 3 层的小模型,性能上会有很大的提升,同时保证准确率不会有大幅下降的情况,GPT2-chinese-12 层单样本 CPU 生成耗时约为 1s,蒸馏为 3 层之后,耗时降为 100ms。
我们在模型轻量化上还有一个探索方向是利用 past key values 加速推理。
图 13
如上图所示,对采用 DECODE 进行生成推断的模型,在预测下一个词时,需要执行 masked 注意力机制:每个 token 需要和其左侧的所有 token 计算 attention,因此,对于长度为 n 的序列,需要做 n(n-1)/2 次向量的生成和计算。
图 14
如图 14 所示,由于下一个 token 向量的计算与其左侧 token 的计算路径一致,因此可以保存左侧 token 的计算结果并传入当前 token 的计算,这样每个 token只 需完成一次向量的计算,共计 n 次向量的生成和计算,从而节省大量时间,而且这个加速方法不会带来其他影响,不会使指标下降。
这个技术目前主要应用在对话问句改写相关业务,包括用户的澄清问句改写。举个例子,用户问“最低点的股票是什么”,这里面可能有很多种意思,比如“股价创新低的股票”、“股价即将涨的股票”,我们需要对此做一个预测。在使用加速推理技术后,单样本 CPU生成耗时从 600ms 减少到了 100ms 左右。
大模型技术在同花顺业务中的应用基本都有比较好的通用性,并且带来了比较好的性能提升,我们也希望在医疗、法律、教育等领域的子公司业务中推广,同时和澜舟科技以及学术界的老师们合作,把大模型用得更好,谢谢大家。
— END —