首页 > 科技周边 > 人工智能 > 微调GPT-4O mini用于财务情感分析

微调GPT-4O mini用于财务情感分析

William Shakespeare
发布: 2025-03-18 11:35:21
原创
634 人浏览过

金融中的情感分析是了解市场趋势和投资者行为的有力工具。但是,由于其复杂性和细微差别,一般的情感分析模型通常不足于财务文本。该项目通过微调的轻量级语言模型进行微调GPT-4O Mini提出了解决方案。通过利用TRC2数据集,这是专家模特Finbert标记的路透社财务新闻文章的集合,我们旨在增强GPT-4O MINI捕捉财务情感细微差别的能力。

该项目为财务情感分析提供了一种有效且可扩展的方法,为更细微的基于情感的金融分析打开了大门。到最后,我们证明了GPT-4O Mini用特定于领域的数据进行微调时,可以作为在财务环境中像Finbert这样更复杂模型的可行替代品。

学习成果

  • 了解使用特定于领域的数据进行微调的GPT-4O MINI进行经济情绪分析的过程。
  • 了解如何以结构化且可扩展的方式进行预处理和格式化财务文本数据以进行模型培训。
  • 了解对财务经文的应用程序的应用及其对市场趋势的影响。
  • 发现如何利用芬伯特(Finbert)等专家标记的数据集来改善财务情感分析中的模型绩效。
  • 探索在现实世界中的金融应用(例如市场分析和自动新闻情感跟踪)中进行微调的GPT-4O迷你模型的实际部署。

本文作为数据科学博客马拉松的一部分发表

目录

  • 探索数据集:情感分析的基本数据
  • 研究方法:分析财务情绪的步骤
  • 微调GPT-4O mini用于财务情感分析
  • 结论
  • 常见问题

探索数据集:情感分析的基本数据

对于此项目,我们使用TRC2(TREC REUTERS COPUS,第2卷)数据集,该数据集是路透社策划并通过国家标准技术研究所(NIST)提供的财务新闻文章的集合。 TRC2数据集包括路透社财务新闻文章的全面选择,该文章由于其广泛的覆盖范围和与财务事件的相关性而经常用于金融语言模型。

访问TRC2数据集

为了获得TRC2数据集,研究人员和组织需要通过NIST要求访问。该数据集可在NIST TREC REUTERS COPUS上获得,该数据集提供了有关许可和使用协议的详细信息。您将需要:

  • 访问Nisttrecreuterscorpus。
  • 按照网站上指定的数据集请求过程。
  • 确保符合在研究或商业项目中使用数据集的许可要求。

获得数据集后,预处理并将其细分为句子进行情感分析,从而使您可以应用Finbert生成专家标记的情感类别。

研究方法:分析财务情绪的步骤

通过芬伯特(Finbert)得出的情感标签的微调gpt-4o mini的方法,包括以下主要步骤:

步骤1:Finbert标签

为了创建微型数据集,我们利用了在金融领域预先培训的金融语言模型Finbert。我们将Finbert应用于TRC2数据集中的每个句子,从而在三个类别中生成专家情绪标签:正,负和中性。此过程产生一个标记的数据集,其中TRC2的每个句子都与情感相关联,从而为培训具有可靠标签的GPT-4O Mini提供了基础。

步骤2:数据预处理和JSONL格式

然后将标记的数据进行预处理并格式化为适合OpenAI的微调API的JSONL结构。我们使用以下结构将每个数据点格式化:

  • 系统消息指定助手作为财务专家的角色。
  • 包含财务句子的用户消息。
  • 助理回应指出了Finbert的预测情绪标签。

标记后,我们执行其他预处理步骤,例如将标签转换为小写以保持一致性并分层数据以确保平衡标签表示。我们还将数据集分为培训和验证集,保留80%的数据进行培训和20%的验证,这有助于评估模型的概括能力。

步骤3:微调GPT-4O mini

使用OpenAI的微调API,我们将使用预先标记的数据集微调GPT-4O mini。精细调整设置(例如学习率,批处理大小和时期数量)被优化,以在模型准确性和概括性之间达到平衡。该过程使GPT-4O Mini能够从特​​定于领域的数据中学习,并提高其在财务情感分析任务上的绩效。

步骤4:评估和基准测试

训练后,使用常见的情绪分析指标(如准确性和F1得分)评估了模型的性能,从而可以直接比较Finbert在相同数据上的性能。这种基准测试表明,GPT-4O Mini在金融领域内的情感分类如何概括,并确认它是否能够始终如一地超过Finbert的准确性。

步骤5:部署和实际应用

在确认出色的绩效后,GPT-4O Mini准备在现实世界中的财务应用中部署,例如市场分析,投资咨询和自动新闻情感跟踪。这种微调模型为更复杂的财务模型提供了有效的替代方法,提供了适合集成到金融系统的强大,可扩展的情感分析功能。

