全文链接:https://tecdat.cn/?p=39614
本文主要探讨了如何利用大语言模型(LLMs)进行股票分析。通过使用提供的股票市场和金融新闻获取数据,结合Python中的相关库,如Pandas、langchain等,实现对股票新闻的情感分析。利用大语言模型构建情感分析模型,通过提示工程等技术优化模型,最终通过可视化展示股票市场的情感倾向,为股票投资决策提供参考。
大语言模型;股票分析;情感分析;API
在当今的股票市场中,及时了解新闻和事件对于做出战略决策至关重要。认识到市场情绪对市场趋势的影响,是相应调整投资策略的关键。首先,我们需要从各种来源获取大量的市场新闻数据。这其中,数据质量(如来源数量、数据更新率等)和使用便捷性是重要的考量因素。 虽然数据在网上易于获取,但对于我们的需求来说,最便捷的方法之一是使用API端点将市场数据和新闻直接集成到代码中。有许多金融数据提供商提供API连接,它们在数据套餐、支持方式和数据质量上各有不同。 在本文中,我们将使用由提供的股票市场和金融新闻API。在我看来,该API在质量和价格之间达到了很好的平衡。该API提供了一个从金融新闻中提取见解的端点,便于进行市场情绪分析。由于其易于使用,用户可以查询和检索新闻文章,动态评估市场的积极或消极基调。 通过展示该API的功能,旨在展示其在情感分析中的无缝集成,使我们能够根据市场情绪做出明智的决策。在快速变化的股票市场环境中,获得这样的资源有助于我们采取更灵活和策略性的投资方法。
首先,我们需要在Python环境中导入所需的包。在本文中,我们将使用三个主要的包:Pandas用于处理数据帧,用于提取数据,langchain用于构建大语言模型。此外,我们还将使用其他辅助包,如config和re。
在导入之前,请确保使用命令行安装这些包。现在我们已经将所有所需的包导入到Python环境中,可以进行下一步,即激活API密钥。
为了使用API的功能,必须注册API密钥。
我们将通过访问:
response = client.financial\_news(s="AAPL.US", from\_date='2024-01-01', to_date='2024-01-30', limit=100)
data_frame = pd.DataFrame(response) # 将json输出转换为数据帧
data_frame.tail()
下面解释一下API中的参数:
s
:字符串类型。如果未设置参数t
,则此参数为必填项。表示要获取新闻的股票代码。t
:字符串类型。如果未设置参数s
,则此参数为必填项。表示获取特定主题新闻的标签。可以api_token
:字符串类型。必填项。访问API的令牌,注册后可获得。from
和to
:格式为YYYY-MM-DD
。如果需要2021年3月1日至2021年3月10日的数据,则应使用from=2021-03-01
和to=2021-03-10
。limit
:数字类型。可选参数。表示查询应返回的结果数量。默认值为50,最小值为1,最大值为1000。offset
:数字类型。可选参数。表示数据的偏移量。默认值为0,最小值为0。例如,要从第200个开始获取100个符号,应使用limit=100
和offset=200
。
数据如下所示:
输出数据包含以下字段:
现在获取到的数据并不干净,包含许多换行符和不同的命令。因此,我们需要对其进行清洗:
# 清洗文本数据的函数
def clean\_textual\_data(text):
clean_text = re.sub(r'\\s+','', text)
return clean_text.strip()
# 将清洗函数应用到整个列
data\_frame\['content'\] = data\_frame\['content'\].apply(clean\_textual\_data)
现在我们已经将清洗函数应用到所有数据,可以继续构建我们的聊天机器人(这里指后续基于这些数据进行的分析流程类似聊天机器人调用数据的过程)。
现在我们将使用Langchain与OpenAI模型形成一个大语言模型链。
language_model = ChatOpenAI(model="gpt-3.5-turbo",
openai\_api\_key='YOUR OPENAI API KEY',
temperature=0)
这段代码片段通过实例化gpt-3.5-turbo
并将温度设置为0来初始化语言模型。选择温度为0可确保模型的确定性,防止其偏离主题,并保持专注和一致的生成结果。
现在,我们将使用不同的技术使其更精确地适用于我们的下游任务,即情感分析。有很多不同的方法可以实现:
提示工程是一个不断发展的领域,涉及设计和优化提示,以最大限度地提高像GPT这样的大语言模型的性能。随着这些模型的不断发展,我们对其进行提示的方式变得越来越重要。最近的研究表明,精心设计的提示可以显著提高可靠性,并使模型能够处理比以前认为更复杂的任务。 常用的提示工程技术如下:
微调是一个有用的过程,它允许用户针对特定任务定制预训练的语言模型(LLMs)。通过在包含特定任务数据的小数据集上对模型进行微调,可以在保持其整体语言理解能力的同时,提高其在该特定任务上的性能。 主要的两种微调方法如下:
template = """
从新闻文章中识别对苹果(AAPL)股票的情绪,情绪评分范围为-10到+10,其中-10表示最负面,+10表示最正面,0表示中性。
同时给出你的答案的合理解释,以及它将如何影响不同股票的价格。
文章:{statement}
"""
# 使用Langchain PromptTemplate功能形成提示
prompt = PromptTemplate(template=template, input_variables=\["statement"\])
llm\_chain = LLMChain(prompt=prompt, llm=language\_model)
现在我们已经建立了大语言模型链,下面给出一个推理示例。
输出如下所示:
为了分析苹果(AAPL)股票的市场状况,我们将分析100篇文章并得出一些结论。 首先,我们必须确保不超过模型的令牌限制,我的模型限制是4097。因此,我们将过滤掉令牌数小于3500的文章:
# 计算令牌数量的函数
def count\_token\_numbers(text):
tokens = text.split()
return len(tokens)
现在,我将更改提示模板,以便获得简洁的输出:
template_2 = """
从新闻文章中识别对苹果(AAPL)股票的情绪,评分范围为-10到+10,其中-10表示最负面,+10表示最正面,0表示中性。
仅用一个单词回答,且该单词应为分数。
文章:{statement}
"""
# 使用Langchain PromptTemplate功能形成提示
prompt\_2 = PromptTemplate(template=template\_2, input_variables=\["statement"\])
让我们形成新的大语言模型链:
下面展示一个推理:
print(new\_data\_frame\['content'\]\[2\])
print('')
print('新闻情绪:', llm\_chain\_2.run(new\_data\_frame\['content'\]\[2\]))
结果如图:
很好,我们现在能够得到简洁的输出。现在,我们将创建一个for循环,遍历数据并获取每条新闻的情绪:
results = \[\]
for i in range(0, new\_data\_frame.shape\[0\]):
results.append(llm\_chain\_2.run(new\_data\_frame\['content'\]\[i\]))
现在让我们绘制一些饼图,以查看AAPL股票的市场情绪:
import matplotlib.pyplot as plt
data = pd.DataFrame(results) # 转换为数据帧
col_name = 0 # 这是我的列名,你应根据你的数据进行更改
counts = data\[col\_name\].value\_counts()
# 绘制饼图
plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=140)
plt.title(f'饼图')
plt.axis('equal') # 等比例确保饼图绘制为圆形
# 显示饼图
plt.show()
结果如图:
饼图表明,大量文章是中性的。然而,为了确保准确性,我们应该过滤数据,只关注分析非中性信息。
value\_to\_delete = '0'
# 删除列中出现指定值的所有行
new\_data = data\[data\[0\]!= value\_to_delete\]
counts = new\_data\[col\_name\].value_counts()
# 绘制饼图
plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=140)
plt.title(f'饼图')
plt.axis('equal') # 等比例确保饼图绘制为圆形
# 显示饼图
plt.show()
结果如图:
观察趋势,+5和+7的组合占数据的近40%。考虑到+10、+8和+3等其他值,正面文章的累积百分比上升到52.5%。这种模式表明普遍存在乐观情绪,意味着在最近的文章中对苹果公司的看法良好。所确定的积极前景可能对塑造苹果市场表现的整体情绪产生潜在影响。
在本研究中,我们使用了API收集股票市场新闻文章,并利用OpenAI的情感分析模型评估这些文章中传达的情绪。