Python用langchain、OpenAI大语言模型LLM情感分析苹果股票新闻数据及提示工程优化应用...

news/2025/2/11 2:17:09/

全文链接: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的功能,必须注册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的令牌,注册后可获得。

  • fromto:格式为YYYY-MM-DD。如果需要2021年3月1日至2021年3月10日的数据,则应使用from=2021-03-01to=2021-03-10

  • limit:数字类型。可选参数。表示查询应返回的结果数量。默认值为50,最小值为1,最大值为1000。

  • offset:数字类型。可选参数。表示数据的偏移量。默认值为0,最小值为0。例如,要从第200个开始获取100个符号,应使用limit=100offset=200
    数据如下所示:
    0e403be8bd063a5672718d620a3a549d.png
    输出数据包含以下字段:

  • date:文章的日期和时间。

  • title:文章的标题。

  • content:文章的全文。

  • link:文章来源的链接。

  • symbols:文章中提到的股票代码数组。

五、数据清洗

现在获取到的数据并不干净,包含许多换行符和不同的命令。因此,我们需要对其进行清洗:

# 清洗文本数据的函数
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)

现在我们已经将清洗函数应用到所有数据,可以继续构建我们的聊天机器人(这里指后续基于这些数据进行的分析流程类似聊天机器人调用数据的过程)。

六、大语言模型(LLM)

现在我们将使用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可确保模型的确定性,防止其偏离主题,并保持专注和一致的生成结果。
现在,我们将使用不同的技术使其更精确地适用于我们的下游任务,即情感分析。有很多不同的方法可以实现:

6.1 提示工程

提示工程是一个不断发展的领域,涉及设计和优化提示,以最大限度地提高像GPT这样的大语言模型的性能。随着这些模型的不断发展,我们对其进行提示的方式变得越来越重要。最近的研究表明,精心设计的提示可以显著提高可靠性,并使模型能够处理比以前认为更复杂的任务。
常用的提示工程技术如下:

  • 零样本提示:这种方法使大语言模型(LLMs)能够处理新任务,即使没有先前的示例或对任务的理解。它通过一种称为“提示”的技术运作,即只需向大语言模型提供所需任务的自然语言描述。

  • 少样本提示:虽然大语言模型展示出卓越的零样本能力,但在使用零样本设置时,它们在处理更复杂的任务时仍存在不足。少样本提示可以作为一种技术,实现上下文学习,即在提示中提供示例,引导模型获得更好的性能。这些示例作为后续示例的条件,我们希望模型为后续示例生成响应。

  • 思维链提示:思维链提示是一种有助于人工智能系统将复杂任务分解为可管理步骤的技术。这种方法不是一次性解决具有挑战性的问题,而是通过将解决方案分解为一系列较小的增量步骤来促进推理过程的解释。它首先明确定义最终目标,然后考虑实现该目标所需的逻辑前提和子任务。

6.2 微调

微调是一个有用的过程,它允许用户针对特定任务定制预训练的语言模型(LLMs)。通过在包含特定任务数据的小数据集上对模型进行微调,可以在保持其整体语言理解能力的同时,提高其在该特定任务上的性能。
主要的两种微调方法如下:

  • 全指令微调:全指令微调是一种用于使大语言模型(LLMs)适应特定任务的技术。该过程涉及使用特定任务的数据调整大语言模型的所有参数。这种调整使模型能够在特定任务上更有效地执行,可能会导致性能提升。之所以需要全指令微调,是因为即使是最强大的预训练大语言模型也可能无法直接满足特定需求。例如,一个应用程序可能需要独特的结构或风格,或者预训练的大语言模型可能缺乏对该应用程序至关重要的特定文档的知识。此外,某些领域、行业甚至特定企业通常具有在一般预训练数据中未显著体现的独特术语、概念和结构。因此,全指令微调是使大语言模型适应更特定用例的有价值方法。

  • 参数高效微调:参数高效微调(PEFT)是一种用于使大型预训练模型适应各种下游应用而无需微调模型所有参数的技术。这是因为微调所有参数的成本可能过高。相反,PEFT方法仅微调少量(额外的)模型参数。这显著降低了计算和存储成本,同时产生与完全微调模型相当的性能。PEFT解决了诸如在消费级硬件上进行全量微调不可行、为每个下游任务独立存储和部署微调模型成本高昂等问题。它还克服了在大语言模型(LLMs)全量微调期间观察到的灾难性遗忘问题。
    在本文中,我们将利用提示工程技术,利用Langchain模板功能,构建一个优化的提示,用于在股票市场中进行情感分析。目标是创建一个提示,不仅提供情感分析,还能为模型的推断提供解释。

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)

现在我们已经建立了大语言模型链,下面给出一个推理示例。

6.3 运行大语言模型

输出如下所示:
c80f17fad34d0d4bf3bd9af6ed62f80e.png


点击标题查阅往期内容

42904705b141e12066c506f148f52e46.jpeg

【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码

outside_default.png

左右滑动查看更多

outside_default.png

01

48943aca66ab47a82151a1c2f0821637.png

02

0cb6b4ac1da5ea5884ae0e8a5b6b2838.png

03

e8e5325e2ed885c1656c20695dac8c10.jpeg