如果您想学习情感分析的基础知识,请使用Python查看有关情感分析的文章!

微调GPT-4O mini用于财务情感分析

遵循这种结构化的逐步方法,无缝浏览过程的每个阶段。无论您是初学者还是经验丰富,本指南都可以确保从头到尾的清晰度和成功实施。

步骤1:初始设置

加载所需的库并配置环境。

从变形金刚导入自动驱动器,AutomoDelforSequenceceCecrification
导入火炬
导入大熊猫作为pd
从TQDM导入TQDM

tokenizer = autotokenizer.from_pretaining(“ prosusai/finbert”)
型号= automodelforSequencececrification.from_pretrated(“ prosusai/finbert”)

设备= torch.device('cuda'如果torch.cuda.is_available()else'cpu')
型号(设备)
登录后复制

步骤2:定义与Finbert生成情感标签的函数

  • 此功能接受文本输入,将其化,并使用Finbert来预测情感标签。
  • 标签映射:Finbert输出三个类别 - 阳性,负和中性。
 def get_sentiment(文本):
    输入= tokenizer(text,return_tensors =“ pt”,truncation = true,max_length = 512).to(device)
    使用Torch.no_grad():
        输出=模型(**输入)
    logits = outputs.logits
    情感= torch.argmax(logits,dim = 1).Item()
    sentiment_label = [“正”,“负”,“中性”] [情感]
    返回情感_label
登录后复制

步骤3:数据预处理和采样TRC2数据集

您必须仔细预处理TRC2数据集,以仅保留相关句子进行微调。以下步骤概述了如何从TRC2数据集中读取,清洁,拆分和过滤数据。

考虑到不披露的限制,本节提供了使用Pseudocode的数据预处理工作流的高级概述。

  • 负载和提取数据:使用标准文本处理方法加载并提取以压缩格式提供的数据集。每个文档的相关部分被隔离,以关注关键文本内容。
  • 文本清洁和句子细分:隔离内容部分后,清洁每个文档以删除外部字符并确保格式化的一致性。这准备了将句子分成句子或较小文本单元的内容,从而通过提供可管理的情感分析段来增强模型性能。
  • 结构化数据存储:为了促进流线处理,将数据组织为结构化格式,其中每一行代表单个句子或文本段。此设置允许有效的处理,过滤和标签,使其适用于微调语言模型。
  • 相关文本段的过滤和屏幕:为了保持高数据质量,我们应用了各种标准来滤除无关紧要或嘈杂的文本段。这些标准包括消除过度短段,去除那些具有特定模式的那些表明非词性含量的模式,以及排除具有过多特殊特征或特定格式特征的段。
  • 最终预处理:仅保留符合预定质量标准的段用于模型培训。过滤数据作为结构化文件保存,以便在微调工作流程中简化参考。
 #从文件加载压缩数据集
打开compressed_file作为文件:
    #将文件的内容读取到内存中
    data = read_file(文件)

#提取每个文档的相关部分
对于数据中的每个文档:
    提取document_id
    提取日期
    提取main_text_content

#定义一个函数以清洁和细分文本内容
函数clean_and_segment_text(text):
    #删除不需要的字符和空格
    cleaned_text = remove_special_characters(文本)
    cleaned_text = standardize_whitespace(cleaned_text)
    
    #将清洁的文本分为句子或文本段
    句子= split_into_sentences(cleaned_text)
    
    返回句子

#将清洁和分割功能应用于每个文档的内容
对于数据中的每个文档:
    句子= clean_and_segment_text(document ['main_text_content'])
    将句子保存到结构化格式
    
#为单个句子创建结构化数据存储
初始化结构化_data的空列表

对于句子中的每个句子:
    #将句子附加到结构化数据
    structred_data.append(句子)

#定义一个函数以根据特定条件过滤不需要的句子
函数filter_sentences(句子):
    如果句子太短:
        返回false
    如果句子包含特定模式(例如,日期或符号过多):
        返回false
    如果句子与不需要的格式特征相匹配:
        返回false
    
    返回true

#将过滤器应用于结构化数据
filtered_data = [如果filter_sentences(句子)在structred_data中的句子句子]

#进一步根据最小长度或其他条件过滤句子
final_data = [efftered_data中的句子句子,如果MEDS_MINMIM_LENGTH(句子)]

#为模型培训保存最终数据结构
将final_data保存为struction_file
登录后复制
  • 随机加载数据集和采样1,000,000个句子,以确保可管理的数据集大小进行微调。
  • 将采样句子存储在数据框架中,以启用结构化处理和易于处理。
 df_sampled = df.sample(n = 1000000,Random_State = 42).Reset_index(drop = true)
