AnnyNguyen commited on
Commit
d1e7833
·
verified ·
1 Parent(s): c7a3913

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +108 -147
README.md CHANGED
@@ -1,138 +1,135 @@
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/bartpho-syllable-base
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  ---
14
 
15
- # BARTpho
16
 
17
- BARTpho fine-tuned cho bài toán phân loại Hate Speech tiếng Việt
 
18
 
19
  ## Model Details
20
 
21
- ### Model Type
22
- BARTpho (Bidirectional and Auto-Regressive Transformer cho tiếng Việt)
23
-
24
- ### Base Model
25
- This model is fine-tuned from [vinai/bartpho-syllable-base](https://huggingface.co/vinai/bartpho-syllable-base)
 
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.8985 |
40
- | F1 Macro | 0.6791 |
41
- | F1 Weighted | 0.8886 |
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
- BARTpho (Bidirectional and Auto-Regressive Transformer cho tiếng Việt)
 
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-bartpho",
63
- tokenizer="visolex/hate-speech-bartpho",
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-bartpho"
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-bartpho"
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
@@ -150,49 +147,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_bartpho,
189
- title = {BARTpho for Vietnamese Hate Speech Detection},
190
- author = {ViSoLex Team},
191
- year = {2024},
192
- url = {https://huggingface.co/visolex/hate-speech-bartpho},
193
- base_model = {vinai/bartpho-syllable-base}
194
- }
195
- ```
196
 
197
  ## Contact & Support
198
 
@@ -206,6 +164,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/bartpho-syllable-base
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: bartpho-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.8985
27
+ - type: macro-f1
28
+ value: 0.6791
29
+ - type: weighted-f1
30
+ value: 0.8886
31
+ - type: macro-precision
32
+ value: 0.7664
33
+ - type: macro-recall
34
+ value: 0.6289
35
  ---
36
 
37
+ # BARTpho: Hate Speech Detection for Vietnamese Text
38
 
39
+ This model is a fine-tuned version of [vinai/bartpho-syllable-base](https://huggingface.co/vinai/bartpho-syllable-base)
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/bartpho-syllable-base
45
+ * **Description**: BARTpho fine-tuned cho bài toán phân loại Hate Speech tiếng Việt
46
+ * **Architecture**: BARTpho (Bidirectional and Auto-Regressive Transformer cho tiếng Việt)
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.8985`
78
+ * **Macro-F1**: `0.6791`
79
+ * **Weighted-F1**: `0.8886`
80
+ * **Macro-Precision**: `0.7664`
81
+ * **Macro-Recall**: `0.6289`
82
 
83
+ ### Basic Usage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
+ **⚠️ Important**: This model uses custom architecture. You must use `trust_remote_code=True` when loading.
86
 
87
  ```python
88
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
89
  import torch
90
 
91
  # Load model and tokenizer
92
+ model_name = "visolex/bartpho-hsd"
93
+
94
+ # Load tokenizer
95
+ # Note: For vocab-based models (bilstm, textcnn), use base model tokenizer or custom tokenization
96
+ if "bartpho" in ["bilstm", "textcnn"]:
97
+ # These models use custom vocabulary - tokenizer from base model may not work
98
+ # You need to implement custom tokenization based on the model's vocabulary
99
+ print("⚠️ Note: This model uses custom vocabulary-based tokenization")
100
+ print(" Please refer to the model's documentation for tokenization details")
101
+ tokenizer = None
102
+ else:
103
+ # Load tokenizer from the model repo (it will use base model's tokenizer)
104
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
105
+
106
+ # Load model with trust_remote_code=True (REQUIRED for custom models)
107
+ model = AutoModelForSequenceClassification.from_pretrained(
108
+ model_name,
109
+ trust_remote_code=True # ⚠️ REQUIRED: Allows loading custom model classes from models.py
110
+ )
111
+
112
+ # Classify text
113
+ if tokenizer is not None:
114
+ text = "Văn bản tiếng Việt cần phân loại"
115
+ inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
116
 
117
+ with torch.no_grad():
118
+ outputs = model(**inputs)
119
+ predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
120
+ predicted_label = torch.argmax(predictions, dim=-1).item()
121
 
122
+ # Label mapping
123
+ label_names = {
124
+ 0: "CLEAN",
125
+ 1: "OFFENSIVE",
126
+ 2: "HATE"
127
+ }
128
+
129
+ print(f"Predicted label: {label_names[predicted_label]}")
130
+ print(f"Confidence scores: {predictions[0].tolist()}")
131
+ else:
132
+ print("Please implement custom tokenization for this vocab-based model")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  ```
134
 
135
  ## Training Details
 
147
  - **Learning Rate**: 2e-5
148
  - **Batch Size**: 32
149
  - **Max Length**: 256 tokens
150
+ - **Epochs**: 100 (with early stopping patience: 5)
151
+ - **Weight Decay**: 0.01
152
+ - **Warmup Steps**: 500
 
 
 
 
 
 
 
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
 
155
  ## Contact & Support
156
 
 
164
 
165
  ## Acknowledgments
166
 
167
+ - Base model: [vinai/bartpho-syllable-base](https://huggingface.co/vinai/bartpho-syllable-base)
168
  - Dataset: ViHSD (Vietnamese Hate Speech Detection Dataset)
169
  - Framework: [Hugging Face Transformers](https://huggingface.co/transformers)
170
+ - ViSoLex Toolkit
171
+
172
+ ---