ホームページ > テクノロジー周辺機器 > AI > 金融センチメント分析のための微調整GPT-4Oミニ

金融センチメント分析のための微調整GPT-4Oミニ

William Shakespeare
リリース: 2025-03-18 11:35:21
オリジナル
635 人が閲覧しました

ファイナンスにおける感情分析は、市場動向と投資家の行動を理解するための強力なツールです。ただし、一般的なセンチメント分析モデルは、その複雑さと微妙な性質のために金融テキストに適用されると、しばしば不足しています。このプロジェクトは、軽量言語モデルであるGPT-4O Miniを微調整することにより、ソリューションを提案しています。 Expert Model Finbertによるセンチメントクラスでラベル付けされたロイターの金融ニュース記事のコレクションであるTRC2データセットを利用することにより、GPT-4o Miniの財政的感情のニュアンスを獲得する能力を強化することを目指しています。

このプロジェクトは、金融センチメント分析に対する効率的でスケーラブルなアプローチを提供し、財務におけるより微妙な感情に基づく分析のための扉を開きます。最後に、GPT-4o Miniは、ドメイン固有のデータを微調整した場合、金融コンテキストではFinbertのようなより複雑なモデルの実行可能な代替品として機能することを実証します。

学習成果

  • ドメイン固有のデータを使用した財務感情分析のための微調整GPT-4O MINIのプロセスを理解します。
  • 構造化されたスケーラブルな方法でモデルトレーニングのための財務テキストデータを前処理およびフォーマットする方法を学びます。
  • 金融テキストに対するセンチメント分析の適用と市場動向への影響に関する洞察を得る。
  • Finbertのような専門家標識データセットを活用する方法を発見して、金融センチメント分析のモデルパフォーマンスを改善します。
  • 市場分析や自動ニュースセンチメント追跡などの実際の金融アプリケーションで、微調整されたGPT-4Oミニモデルの実用的な展開を調べてください。

この記事は、データサイエンスブログソンの一部として公開されました

目次

  • データセットの調査:センチメント分析のための重要なデータ
  • 研究方法論:経済的感情を分析する手順
  • 金融センチメント分析のための微調整GPT-4Oミニ
  • 結論
  • よくある質問

データセットの調査:センチメント分析のための重要なデータ

このプロジェクトでは、ロイターがキュレーションし、国立標準技術研究所(NIST)を通じて利用できるようになった金融ニュース記事のコレクションであるTRC2(TREC Reuters Corpus、Volume 2)Datasetを使用しています。 TRC2データセットには、ロイターの金融ニュース記事の包括的な選択が含まれており、その幅広いカバレッジと金融イベントに関連するため、金融言語モデルでよく使用されます。

TRC2データセットへのアクセス

TRC2データセットを取得するには、研究者と組織はNISTを介してアクセスを要求する必要があります。データセットは、Nist Trec Reuters Corpusで入手でき、ライセンスと使用契約の詳細を提供します。あなたはする必要があります:

  • Nisttrecreuterscorpusにアクセスしてください。
  • Webサイトで指定されたデータセット要求プロセスに従ってください。
  • ライセンス要件の順守を確保して、調査または商業プロジェクトでデータセットを使用してください。

データセットを取得したら、前処理を行い、それをセニメンツ分析のために文にセグメント化し、Finbertを適用して専門家標識クラスを生成することができます。

研究方法論:経済的感情を分析する手順

Finbertから派生した感情ラベルを備えた微調整GPT-4Oミニの方法論は、次の主な手順で構成されています。

ステップ1:Finbert Labeling

微調整データセットを作成するには、金融領域で事前に訓練された金融言語モデルであるFinbertを活用します。 TRC2データセット内の各文にFinbertを適用し、3つのクラスでエキスパートセンチメントラベルを生成します:ポジティブ、ネガティブ、ニュートラル。このプロセスでは、TRC2からの各文が感情に関連付けられているラベル付きデータセットを生成し、信頼できるラベルでGPT-4o Miniをトレーニングするための基盤を提供します。

ステップ2:データの前処理とJSONLフォーマット

次に、標識データを前処理し、OpenAIの微調整APIに適したJSONL構造にフォーマットします。次の構造で各データポイントをフォーマットします。

  • 財務専門家としてのアシスタントの役割を指定するシステムメッセージ。
  • 金融文を含むユーザーメッセージ。
  • Finbertからの予測された感情ラベルを記載するアシスタント応答。