登录后复制

步骤4:生成标签并准备JSONL数据以进行微调

  • 通过采样句子循环,使用Finbert标记每个句子,并将其格式化为GPT-4O迷你微调的JSONL。
  • JSONL的结构:每个条目都包含系统消息,用户内容和助手的情感响应。
进口JSON

jsonl_data = []
对于_,在tqdm中行(df_sampled.iterrows(),total = df_sampled.shape [0]):
    内容=行['句子']
    情感= get_sentiment(内容)
    
    jsonl_entry = {
        “消息”:[
            {“角色”:“系统”,“内容”:“助手是财务专家。”},,
            {“角色”:“用户”,“ content”:content},,
            {“角色”:“助手”,“ content”:情感}
        这是给出的
    }
    jsonl_data.append(jsonl_entry)

用open('finetuning_data.jsonl','w')作为jsonl_file:
    要进入JSONL_DATA:
        jsonl_file.write(json.dumps(entry)'\ n')
登录后复制

步骤5:将标签转换为小写

  • 通过将情感标签转换为小写,确保标签一致性,与OpenAI的格式对齐进行微调。
使用open('finetuning_data.jsonl','r')作为jsonl_file:
    data = [JSON.LOADS(line)在JSONL_FILE中的行]

对于数据输入:
    输入[“消息”] [2] [“ content”] = entry [“ message”] [2] [“ content”]。lower()

使用new_jsonl_file:
    对于数据输入:
        new_jsonl_file.write(json.dumps(entry)'\ n')
登录后复制

步骤6:洗牌并将数据集分为培训和验证集

  • 调整数据:随机将条目的顺序随机,以消除排序偏差。
  • 分为80%的培训和20%的验证集。
导入随机
随机种子(42)

random.shuffle(数据)

split_ratio = 0.8
split_index = int(len(data) * split_ratio)

triench_data = data [:split_index]
验证_data = data [split_index:]

用open('triben_data.jsonl','w')作为train_file:
    用于进入训练_data:
        train_file.write(json.dumps(entry)'\ n')

使用open('validation_data.jsonl','w')作为val_file:
    要进入验证_data:
        val_file.write(json.dumps(entry)'\ n')
登录后复制

步骤7:执行分层采样并保存减少的数据集

  • 要进一步优化,请执行分层采样以创建减少的数据集,同时保持标签比例。
  • 使用分层抽样:确保在培训和验证集中平衡微调的标签平等分布。
来自sklearn.model_selection导入train_test_split

data_df = pd.dataframe({
    'content':[输入[“消息”] [1] [“ content”]用于数据中的输入], 
    'label':[输入[“消息”] [2] [“ content”]用于数据输入]
}))

df_sampled,_ = train_test_split(data_df,stratefify = data_df ['label'],test_size = 0.9,Random_State = 42)
train_df,val_df = train_test_split(df_sampled,stratefify = df_sampled ['label'],test_size = 0.2,Random_State = 42)

