|
--- |
|
language: |
|
- fa |
|
metrics: |
|
- accuracy |
|
pipeline_tag: text-classification |
|
tags: |
|
- code |
|
--- |
|
# ParsBERTHallu |
|
|
|
This model is a fine-tuned version of [parsi-ai-nlpclass/ParsBERT-nli-FarsTail-FarSick](https://huggingface.co/parsi-ai-nlpclass/ParsBERT-nli-FarsTail-FarSick) on persian hallucination datasets which are |
|
available from [here](https://github.com/NLP-Final-Projects/Persian-Hallucination/tree/main/hallucination_detection/data). |
|
|
|
## How to use |
|
|
|
``` python |
|
import torch |
|
import torch.nn as nn |
|
from huggingface_hub import PyTorchModelHubMixin |
|
import transformers |
|
import hazm # Make you have installed hazm library (pip install hazm) |
|
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
|
|
# Define class of the model |
|
class ParsbertHallu(nn.Module, PyTorchModelHubMixin): |
|
def __init__(self): |
|
super().__init__() |
|
self.transformer_model = transformers.AutoModelForSequenceClassification.from_pretrained("parsi-ai-nlpclass/ParsBERT-nli-FarsTail-FarSick", |
|
num_labels=3) |
|
self.head = nn.Sequential( |
|
nn.Linear(3,1), |
|
nn.Sigmoid() |
|
) |
|
|
|
|
|
def forward(self, x): |
|
out = self.transformer_model(**x)['logits'] |
|
return torch.squeeze(self.head(out)) |
|
|
|
# Hazm normalizer |
|
normalizer = hazm.Normalizer() |
|
|
|
# tokenizer is from ParsBERT (HooshvareLab/bert-fa-zwnj-base) |
|
tokenizer = transformers.AutoTokenizer.from_pretrained('HooshvareLab/bert-fa-zwnj-base') |
|
|
|
def preprocess(reference, predict): |
|
if isinstance(reference, list) and isinstance(predict, list): |
|
reference = [normalizer.normalize(ref) for ref in reference] |
|
predict = [normalizer.normalize(pred) for pred in predict] |
|
elif isinstance(reference, str) and isinstance(predict, str): |
|
reference = normalizer.normalize(reference) |
|
predict = normalizer.normalize(predict) |
|
else: |
|
raise "Reference and predict both must be list of str or str" |
|
|
|
# Tokenize the text |
|
tokens = tokenizer(reference, predict, truncation=True, padding=True, |
|
max_length=512, return_tensors='pt') |
|
|
|
# Send the tokens to the device |
|
tokens = {key: value.to(device) for key, value in tokens.items()} |
|
|
|
return tokens |
|
|
|
# load model |
|
model = ParsbertHallu.from_pretrained("Pooya-Fallah/ParsbertHallu") |
|
model.to(device) |
|
|
|
# example inference |
|
reference = """به گزارش خبرنگار ایمنا، حمیدرضا موحدیزاده در صفحه اینستاگرام خود نوشت: «سال گذشته به اتفاق آقای احسان اصولی عضو و رئیس محترم کمیسیون فرهنگی و اجتماعی شورای اسلامی شهر مشهد به تهران و تالار وحدت رفتیم و از آقای همایون شجریان دعوت رسمی کردیم تا در مشهد کنسرت اجرا کنند و ما به عنوان نمایندگان مردم و جوانان شریف مشهد برگزاری آن را در یکی از فرهنگسراهای شهرداری مشهد تضمین میکنیم و همکاری سایر ارگانها و نیروی انتظامی را هم جلب میکنیم. |
|
مدیر برنامه او کمی نگران از حاشیههای احتمالی کنسرت در مشهد بود. قول گرفتیم در شرایط مناسبی این اقدام خداپسندانه و مردم خواهانه را در شهر مشهد» شهر امید، مدارا و زندگی «اجرا کنیم. ان شاء الله»""" |
|
predict = "نایب رئیس شورای شهر مشهد اعلام کرد که همایون شجریان به دعوت او در یک کنسرت در مشهد اجرا خواهد کرد و تمامی اقدامات لازم برای حفاظت از امنیت و حفظ حیثیت شهر انجام خواهد شد." |
|
model(preprocess(reference, predict)) |
|
``` |