518_yt_monitor / src /ai /classifier.py
atoye1's picture
major commit with data files
b9cc1a2
Raw
History Blame Contribute Delete
1.57 kB
# μΆ”λ‘ 
import torch
from transformers import RobertaForSequenceClassification, RobertaTokenizer
# μ „μ΄ν•™μŠ΅μ— μ‚¬μš©ν•œ ν† ν¬λ‚˜μ΄μ €μ™€ λͺ¨λΈ λ‘œλ“œ & κ°€μ€‘μΉ˜ λ‘œλ“œ
class ToxcitiyClassifier:
def __init__(self):
self.tokenizer = RobertaTokenizer.from_pretrained("beomi/KcBERT-v2023")
self.model = RobertaForSequenceClassification.from_pretrained(
"beomi/KcBERT-v2023", num_labels=2
)
self.model.load_state_dict(
torch.load(
"./src/ai/pytorchmodel_518망언뢄λ₯˜_acc8583.bin",
map_location=torch.device("cpu"),
weights_only=True,
)
)
# λͺ¨λΈμ„ 평가 λͺ¨λ“œλ‘œ μ„€μ •
self.model.eval()
# μž…λ ₯ ν…μŠ€νŠΈ μ˜ˆμ‹œ
self.class_labels = ["λ¬Έμ œμ—†μŒ/κ΄€λ ¨μ—†μŒ", "λΆ€μ μ ˆ(518 망언 κ°€λŠ₯)"]
def infer(self, new_text):
inputs = self.tokenizer(new_text, return_tensors="pt")
# μΆ”λ‘  μˆ˜ν–‰ (CPU μ‚¬μš©)
with torch.no_grad():
outputs = self.model(**inputs)
logits = outputs.logits
probs = torch.nn.functional.softmax(logits, dim=-1)
toxic_prob = probs[0][1].item()
non_toxic_prob = probs[0][0].item()
print(
f"{self.class_labels[0]}:{non_toxic_prob*100:.2f}%, {self.class_labels[1]}:{toxic_prob*100:.2f}%"
)
return toxic_prob
if __name__ == "__main__":
classifier = ToxcitiyClassifier()
result = classifier.infer("5.18 은 ν•˜λ‚˜μ˜ 폭동이야")
print(result)