ラベル付けの後、ラベルを小文字に変換して一貫性を整理したり、バランスの取れたラベル表現を確保するためにデータを層別化するなど、追加の前処理手順を実行します。また、データセットをトレーニングと検証セットに分割し、トレーニング用のデータの80%、検証のために20%を予約します。これにより、モデルの一般化能力が評価されます。

ステップ3:微調整GPT-4Oミニ

Openaiの微調整APIを使用して、事前にラベル付きのデータセットでGPT-4O MINIを微調整します。学習率、バッチサイズ、エポックの数などの微調整設定は、モデルの精度と一般化可能性のバランスをとるために最適化されています。このプロセスにより、GPT-4o Miniはドメイン固有のデータから学習し、財務センチメント分析タスクのパフォーマンスを向上させることができます。

ステップ4:評価とベンチマーク

トレーニング後、モデルのパフォーマンスは、精度やF1スコアなどの一般的な感情分析メトリックを使用して評価され、同じデータでのFinbertのパフォーマンスと直接比較できます。このベンチマークは、GPT-4o Miniが金融ドメイン内の感情分類をどの程度よく一般化し、Finbertを精度で一貫して上回ることができるかどうかを確認します。

ステップ5:展開と実用的なアプリケーション

優れたパフォーマンスを確認すると、GPT-4o Miniは、市場分析、投資アドバイザリー、自動ニュースセンチメント追跡など、実際の金融アプリケーションに展開する準備ができています。この微調整されたモデルは、より複雑な金融モデルに効率的な代替品を提供し、金融システムへの統合に適した堅牢でスケーラブルな感情分析機能を提供します。

センチメント分析の基本を学びたい場合は、Pythonを使用した感情分析に関する記事を確認してください!

金融センチメント分析のための微調整GPT-4Oミニ

この構造化された段階的なアプローチに従って、プロセスの各段階をシームレスにナビゲートします。あなたが初心者であろうと経験であろうと、このガイドは、最初から最後まで明確になり成功した実装を保証します。

ステップ1:初期セットアップ

必要なライブラリをロードし、環境を構成します。

変圧器から、オートトケン装置、AutomodelfOR SeckingEclassificationから
トーチをインポートします
PDとしてパンダをインポートします
TQDMからImport TQDMから

Tokenizer = autotokenizer.from_pretrained( "Prosusai/Finbert"))
Model = AutomodelforSequenceClassification.from_pretrained( "Prosusai/Finbert"))

device = torch.device( 'cuda' if torch.cuda.is_available()else 'cpu')
model.o(device)
ログイン後にコピー

ステップ2:Finbertでセンチメントラベルを生成する関数を定義します

  • この関数は、テキスト入力を受け入れ、それをトークン化し、Finbertを使用してセンチメントラベルを予測します。
  • ラベルマッピング:Finbertは、陽性、ネガティブ、ニュートラルの3つのクラスを出力します。
 def get_sentiment(テキスト):
    inputs = tokenizer(text、return_tensors = "pt"、truncation = true、max_length = 512).o(device)
    torch.no_grad()を使用して:
        出力=モデル(**入力)
    logits = outputs.logits
    センチメント= torch.argmax(logits、dim = 1).item()
    sentiment_label = ["positive"、 "negatiたち"、 "neutral"] [センチメント]
    Sentiment_labelを返します
ログイン後にコピー

ステップ3:TRC2データセットの前処理とサンプリング

微調整に関連する文のみを保持するには、TRC2データセットを慎重に前処理する必要があります。次の手順では、TRC2データセットからのデータの読み取り、クリーニング、分割、フィルタリングの概要を説明します。

