kiberanalyc-absa / README.md
Can07's picture
Update README.md
9a9c03d verified
|
Raw History Blame Contribute Delete
2.26 kB
metadata
language: tr
license: mit
base_model: dbmdz/convbert-base-turkish-mc4-cased
pipeline_tag: text-classification
tags:
  - aspect-based-sentiment-analysis
  - absa
  - turkish
  - hotel-reviews
  - convbert
  - hotel
  - restaurant
  - hospitality

KiberAnalyc ABSA — v2

Türkçe otel yorumları için aspect-based sentiment analysis (ABSA). İki aşamalı sistem:

Klasör Görev Mimari
absa_detection_model_final/ Yorumda ilgili aspect geçiyor mu? aspect-conditioned binary, eşik 0.35
absa_sentiment_model_final/ Geçen aspect için duygu Pozitif / Negatif
  • Temel model: dbmdz/convbert-base-turkish-mc4-cased
  • Maks. uzunluk: 512 token
  • 27 aspect; aspect listesi, her aspect'in açıklama metni (aspect2prompt) ve birleştirme haritası (merge_map) system_config.json içinde.

v2'de değişenler

  • Aspect seti 27'ye güncellendi; spa_* alt aspect'leri spa'ya, havuz_termal → havuz, temizlik_banyo → oda_temizlik olarak birleştirildi.

Kullanım

import json, torch
from huggingface_hub import snapshot_download
from transformers import AutoTokenizer, AutoModelForSequenceClassification

path = snapshot_download("Can07/kiberanalyc-absa", revision="v2")
cfg = json.load(open(f"{path}/system_config.json"))

def load(name):
    d = f"{path}/{name}"
    return AutoTokenizer.from_pretrained(d), AutoModelForSequenceClassification.from_pretrained(d).eval()

det_tok, det = load("absa_detection_model_final")
sen_tok, sen = load("absa_sentiment_model_final")

@torch.no_grad()
def analyze(review):
    results = {}
    for aspect in cfg["aspects"]:
        prompt = cfg["aspect2prompt"][aspect]
        x = det_tok(prompt, review, truncation=True, max_length=cfg["max_length"], return_tensors="pt")
        if det(**x).logits.softmax(-1)[0, 1] < cfg["detection_threshold"]:
            continue
        x = sen_tok(prompt, review, truncation=True, max_length=cfg["max_length"], return_tensors="pt")
        results[aspect] = cfg["sent_id2label"][str(sen(**x).logits.argmax(-1).item())]
    return results

print(analyze("Odalar temizdi ama yemekler çok lezzetsizdi."))

Sürümler

  • v1 — ilk sürüm (revision="v1" ile erişilebilir)
  • v2 — bu sürüm