首頁 > 科技週邊 > 人工智慧 > 微調GPT-4O mini用於財務情感分析

微調GPT-4O mini用於財務情感分析

William Shakespeare
發布: 2025-03-18 11:35:21
原創
637 人瀏覽過

金融中的情感分析是了解市場趨勢和投資者行為的有力工具。但是,由於其複雜性和細微差別,一般的情感分析模型通常不足於財務文本。該項目通過微調的輕量級語言模型進行微調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
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板