@eigi02

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

BERTを用いた単語毎のポジネガ値(感情分析)を算出したい

解決したいこと

BERTを用いた単語毎のポジネガ値を算出したいです。
自然言語処理(NLP)を学び始めた初学者ですが、文単位ではなく、単語毎のポジネガ値を抽出したいと考えています。
テキストは、自由形式の会話文で、既存の単語辞書をあてはめるのではなく、できる限りBERT等、新しい単語にも汎用性の高い手法を用いられたらと考えています。

発生している問題・エラー

下記のスクリプトを実行しても、単語ごとにニュートラルな値しか出力されない(0-1で0.5程度)

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード


from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
from janome.tokenizer import Tokenizer
import os

# モデルとトークナイザの保存先パス
model_dir = "/Users/yusei/UNDERPIN_local/debarta"

# モデルとトークナイザのダウンロードと保存
if not os.path.exists(model_dir):
    os.makedirs(model_dir)
    tokenizer = AutoTokenizer.from_pretrained("ku-nlp/deberta-v2-base-japanese")
    model = AutoModelForSequenceClassification.from_pretrained("ku-nlp/deberta-v2-base-japanese")
    model.save_pretrained(model_dir)
    tokenizer.save_pretrained(model_dir)

# ローカルからモデルとトークナイザの読み込み
tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = AutoModelForSequenceClassification.from_pretrained(model_dir)

# Janomeのトークナイザの準備
janome_tokenizer = Tokenizer()

# テキストファイルの読み込み
with open('/Users/yusei/UNDERPIN_local/underpin_ex/RecordVoice/UKB312-3/Part1_Kana.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

# 各行(テキストが含まれていると仮定)に対して処理を行う
for line in lines:
    text = line.strip()  # テキストの取得
    tokens = list(janome_tokenizer.tokenize(text))  # トークンをリストに変換

    # 各単語に対して感情分析を行う
    for token in tokens:
        inputs = tokenizer.encode_plus(token.surface, return_tensors='pt')
        outputs = model(**inputs)
        probabilities = torch.nn.functional.softmax(outputs.logits, dim=-1)  # ソフトマックス関数で確率に変換
        sentiment = probabilities[0][1]  # ポジティブな感情の確率を取得

        # 結果を直接出力(小数点以下16桁まで)
        print(f'Word: {token.surface}, Sentiment: {sentiment:.16f}')

0 likes

No Answers yet.

Your answer might help someone💌