04

534df45a202f7df36cf7c1378b7bb3dc.png

七、分析

为了分析苹果(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\]))

结果如图:
5c82bee35f124aac265888e8319c15bf.png
很好,我们现在能够得到简洁的输出。现在,我们将创建一个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()

结果如图:
b374264a6331e70203d1a316b8549c41.png

饼图表明,大量文章是中性的。然而,为了确保准确性,我们应该过滤数据,只关注分析非中性信息。

8.1 删除中性值

value\_to\_delete = '0'
# 删除列中出现指定值的所有行
new\_data = data\[data\[0\]!= value\_to_delete\]

8.2 可视化新数据

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()

结果如图:
41083643d4a9b6cebe145492e782ab61.png

观察趋势,+5和+7的组合占数据的近40%。考虑到+10、+8和+3等其他值,正面文章的累积百分比上升到52.5%。这种模式表明普遍存在乐观情绪,意味着在最近的文章中对苹果公司的看法良好。所确定的积极前景可能对塑造苹果市场表现的整体情绪产生潜在影响。

九、结论

在本研究中,我们使用了API收集股票市场新闻文章,并利用OpenAI的情感分析模型评估这些文章中传达的情绪。


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

10a4f64c691dcc21a04a25180b55a7e6.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《Python用langchain、OpenAI大语言模型LLM情感分析AAPL股票新闻数据及提示工程优化应用》。

点击标题查阅往期内容

Python生成对抗神经网络GAN预测股票及LSTMs、ARIMA对比分析ETF金融时间序列可视化

Python深度强化学习智能体DDPG自适应股票交易策略优化道琼斯30股票数据可视化研究

MATLAB贝叶斯优化混合Bayes-CNN-RNN分析股票市场数据与浅层网络超参数优化

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码

R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感

Python用CNN-LSTM、ARIMA、Prophet股票价格预测的研究与分析|附数据代码

【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R语言深度学习:用keras神经网络回归模型预测时间序列数据

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

0b08429b5131b93fc40a2933efafa71f.jpeg

04d9377ee203526f9891243fb8a6be71.png

4b0678eb3a3b6a10080df2b54571780c.png

3972cbed2599112f6bc51033e9dd9179.jpeg

ccf224aa3cd81993bd9f2dc59d6dd1d4.png


http://www.ppmy.cn/news/1571023.html

相关文章

5、大模型的记忆与缓存

文章目录 本节内容介绍记忆Mem0使用 mem0 实现长期记忆 缓存LangChain 中的缓存语义缓存 本节内容介绍 本节主要介绍大模型的缓存思路,通过使用常见的缓存技术,降低大模型的回复速度,下面介绍的是使用redis和mem0,当然redis的语义…

使用 Axios ——个人信息修改

目录 1. HTML 部分 解释: 2. JavaScript 部分 信息渲染与提交修改(通过 Axios 库) 解释: 3. 头像更换逻辑 解释: 4. 总结 这段代码实现了一个用户个人信息管理页面,包含了获取、显示和修改用户信息…

Python 实现 gRPC 与 原始 RPC 的对比:理解 RPC 的基本功能

在分布式系统中,远程过程调用(Remote Procedure Call,RPC) 是一项关键技术,它允许不同计算机之间像调用本地函数一样进行通信。本文通过 Python 代码对比 gRPC 和 原始 RPC(基于 Socket) 来分析…

Spring Boot Actuator使用

说明&#xff1a;本文介绍Spring Boot Actuator的使用&#xff0c;关于Spring Boot Actuator介绍&#xff0c;下面这篇博客写得很好&#xff0c;珠玉在前&#xff0c;我就不多介绍了。 Spring Boot Actuator 简单使用 项目里引入下面这个依赖 <!--Spring Boot Actuator依…

【STM32】串口原理

单片机有自己的RX&#xff08;接收端&#xff09;&#xff0c;TX&#xff08;发送端&#xff09;&#xff0c;有的需要再共同接一个底线&#xff0c;为了保证有相同的参考电势&#xff0c;数据如果是高电平的话&#xff0c;发送过去也是高电平 1.轮询方式 CPU需要时刻注意发送…

deepseek笔记

文章目录 deepseek 手机appdeepseek apideepseek的底层原理?个人感悟 deepseek 字面意思是深度求索&#xff0c;看这个名字就和人工智能有关。 百度了下 公司名称叫做 杭州深度求索人工智能基础技术研究有限公司。 deepseek 手机app 抱着好奇的心理&#xff0c;下载了一个&am…

YOLOv11实时目标检测 | 摄像头视频图片文件检测

在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492&#xff0c;我们详细探讨了YOLO11的部署以及推理训练&#xff0c;但是评论区的观众老爷就说了&#xff1a;“博主博主&#xff0c;你这个只能推理…

软件工程与土木工程的不同

观看本视频后&#xff0c;你将能够认识到软件工程与土木工程的不同&#xff0c;描述软件工程是如何不断变化的&#xff0c;并阐述项目管理模式为何不太适用于软件开发。一种常见且不利于 DevOps 工作的做法是&#xff0c;把软件工程工作当作土木工程来做。 对于一个土木工程的项…