AnnyNguyen commited on
Commit
bec2b6a
·
verified ·
1 Parent(s): e08a743

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +80 -136
README.md CHANGED
@@ -1,139 +1,119 @@
1
  ---
2
- language:
3
- - vi
4
  tags:
 
5
  - hate-speech-detection
6
- - vietnamese-nlp
7
  - text-classification
8
  - offensive-language-detection
9
- license: mit
10
  datasets:
11
- - vihsd
12
- base_model: vinai/phobert-base-v2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  ---
14
 
15
- # RoBERTa-GRU Hybrid
16
 
17
- Hybrid model kết hợp PhoBERT-V2 GRU cho bài toán phân loại Hate Speech
 
18
 
19
  ## Model Details
20
 
21
- ### Model Type
22
- PhoBERT-V2 + Bidirectional GRU
 
 
 
 
23
 
24
- ### Base Model
25
- This model is fine-tuned from [vinai/phobert-base-v2](https://huggingface.co/vinai/phobert-base-v2)
26
 
27
- ### Training Info
28
- - **Task**: Hate Speech Classification
29
- - **Language**: Vietnamese
30
- - **Labels**:
31
- - `0`: CLEAN (Normal content)
32
- - `1`: OFFENSIVE (Mildly offensive content)
33
- - `2`: HATE (Hate speech)
 
 
34
 
35
- ## 📊 Model Performance
36
 
37
- | Metric | Score |
38
- |--------|-------|
39
- | Accuracy | 0.9537 |
40
- | F1 Macro | 0.8716 |
41
- | F1 Weighted | 0.9530 |
42
 
43
- ## Model Description
44
 
45
- This model has been fine-tuned on the ViHSD (Vietnamese Hate Speech Dataset) to classify Vietnamese text into three categories: CLEAN, OFFENSIVE, and HATE.
 
 
46
 
47
- ### Architecture
48
- PhoBERT-V2 + Bidirectional GRU
49
 
50
- The model combines the powerful pretrained representations with task-specific fine-tuning for effective hate speech detection in Vietnamese social media content.
51
 
52
- ## How to Use
 
 
 
 
53
 
54
- ### 1. Using Transformers Pipeline
55
-
56
- ```python
57
- from transformers import pipeline
58
-
59
- # Initialize the hate speech classifier
60
- classifier = pipeline(
61
- "text-classification",
62
- model="visolex/hate-speech-roberta-gru",
63
- tokenizer="visolex/hate-speech-roberta-gru",
64
- return_all_scores=True
65
- )
66
-
67
- # Classify text
68
- results = classifier("Văn bản tiếng Việt cần kiểm tra")
69
- print(results)
70
- ```
71
-
72
- ### 2. Using AutoModel
73
 
74
  ```python
75
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
76
  import torch
77
 
78
  # Load model and tokenizer
79
- model_name = "visolex/hate-speech-roberta-gru"
80
  tokenizer = AutoTokenizer.from_pretrained(model_name)
81
- model = AutoModelForSequenceClassification.from_pretrained(model_name)
 
 
82
 
83
- # Prepare text
84
- text = "Văn bản tiếng Việt cần kiểm tra"
85
- inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=256)
86
 
87
- # Get predictions
88
  with torch.no_grad():
89
  outputs = model(**inputs)
90
- logits = outputs.logits
91
-
92
- # Get probabilities
93
- probabilities = torch.nn.functional.softmax(logits, dim=-1)
94
-
95
- # Get predicted label
96
- predicted_label = torch.argmax(probabilities, dim=-1).item()
97
- confidence = probabilities[0][predicted_label].item()
98
 
99
  # Label mapping
100
- label_mapping = {
101
  0: "CLEAN",
102
  1: "OFFENSIVE",
103
  2: "HATE"
104
  }
105
 
106
- print(f"Predicted: {label_mapping[predicted_label]} (Confidence: {confidence:.2%})")
 
107
  ```
108
 
109
- ### 3. Batch Processing
110
-
111
- ```python
112
- from transformers import AutoTokenizer, AutoModelForSequenceClassification
113
- import torch
114
-
115
- model_name = "visolex/hate-speech-roberta-gru"
116
- tokenizer = AutoTokenizer.from_pretrained(model_name)
117
- model = AutoModelForSequenceClassification.from_pretrained(model_name)
118
-
119
- # List of texts to classify
120
- texts = [
121
- "Bài viết rất hay và bổ ích",
122
- "Đồ ngu người ta nói đúng mà",
123
- "Cút đi đồ chó"
124
- ]
125
 
126
- # Tokenize and predict
127
- inputs = tokenizer(texts, return_tensors="pt", padding=True, truncation=True, max_length=256)
128
-
129
- with torch.no_grad():
130
- outputs = model(**inputs)
131
- predictions = torch.argmax(outputs.logits, dim=-1)
132
-
133
- for text, pred in zip(texts, predictions):
134
- label = ["CLEAN", "OFFENSIVE", "HATE"][pred.item()]
135
- print(f"{text[:50]} -> {label}")
136
- ```
137
 
138
  ## Training Details
139
 
@@ -150,49 +130,10 @@ for text, pred in zip(texts, predictions):
150
  - **Learning Rate**: 2e-5
151
  - **Batch Size**: 32
152
  - **Max Length**: 256 tokens
153
- - **Epochs**: Optimized via early stopping
154
-
155
- ### Preprocessing
156
- - Text normalization for Vietnamese
157
- - Special character handling
158
- - Emoji and slang processing
159
-
160
- ## Evaluation Results
161
-
162
- Model evaluation metrics on the ViHSD test set: See Model Performance section above for details.
163
-
164
- ### Label Distribution
165
- - **CLEAN (0)**: Normal content without offensive language
166
- - **OFFENSIVE (1)**: Mildly offensive or inappropriate content
167
- - **HATE (2)**: Hate speech, extremist language, severe threats
168
 
169
- ## Use Cases
170
-
171
- - **Social Media Moderation**: Automatic detection of hate speech in Vietnamese social media platforms
172
- - **Content Filtering**: Filtering offensive content in Vietnamese text
173
- - **Research**: Studying hate speech patterns in Vietnamese online communities
174
-
175
- ## Limitations and Considerations
176
-
177
- ⚠️ **Important Limitations**:
178
- - Model trained primarily on social media data, may not generalize to formal text
179
- - Performance may vary with slang, code-switching, or regional dialects
180
- - Model reflects biases present in training data
181
- - Should be used as part of a larger moderation system, not sole decision-maker
182
-
183
- ## Citation
184
-
185
- If you use this model in your research, please cite:
186
-
187
- ```bibtex
188
- @software{vihsd_roberta-gru,
189
- title = {RoBERTa-GRU Hybrid for Vietnamese Hate Speech Detection},
190
- author = {ViSoLex Team},
191
- year = {2024},
192
- url = {https://huggingface.co/visolex/hate-speech-roberta-gru},
193
- base_model = {vinai/phobert-base-v2}
194
- }
195
- ```
196
 
197
  ## Contact & Support
198
 
@@ -206,6 +147,9 @@ This model is distributed under the MIT License.
206
 
207
  ## Acknowledgments
208
 
209
- - Base model trained by vinai
210
  - Dataset: ViHSD (Vietnamese Hate Speech Detection Dataset)
211
  - Framework: [Hugging Face Transformers](https://huggingface.co/transformers)
 
 
 
 
1
  ---
2
+ license: mit
3
+ base_model: vinai/phobert-base-v2
4
  tags:
5
+ - vietnamese
6
  - hate-speech-detection
 
7
  - text-classification
8
  - offensive-language-detection
 
9
  datasets:
10
+ - visolex/vihsd
11
+ metrics:
12
+ - accuracy
13
+ - macro-f1
14
+ - weighted-f1
15
+ model-index:
16
+ - name: roberta-gru-hsd
17
+ results:
18
+ - task:
19
+ type: text-classification
20
+ name: Hate Speech Detection
21
+ dataset:
22
+ name: ViHSD
23
+ type: hate-speech-detection
24
+ metrics:
25
+ - type: accuracy
26
+ value: 0.9537
27
+ - type: macro-f1
28
+ value: 0.8716
29
+ - type: weighted-f1
30
+ value: 0.9530
31
+ - type: macro-precision
32
+ value: 0.8870
33
+ - type: macro-recall
34
+ value: 0.8573
35
  ---
36
 
37
+ # RoBERTa-GRU Hybrid: Hate Speech Detection for Vietnamese Text
38
 
39
+ This model is a fine-tuned version of [vinai/phobert-base-v2](https://huggingface.co/vinai/phobert-base-v2)
40
+ on the **ViHSD (Vietnamese Hate Speech Detection Dataset)** for classifying Vietnamese text into three categories: CLEAN, OFFENSIVE, and HATE.
41
 
42
  ## Model Details
43
 
44
+ * **Base Model**: vinai/phobert-base-v2
45
+ * **Description**: Hybrid model kết hợp PhoBERT-V2 GRU cho bài toán phân loại Hate Speech
46
+ * **Architecture**: PhoBERT-V2 + Bidirectional GRU
47
+ * **Dataset**: ViHSD (Vietnamese Hate Speech Detection Dataset)
48
+ * **Fine-tuning Framework**: HuggingFace Transformers + PyTorch
49
+ * **Task**: Hate Speech Classification (3 classes)
50
 
51
+ ### Hyperparameters
 
52
 
53
+ * **Batch size**: `32`
54
+ * **Learning rate**: `2e-5`
55
+ * **Epochs**: `100`
56
+ * **Max sequence length**: `256`
57
+ * **Weight decay**: `0.01`
58
+ * **Warmup steps**: `500`
59
+ * **Early stopping patience**: `5`
60
+ * **Optimizer**: AdamW
61
+ * **Learning rate scheduler**: Cosine with warmup
62
 
63
+ ## Dataset
64
 
65
+ Model was trained on **ViHSD (Vietnamese Hate Speech Detection Dataset)** containing ~10,000 Vietnamese comments from social media.
 
 
 
 
66
 
67
+ ### Label Descriptions:
68
 
69
+ * **CLEAN (0)**: Normal content without offensive language
70
+ * **OFFENSIVE (1)**: Mildly offensive or inappropriate content
71
+ * **HATE (2)**: Hate speech, extremist language, severe threats
72
 
73
+ ## Evaluation Results
 
74
 
75
+ The model was evaluated on test set with the following metrics:
76
 
77
+ * **Accuracy**: `0.9537`
78
+ * **Macro-F1**: `0.8716`
79
+ * **Weighted-F1**: `0.9530`
80
+ * **Macro-Precision**: `0.8870`
81
+ * **Macro-Recall**: `0.8573`
82
 
83
+ ### Basic Usage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
  ```python
86
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
87
  import torch
88
 
89
  # Load model and tokenizer
90
+ model_name = "visolex/roberta-gru-hsd"
91
  tokenizer = AutoTokenizer.from_pretrained(model_name)
92
+ model = AutoModelForSequenceClassification.from_pretrained(
93
+ model_name
94
+ )
95
 
96
+ # Classify text
97
+ text = "Văn bản tiếng Việt cần phân loại"
98
+ inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
99
 
 
100
  with torch.no_grad():
101
  outputs = model(**inputs)
102
+ predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
103
+ predicted_label = torch.argmax(predictions, dim=-1).item()
 
 
 
 
 
 
104
 
105
  # Label mapping
106
+ label_names = {
107
  0: "CLEAN",
108
  1: "OFFENSIVE",
109
  2: "HATE"
110
  }
111
 
112
+ print(f"Predicted label: {label_names[predicted_label]}")
113
+ print(f"Confidence scores: {predictions[0].tolist()}")
114
  ```
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
 
 
 
 
 
 
 
 
 
 
 
 
117
 
118
  ## Training Details
119
 
 
130
  - **Learning Rate**: 2e-5
131
  - **Batch Size**: 32
132
  - **Max Length**: 256 tokens
133
+ - **Epochs**: 100 (with early stopping patience: 5)
134
+ - **Weight Decay**: 0.01
135
+ - **Warmup Steps**: 500
 
 
 
 
 
 
 
 
 
 
 
 
136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
 
138
  ## Contact & Support
139
 
 
147
 
148
  ## Acknowledgments
149
 
150
+ - Base model: [vinai/phobert-base-v2](https://huggingface.co/vinai/phobert-base-v2)
151
  - Dataset: ViHSD (Vietnamese Hate Speech Detection Dataset)
152
  - Framework: [Hugging Face Transformers](https://huggingface.co/transformers)
153
+ - ViSoLex Toolkit
154
+
155
+ ---