DEF DF_TO_JSONL(DF,文件名):
    jsonl_data = []
    对于_,在df.iterrows()中行列:
        jsonl_entry = {
            “消息”:[
                {“角色”:“系统”,“内容”:“助手是财务专家。”},,
                {“角色”:“用户”,“ content”:row ['content']},,
                {“角色”:“助手”,“ content”:row ['label']}
            这是给出的
        }
        jsonl_data.append(jsonl_entry)
    
    用打开(文件名,'w')为jsonl_file:
        要进入JSONL_DATA:
            jsonl_file.write(json.dumps(entry)'\ n')

df_to_jsonl(train_df,'reduced_training_data.jsonl')
df_to_jsonl(val_df,'reduced_validation_data.jsonl')
登录后复制

步骤8:使用OpenAI的微调API微调GPT-4O MINI

  • 借助您准备好的JSONL文件,请按照准备好的培训和验证数据集进行OpenAI的文档,以微调GPT-4O mini。
  • 上传数据并开始微调:将JSONL文件上传到OpenAI的平台,并按照其API说明启动微调过程。

微调GPT-4O mini用于财务情感分析

步骤9:模型测试和评估

为了评估微调的GPT-4O Mini模型的性能,我们在Kaggle上可用的标有财务情感数据集上对其进行了测试。该数据集在财务环境中包含5,843个标记的句子,这可以在微调模型和Finbert之间进行有意义的比较。

芬伯特的精度为75.81%,而微调的GPT-4O MINI模型获得了76.46%,表明略有改善。

这是用于测试的代码:

导入大熊猫作为pd
导入操作系统
进口Openai
来自dotenv import load_dotenv

#加载CSV文件
csv_file_path ='data.csv'#替换为实际的文件路径
df = pd.read_csv(csv_file_path)

#将dataframe转换为文本格式
用open('sensences.txt','w',encoding ='utf-8')作为f:
    对于索引,请在df.iterrows()中行列:
        句子=行['句子']。strip()#干净的句子
        情感=行['情感']。strip()。下()#确保情感是小写的
        f.write(f“ {句子} @{情感} \ n”)             

#加载环境变量
load_dotenv()

#设置您的OpenAI API密钥
openai.api_key = os.getEnv(“ openai_api_key”)#确保在您的环境变量中设置OpenAi_Api_Key

#数据集文本文件的路径
file_path ='sensences.txt'#文本文件包含句子和标签

#从数据集读取句子和真实标签
句子= []
true_labels = []

使用open(file_path,'r',encoding ='utf-8')作为文件:
    lines = file.readlines()

#提取句子和标签
对于行中的行:
    line = line.strip()
    如果'@'排队:
        句子,label = line.rsplit('@',1)
        sensences.append(stone.strip())
        true_labels.append(label.strip())

#功能以从微调模型中获取预测
def get_openai_predictions(句子,model =“ your_finetuned_model_name”):#用模型名称替换
    尝试:
        响应= openai.chatcompletion.greate(
            模型=模型,
            消息= [
                {“角色”:“系统”,“内容”:“您是财务情感分析专家。”},,
                {“角色”:“用户”,“ content”:句子}
            ],,
            max_tokens = 50,
            温度= 0.5
        )
        返回响应['choices'] [0] ['消息'] ['content']。strip()
    除例外为E:
        print(f“错误生成句子的预测:'{句子}'。错误:{e}”)
        返回“未知”

#生成数据集的预测
predicted_labels = []
对于句子中的句子:
    预测= get_openai_predictions(句子)
    
    #将“正”,“中性”,“负”的预测标准化
    如果预测中的“正则”。lower():
        predicted_labels.append('正面')
    elif'prediction..lower()中的“中性”:
        predicted_labels.append('中性')
    elif'panist'pretiction..lower():
        predicted_labels.append('否定)
    别的:
        predicted_labels.append('unknown')

#计算模型的准确性
recripe_count = sum([[pred == true for pred,true in zip(predicted_labels,true_labels)]))))))))
精度= recript_count / len(句子)

打印(f'Accuracy:{精度:.4f}')#预期输出:0.7646
登录后复制

结论

通过将Finbert的金融领域标签的专业知识与GPT-4O Mini的灵活性相结合,该项目实现了高性能的财务情感模型,超过了Finbert的准确性。本指南和方法论为可复制,可扩展和可解释的情感分析铺平了道路,专门针对金融行业量身定制。

关键要点

  • 使用特定领域数据的微调GPT-4O MINI增强了其捕获细微的财务情感的能力,超过了诸如Finbert的准确性。
  • 由路透社策划的TRC2数据集为有效的情感分析培训提供了高质量的财务新闻文章。
  • 使用Finbert进行预处理和标签,使GPT-4O Mini能够为财务文本产生更准确的情感预测。
  • 该方法证明了GPT-4O MINI对于现实世界的财务应用的可伸缩性,提供了复杂模型的轻量级替代方案。
  • 通过利用OpenAI的微调API,此方法优化了GPT-4O Mini,以进行有效有效的财务情感分析。

常见问题

Q1。为什么要使用GPT-4O Mini而不是Finbert进行财务情感分析?

A. GPT-4O MINI提供了一种轻巧,灵活的替代方案,并且可以在通过微调的特定任务上胜过Finbert。通过对特定领域的数据进行微调,GPT-4O Mini可以在财务文本中捕获细微的情感模式,同时更加有效,更易于部署。

Q2。如何请求访问TRC2数据集?

答:要访问TRC2数据集,请通过此链接的国家标准与技术研究所(NIST)提交请求。查看网站的说明,以完成研究和商业用途所需的许可和使用协议。

Q3。我可以使用其他数据集进行财务情感分析吗?

答:您还可以使用其他数据集,例如财务短语银行或包含标记为财务文本的自定义数据集。 TRC2数据集适合培训情绪模型,因为它包括财务新闻内容,并涵盖了广泛的财务主题。

Q4。芬伯特如何产生情感标签?

A. Finbert是一种特定于金融领域的语言模型,它可以预先培训财务数据和微型分析。当应用于TRC2句子时,它会根据财务文本中的语言上下文将每个句子分为正面,负面或中立的情感。

Q5。为什么我们需要将标签转换为JSONL的小写字母?

答:将标签转换为小写,确保与OpenAI的微调要求一致,这通常会期望标签对病例敏感。它还有助于防止评估过程中的不匹配,并在JSONL数据集中保持统一的结构。

本文所示的媒体不由Analytics Vidhya拥有,并由作者酌情使用。

以上是微调GPT-4O mini用于财务情感分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板