Create README.md
Browse files
README.md
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
language:
|
3 |
+
- fa
|
4 |
+
metrics:
|
5 |
+
- accuracy
|
6 |
+
pipeline_tag: text-classification
|
7 |
+
tags:
|
8 |
+
- code
|
9 |
+
---
|
10 |
+
# ParsBERTHallu
|
11 |
+
|
12 |
+
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
|
13 |
+
available from [here](https://github.com/NLP-Final-Projects/Persian-Hallucination/tree/main/hallucination_detection/data).
|
14 |
+
|
15 |
+
## How to use
|
16 |
+
|
17 |
+
``` python
|
18 |
+
import torch
|
19 |
+
import torch.nn as nn
|
20 |
+
from huggingface_hub import PyTorchModelHubMixin
|
21 |
+
import transformers
|
22 |
+
import hazm # Make you have installed hazm library (pip install hazm)
|
23 |
+
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
24 |
+
|
25 |
+
# Define class of the model
|
26 |
+
class ParsbertHallu(nn.Module, PyTorchModelHubMixin):
|
27 |
+
def __init__(self):
|
28 |
+
super().__init__()
|
29 |
+
self.transformer_model = transformers.AutoModelForSequenceClassification.from_pretrained("Pooya-Fallah/ParsBERT-nli-FarsTail-FarSick",
|
30 |
+
num_labels=3)
|
31 |
+
self.head = nn.Sequential(
|
32 |
+
nn.Linear(3,1),
|
33 |
+
nn.Sigmoid()
|
34 |
+
)
|
35 |
+
|
36 |
+
|
37 |
+
def forward(self, x):
|
38 |
+
out = self.transformer_model(**x)['logits']
|
39 |
+
return torch.squeeze(self.head(out))
|
40 |
+
|
41 |
+
# Hazm normalizer
|
42 |
+
normalizer = hazm.Normalizer()
|
43 |
+
|
44 |
+
# tokenizer is from ParsBERT (HooshvareLab/bert-fa-zwnj-base)
|
45 |
+
tokenizer = transformers.AutoTokenizer.from_pretrained('HooshvareLab/bert-fa-zwnj-base')
|
46 |
+
|
47 |
+
def preprocess(reference, predict):
|
48 |
+
if isinstance(reference, list) and isinstance(predict, list):
|
49 |
+
reference = [normalizer.normalize(ref) for ref in reference]
|
50 |
+
predict = [normalizer.normalize(pred) for pred in predict]
|
51 |
+
elif isinstance(reference, str) and isinstance(predict, str):
|
52 |
+
reference = normalizer.normalize(reference)
|
53 |
+
predict = normalizer.normalize(predict)
|
54 |
+
else:
|
55 |
+
raise "Reference and predict both must be list of str or str"
|
56 |
+
|
57 |
+
# Tokenize the text
|
58 |
+
tokens = tokenizer(reference, predict, truncation=True, padding=True,
|
59 |
+
max_length=512, return_tensors='pt')
|
60 |
+
|
61 |
+
# Send the tokens to the device
|
62 |
+
tokens = {key: value.to(device) for key, value in tokens.items()}
|
63 |
+
|
64 |
+
return tokens
|
65 |
+
|
66 |
+
# load model
|
67 |
+
model = ParsbertHallu.from_pretrained("Pooya-Fallah/ParsbertHallu")
|
68 |
+
model.to(device)
|
69 |
+
|
70 |
+
# example inference
|
71 |
+
reference = """به گزارش خبرنگار ایمنا، حمیدرضا موحدیزاده در صفحه اینستاگرام خود نوشت: «سال گذشته به اتفاق آقای احسان اصولی عضو و رئیس محترم کمیسیون فرهنگی و اجتماعی شورای اسلامی شهر مشهد به تهران و تالار وحدت رفتیم و از آقای همایون شجریان دعوت رسمی کردیم تا در مشهد کنسرت اجرا کنند و ما به عنوان نمایندگان مردم و جوانان شریف مشهد برگزاری آن را در یکی از فرهنگسراهای شهرداری مشهد تضمین میکنیم و همکاری سایر ارگانها و نیروی انتظامی را هم جلب میکنیم.
|
72 |
+
مدیر برنامه او کمی نگران از حاشیههای احتمالی کنسرت در مشهد بود. قول گرفتیم در شرایط مناسبی این اقدام خداپسندانه و مردم خواهانه را در شهر مشهد» شهر امید، مدارا و زندگی «اجرا کنیم. ان شاء الله»"""
|
73 |
+
predict = "نایب رئیس شورای شهر مشهد اعلام کرد که همایون شجریان به دعوت او در یک کنسرت در مشهد اجرا خواهد کرد و تمامی اقدامات لازم برای حفاظت از امنیت و حفظ حیثیت شهر انجام خواهد شد."
|
74 |
+
model(preprocess(reference, predict))
|
75 |
+
```
|