非開示の制約を考慮して、このセクションでは、Pseudocodeを使用したデータ前処理ワークフローの高レベルの概要を提供します。

  • データの読み込みと抽出:圧縮形式で提供されるデータセットは、標準のテキスト処理方法を使用してロードされ、抽出されました。各ドキュメントの関連セクションは、主要なテキストコンテンツに焦点を当てるために分離されました。
  • テキストのクリーニングと文のセグメンテーション:コンテンツセクションを分離した後、各ドキュメントをクリーニングして、外部文字を削除し、フォーマットの一貫性を確保しました。これにより、文または小型テキストユニットに分割するためのコンテンツが準備されました。これにより、センチメント分析のために管理可能なセグメントを提供することでモデルのパフォーマンスが向上しました。
  • 構造化されたデータストレージ:合理化された処理を促進するために、データは個々の文またはテキストセグメントを表す構造化形式に編成されました。このセットアップにより、効率的な処理、フィルタリング、ラベル付けが可能になり、微調整言語モデルに適しています。
  • 関連するテキストセグメントのフィルターと画面:高いデータ品質を維持するために、さまざまな基準を適用して、無関係または騒々しいテキストセグメントを除外しました。これらの基準には、過度に短いセグメントの削除、非センチメントベアリングコンテンツを示す特定のパターンを持つセグメントの削除、過度の特殊文字または特定のフォーマット特性を持つセグメントを除外することが含まれます。
  • 最終的な前処理:事前定義された品質基準を満たしたセグメントのみがモデルトレーニングのために保持されました。フィルタリングされたデータは、微調整ワークフローで簡単に参照できる構造化されたファイルとして保存されました。
 #ファイルから圧縮データセットをロードします
compressed_fileをファイルとして開く:
    #ファイルの内容をメモリに読み取ります
    data = read_file(file)

#各ドキュメントの関連セクションを抽出します
データの各ドキュメントについて:
    document_idを抽出します
    抽出日
    Main_Text_Contentを抽出します

#テキストコンテンツをクリーンおよびセグメント化する関数を定義します
function clean_and_segment_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'])
    構造化された形式に文章を保存します
    
#個々の文の構造化されたデータストレージを作成します
structured_dataの空のリストを初期化します

文の各文について:
    #構造化されたデータに文を追加します
    structured_data.append(cente)

#特定の基準に基づいて不要な文を除外する関数を定義します
function filter_sentences(cente):
    文が短すぎる場合:
        falseを返します
    文に特定のパターン(例えば、日付または過剰なシンボル)が含まれている場合:
        falseを返します
    文が不要なフォーマット特性と一致する場合:
        falseを返します
    
    trueを返します

#フィルターを構造化されたデータに適用します
filtered_data = [filter_sentancesの場合はstructured_dataの文の文の文(文)]

#最小長またはその他の基準に基づいて文をさらにフィルタリングする
final_data = [meets_minimum_length(cente)]の場合、filtered_dataの文の文の文

#モデルトレーニングの最終データ構造を保存します
final_dataをstructured_fileとして保存します
ログイン後にコピー
  • データセットとサンプル1,000,000をランダムにロードして、微調整のための管理可能なデータセットサイズを確保します。
  • サンプリングされた文をデータフレームに保存して、構造化された処理と簡単な処理を可能にします。
 df_sampled = df.sample(n = 1000000、random_state = 42).reset_index(drop = true)
ログイン後にコピー

ステップ4:ラベルを生成し、微調整のためにJSONLデータを準備します

  • サンプリングされた文をループし、Finbertを使用して各文にラベルを付け、GPT-4o Mini Fine-TuningのJSONLとしてフォーマットします。
  • JSONLの構造:各エントリには、システムメッセージ、ユーザーコンテンツ、およびアシスタントのセンチメント応答が含まれています。
 JSONをインポートします

