量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,曾荣获AMMA优秀品牌力、优秀洞察力大奖,连续4年被腾讯云+社区评选为“年度最佳作者”。
来自:Man Group
自2022年11月发布以来,ChatGPT已经席卷了整个世界。ChatGPT 3.5拥有约1750亿个参数和约570GB的文本数据训练集,其功能非常强大。在写这篇文章的时候,最新版本是GPT-4,它的功能更强大。这两个版本都非常易于使用,并可以应用于广泛的语言任务,从写诗到总结文本。在本文中,我们研究了它在进行金融情感分析方面的能力:即分析金融文本(如财报电话会议记录)以确定其传达的语气是积极的、消极的还是中性的。我们使用了各种提示技巧来评估其能力,并将其与基准的词性计数方法进行比较。金融领域情感分析模型的演变
情感分析是金融领域中应用于文本数据的主要方法之一,有时还会针对更专业的问题使用定向情感分析。定向情感分析评估了关于特定感兴趣的陈述的情感。例如,考虑这样一个陈述:“资产管理增加,但我们的利润减少了”。该陈述的整体情感可能被分类为中性甚至是负面的。然而,如果我们特别关心对“资产管理”的情感,定向情感分析会得出这个句子是积极的,而对“利润”的情感则是负面的。在学术金融文献中,情感分析的经典基准之一是基于字典的方法,这些方法将特定词汇映射到分配的情感上,例如,“改善”可能被视为积极的词汇。在2007年,Paul Tetlock首次引入了这项技术。在他的论文中,他使用了一个心理社会词典,用这些词语的极性,来分析新闻文章,并根据每个情感类别的单词计数来做出市场预测。此后,专门针对金融领域制定了更精确和专业的词典。2010年发布的Loughran McDonald(LM)词典是一个非常受欢迎的情感词汇表,专为金融背景量身定制,包括了来自“AARDVARK”到“ZYMURGY”的85131个不同词汇(2355个负面词汇,354个积极词汇,82422个中性词汇)。它相对于心理社会词典的优势在于,它考虑了金融领域之外也会带有情感的中性金融特定词汇,比如“liability”这个词。例如,关于负债的会计报表不会仅仅因为包含了“liability”这个词而被错误地归类为负面情感。最近,大型语言模型(Large Language Models,LLMs)已经成为更复杂的基于文本的应用程序的普遍构建模块。这些统计模型通常在大量文本上进行训练,以执行诸如预测句子中的下一个词、填补空白或决定哪个句子最有可能跟随等任务。尽管这些训练任务看似简单,但它们允许模型学习跨越广泛文本数据的模式,已经被证明可以使它们捕获、压缩和内化人类知识。LLMs基于深度学习这一机器学习分支,从技术层面来看,LLMs被设计为具有数百亿到数千亿参数的人工神经网络,其中很大一部分模型使用Transformer神经架构。LLMs自BER诞生以来一直存在,BERT于2018年发布,但最近随着训练数据和模型规模的增加,它们开始展现出越来越强大的能力。今天,一些知名的LLMs包括:LaMDA、PaLM(谷歌)、GPT家族(OpenAI)、Claude(Antropic)、Gopher和Chinchilla(DeepMind)、LLaMA(Meta)以及BloombergGPT。ChatGPT,由OpenAI开发的专有聊天机器人,目前是最广泛使用的LLMs之一。ChatGPT成功的关键因素之一是其遵循指令的能力。指令遵循是通过一种称为“从人类反馈中进行强化学习”的过程(Reinforcement Learning from Human Feedback,RLHF)内置到模型中的。这个过程结合了监督微调,其中模型从人类创建的问题的答案示例(“提示”)中学习,以及一种强化学习过程,其中模型根据一个奖励模型的反馈来评估其对提示的响应,而该奖励模型本身被训练以遵循人类偏好。这个RLHF过程有助于引导模型生成更有帮助和安全的回应。这使得ChatGPT非常用户友好:用户只需提供自然语言提示,通常ChatGPT能够在各种输入情境下提供合适的回应。由于其易用性,从业者和学者已经开始将ChatGPT应用于金融领域的任务,包括情感分析。这使我们产生了兴趣,当要求ChatGPT执行定向金融情感分析任务时,它的表现如何?它是否能胜过同样简单的从LM词典中计算单词数量来分析情感?数据
我们使用的数据集包含大约1000个句子,这些句子来自财报电话会议记录,每个句子都由人工标注者标记为与目标“Margin”(共932个陈述:371个积极,156个消极,405个中性)相关的积极(p)、消极(n)或中性(i)情感。然后,这些陈述用于进行提示工程,或者为ChatGPT设计最佳提示。另外,还有大约1000个未见过的带有标签的句子,用作最终测试集。Sentence: “This seems to imply that you’re happy with the margin improvement at the expense of recruitment and volumes.”
Label: 'p'
Sentence: “We shipped more products off of lower margin technology than we did higher margin technology.”
Sentence: “Gross margin and fixed costs.”
测试结果
为了分析LM和ChatGPT的表现,我们使用F1分数进行比较。这个度量标准通过取两者的调和平均来平衡“p”、“n”和“i”三个类别的召回率和精确率。召回率告诉我们模型捕获了人工标注者认为属于某个类别的真正正例(句子),而精确率告诉我们模型对于分类为某个类别的句子实际上是否属于正确的类别。当存在高类别不平衡时,采用这种正确构建的平均值尤为重要。F1分数的范围从0到1,F1为1表示完美复制了人类判断。与文献中的方法一致,对于基于LM词典的方法,我们只需计算在我们的数据集中的句子中情感词的出现次数,每个正面词+1分,每个负面词-1分,并根据每个句子的情感分数的总和,我们然后将其分类为积极、消极或中性。在我们的测试集上,这个评估的F1分数为0.57。如果我们专注于一些字典方法误分类的句子,即使是最好的单词计数方法的局限性也变得清晰。首先,它只考虑了整体情感,而不是定向情感。此外,否定词会引发问题,例如,该方法会将“not good”解释为积极的,仅仅因为存在“good”这个词。最后,逐个评估每个词汇无法考虑句子的上下文。例如,“…高利润的业务对我们公司有利”被字典分类为“i”,因为“高”本身没有情感,而模型没有上下文来理解“高利润”是有益的。正是这些自然语言中的长距离上下文依赖关系,更复杂的模型如LLMs旨在更成功地捕捉,而不是简单的单词计数方法。尽管ChatGPT可以通过用户生成的提示轻松使用,但它也有自己的细微差别和缺点,因为模型接收的提示可以极大地影响其响应。此外,众所周知,ChatGPT经常会提供听起来很合理但事实不正确的回应(称为幻觉)。为了最小化这一问题并提高准确性,研究不同提示如何影响预测质量非常重要。找到最佳提示的过程被称为提示工程,目前是一个积极研究的领域。我们研究了三种最常见的提高提示效果的方法:few shot prompting, personas, 和 Chain of Thought (CoT) prompting。Zero-shot prompts是指没有额外上下文的情况下指定任务的提示,而few shot prompting(也称为上下文学习)在提示中提供一个或多个示例,以帮助模型学习如何完成任务。给ChatGPT一个人物角色也被认为可能有助于提高性能,因为它可以帮助模型对行话敏感,促使其更多地关注特定主题的知识。与此同时,CoT提示涉及要求模型解释生成答案时所遵循的步骤,同时可能提供示例来说明这种CoT推理。以这种方式分解输出可以提高模型的推理能力。为了有效地测试ChatGPT的定向情感分析能力,我们首先确定了ChatGPT性能的上限。我们在明确给定了句子的情感分类结果的情况下,要求它对我们数据集中的每个陈述进行分类,使用了以下提示:“Perform a sentiment analysis of the following statement, relating to margins and return ‘p’ if the sentiment expressed is positive, ‘n’ if it is negative, and ‘i’ if it is neutral:The following sentence: [Statement A] should output [sentiment].Make sure you output only one letter.”
这样的测试的F1分数为0.9。值得注意的是,上限不是1.0:即使答案明确提供给ChatGPT,有一小部分时间它与人工标注者不同意,突显了它不一定像人类那样以一种人类可能理解的方式“理解”提示。得到了模型的上限之后,我们使用以下的提示作为基准:“What is the sentiment of this statement: [Statement], with regards to margins. Output ‘p’ if it has positive sentiment, ‘n’ if it has negative sentiment and ‘i’ if it is neutral.”我们发现,仅向基准提示中添加一个示例来表示三个类别中的任何一个,都会导致模型将陈述过多地分类为那个类别,这表明通过提示可能会隐式地将偏见编码到ChatGPT的输出中(这也在学术文献中看到的效应)。为三个类别中的所有类别添加示例提高了训练数据的结果,F1分数从0.79(基线)提高到0.8。向模型提供一个角色(persona)会降低整体性能。例如,当要求ChatGPT扮演一个随机人时,它会大幅度地将陈述过多地分类为中性,表现不如LM词典方法。这可能可以解释为一个几乎没有金融知识的人很可能会将陈述分类为中性,除非它们明显积极或消极。相反,如果给定金融投资者的角色,模型的性能明显优于随机人,尽管金融投资者的角色导致它将陈述过多地分类为积极,表明ChatGPT将某种看涨情绪与这一角色联系起来。可以看到ChatGPT从提示中继承的隐式偏见,突显了精心设计的提示的重要性,以避免意外后果。然后,我们使用了一种简单的CoT提示方式,要求ChatGPT解释其分类决策的推理过程。我们使用的提示是:“What is the sentiment of this statement: ____ with regards to margins. Output a single letter and nothing else: ‘p’ for positive sentiment, ‘n’ for negative sentiment and ‘i’ if the statement is neutral. Append an explanation of your reasoning onto the end of your output.”然而,我们发现这也降低了我们特定问题的F1分数。值得注意的是,虽然人物角色和CoT提示在了解模型的解释性方面很有用,但它们都没有显著提高性能。因此,我们考虑更多特定情况下的变化以及这些技术的组合。在尝试了不同技术的后,我们在训练集上产生了性能最佳的提示,该提示在训练数据上的F1分数为0.81。该提示包括提供三个简单的示例,提醒模型只考虑定向情感,并要求模型只输出一个字母。“Perform a sentiment analysis of the following statement, relating to margins and return ‘p’ if the sentiment expressed is positive, ‘n’ if it is negative, and ‘i’ if it is neutral: ___. Limit your response to one letter and ensure you are only considering sentiment with regards to margins.”Here are some examples:
“Margins are going up” should return ‘p’.
“Margins are going down” should return ‘n’.
“I talked a little bit on margins” should return ‘i’.
我们还尝试了各种其他想法,但这些在训练集上也没有证明是有用的。这些尝试包括在对陈述进行分类之前询问ChatGPT的确定性,要求提供一个数字值来反映积极性/消极性,并对类别设置不同的边界。这些结果进一步强调了提示工程不能简单地被看作是提供“直观”的提示修改以改善输出的过程:对于像我们设置中的定向情感分析这样的特定上下文,这些提示工程的“技巧”中很少有能够提高性能的。总结
自2007年以来,金融情感分析已经取得了长足的进步。Tetlock开始使用简单的方法来分析情感,而今天我们拥有更加复杂但同样易于使用的工具,如ChatGPT。基准的ChatGPT提示在F1分数上超过词性计数法17个点,进一步的提示工程将F1分数提高到0.81。这两个改进都非常令人印象深刻,后一个结果显示了提示工程的重要性(以及如何实现提示工程的好处并不是微不足道的)。因此,有人可能会合理地问,我们是否已经达到了不再需要能够创建专门的机器学习金融情感模型的专家的程度?还不完全是。专家是否能够生成比通过提示工程实现的模型更强大的模型?是的。事实证明,如果我们训练一个专门的模型,专门针对金融定向情感分析任务进行定制(这个过程称为微调),我们可以大幅超越最佳提示,获得0.89的F1分数。然而,ChatGPT提供了一个坚实而易于使用的基准,远比单词计数方法强大。