jsonl_data = []
_、tqdmのrow(df_sampled.iterrows()、total = df_sampled.shape [0]):
    content = row ['cente']
    センチメント= get_sentiment(content)
    
    jsonl_entry = {
        「メッセージ」:[
            {「役割」:「システム」、「コンテンツ」:「アシスタントは金融の専門家です。 "}、
            {「役割」:「ユーザー」、「コンテンツ」:コンテンツ}、
            {「役割」:「アシスタント」、「コンテンツ」:感情}
        ]
    }
    jsonl_data.append(jsonl_entry)

with open( 'finetuning_data.jsonl'、 'w')as jsonl_file:
    jsonl_dataへのエントリーの場合:
        jsonl_file.write(json.dumps(entry) '\ n')
ログイン後にコピー

ステップ5:ラベルを小文字に変換します

  • センチメントラベルを小文字に変換して、微調整のためのOpenaiのフォーマットに合わせてラベルの一貫性を確保します。
 with open( 'finetuning_data.jsonl'、 'r')as jsonl_file:
    data = [jsonl_fileの行のjson.loads(line)]

データへの入力について:
    entry ["messages"] [2] ["content"] = entry ["messages"] [2] ["content"]。lower()

with open( 'finetuning_data_lowercase.jsonl'、 'w')as new_jsonl_file:
    データへの入力について:
        new_jsonl_file.write(json.dumps(entry) '\ n')
ログイン後にコピー

ステップ6:データセットをトレーニングと検証セットにシャッフルして分割します

  • データをシャッフル:エントリの順序をランダム化して、バイアスの順序を排除します。
  • 80%のトレーニングと20%の検証セットに分割されます。
ランダムをインポートします
random.seed(42)

random.shuffle(データ)

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

training_data = data [:split_index]
validation_data = data [split_index:]

open( 'training_data.jsonl'、 'w')としてtrain_file:
    Training_Dataへのエントリ:
        train_file.write(json.dumps(entry) '\ n')

with open( 'validation_data.jsonl'、 'w')as val_file:
    validation_dataへの入力:
        val_file.write(json.dumps(entry) '\ n')
ログイン後にコピー

ステップ7:層別サンプリングを実行し、減少したデータセットを保存します

  • さらに最適化するには、層別サンプリングを実行して、ラベルの割合を維持しながら、削減されたデータセットを作成します。
  • 階層化されたサンプリングを使用します。バランスの取れた微調整のために、トレーニングセットと検証セットの両方にわたってラベルの平等な分布を確保します。
 sklearn.model_selectionからimport train_test_splitから

data_df = pd.dataframe({
    'content':[entry ["messages"] [1] ["content"] for data for data]、 
    「ラベル」:[entry ["messages"] [2] ["content"]データへのエントリのための]
})

DF_SAMPLED、_ = train_test_split(data_df、stratify = data_df ['label']、test_size = 0.9、random_state = 42)
train_df、val_df = train_test_split(df_sampled、stratify = df_sampled ['label']、test_size = 0.2、random_state = 42)

def df_to_jsonl(df、filename):
    jsonl_data = []
    _、df.iterrows()の列():
        jsonl_entry = {
            「メッセージ」:[
                {「役割」:「システム」、「コンテンツ」:「アシスタントは金融の専門家です。 "}、
                {"role": "user"、 "content":row ['content']}、
                {「役割」:「アシスタント」、「コンテンツ」:row ['label']}
            ]
        }
        jsonl_data.append(jsonl_entry)
    
    jsonl_fileとしてOpen(filename、 'w'):
        jsonl_dataへのエントリーの場合:
            jsonl_file.write(json.dumps(entry) '\ n')

df_to_jsonl(train_df、 'decond_training_data.jsonl')
df_to_jsonl(val_df、 'decond_validation_data.jsonl')
ログイン後にコピー

ステップ8:OpenAIの微調整APIを使用してGPT-4Oミニを微調整します

  • 準備されたJSONLファイルを使用して、OpenAIのドキュメントに従って、準備されたトレーニングおよび検証データセットでGPT-4O MINIを微調整してください。
  • データをアップロードして微調整を開始します。JSONLファイルをOpenAIのプラットフォームにアップロードし、API命令に従って微調整プロセスを開始します。

金融センチメント分析のための微調整GPT-4Oミニ

ステップ9:モデルのテストと評価

微調整されたGPT-4O MINIモデルのパフォーマンスを評価するために、Kaggleで利用可能なラベル付きの財務感情データセットでテストしました。このデータセットには、財務の文脈に5,843のラベル付けされた文が含まれており、微調整されたモデルとFinbertの意味のある比較が可能になります。

Finbertは75.81%の精度を獲得しましたが、微調整されたGPT-4O MINIモデルは76.46%を達成し、わずかな改善を示しました。

テストに使用されるコードは次のとおりです。

 PDとしてパンダをインポートします
OSをインポートします
Openaiをインポートします
dotenvインポートload_dotenvから

#CSVファイルをロードします
csv_file_path = 'data.csv'#実際のファイルパスに置き換えます
df = pd.read_csv(csv_file_path)

#データフレームをテキスト形式に変換します
fite open( 'sentences.txt'、 'w'、encoding = 'utf-8')as f:
    インデックスの場合、df.iterrows()の行:
        cente = row ['centent']。ストリップ()#清掃文
        センチメント= row ['センチメント']。ストリップ()。lower()#センチメントが小文字でクリーンであることを確認します
        f.write(f "{cente} @{sentiment} \ n")             

#環境変数をロードします
load_dotenv()

#Openai APIキーを設定します
openai.api_key = os.getenv( "openai_api_key")#openai_api_keyが環境変数に設定されていることを確認してください

#データセットテキストファイルへのパス
file_path ='sentences.txt '#文とラベルを含むテキストファイル

#データセットから文と真のラベルを読んでください
文= []
true_labels = []

fileとしてopen(file_path、 'r'、encoding = 'utf-8')
    lines = file.readlines()

#文とラベルを抽出します
線の場合:
    line = line.strip()
    「@」が並んでいる場合:
        文、label = line.rsplit( '@'、1)
        sentences.append(cente.strip())
        true_labels.append(label.strip())

#微調整されたモデルから予測を取得する機能
def get_openai_predictions(cente、model = "your_finetuned_model_name"):#モデル名に置き換えます
    試す:
        応答= openai.chatcompletion.create(
            モデル=モデル、
            メッセージ= [
                {「役割」:「システム」、「コンテンツ」:「あなたは財政的な感情分析の専門家です。 "}、
                {「役割」:「ユーザー」、「コンテンツ」:文}
            ]、、
            max_tokens = 50、
            温度= 0.5
        ))
        返信応答['choices'] [0] ['message'] ['content']。ストリップ()
    eとしての例外を除く:
        印刷(f "文の予測を生成するエラー: '{cente}'。エラー:{e}")
        「不明」を返す

#データセットの予測を生成します
predicted_labels = []
文の文のために:
    予測= get_openai_predictions(cente)
    
    #予測を「ポジティブ」、「ニュートラル」、「ネガティブ」に正規化する
    prediction.lower()の「ポジティブ」の場合:
        Predicted_labels.append( 'Positive')
    prediction.lower()のelif 'neutral':
        Predicted_labels.append( 'neutral')
    prediction.lower()で「ネガティブ」をelif 'negative'
        Predicted_labels.append( 'ネガティブ')
    それ以外:
        Prosceded_labels.append( 'nownd')

#モデルの精度を計算します
record_count = sum([pred == pred for pred、true in zip(predicted_labels、true_labels)))))
精度= recort_count / len(文章)

print(f'accuracy:{surcosity:.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。 Finbertの代わりにGPT-4o Miniを財務感情分析に使用するのはなぜですか?

A. GPT-4O MINIは、軽量で柔軟な代替品を提供し、微調整を伴う特定のタスクでFinbertを上回ることができます。ドメイン固有のデータを微調整することにより、GPT-4O Miniは、より計算効率が高く展開しやすい一方で、財務テキストで微妙な感情パターンをキャプチャできます。

Q2。 TRC2データセットへのアクセスをリクエストするにはどうすればよいですか?

A. TRC2データセットにアクセスするには、このリンクの国立標準技術研究所(NIST)を通じてリクエストを送信します。通常、研究と商業利用の両方に必要なライセンスと使用契約を完了するためのウェブサイトの指示を確認してください。

Q3。財務感情分析に別のデータセットを使用できますか?

A.金融フレーズバンクやラベル付きの金融テキストを含むカスタムデータセットなど、他のデータセットを使用することもできます。 TRC2データセットは、財務ニュースコンテンツを含み、幅広い財務トピックをカバーするため、トレーニングセンチメントモデルに特に適しています。

Q4。 Finbertはどのようにしてセンチメントラベルを生成しますか?

A. Finbertは、センチメント分析のための財務データと微調整を事前に訓練する金融ドメイン固有の言語モデルです。 TRC2文に適用されると、金融テキストの言語コンテキストに基づいて、各文を肯定的、否定的、または中立的な感情に分類します。

Q5。なぜラベルをJSONLの小文字に変換する必要があるのですか?

A.ラベルを小文字に変換することで、Openaiの微調整要件との一貫性が保証され、多くの場合、ラベルがケースに敏感であると予想します。また、評価中の不一致を防ぐのに役立ち、JSONLデータセットの均一な構造を維持します。

この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。

以上が金融センチメント分析のための微調整GPT-4Oミニの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート