# 預測流程方案分析 2021.05.21
## 掃 Rulebase Time and Accuracy
* 環境: colab(cpu)
### 流程
* 5/10 以前的方法 (A/B)
```
1. 找出 帳號/電話/URL => 直接標記 5
2. Jieba 斷詞 / 完全不斷詞
3. 比對 rule base,完全相同的給對應 label
nickname: "你這個蠢蛋"
rule base = ['白癡', '蠢蛋' ]
[A.斷詞:]
case(1) " 你 這個 蠢蛋" 因為 "蠢蛋" 完全相同 rule base 的 "蠢蛋" => 標記 2
case(2) "你 這個 蠢 蛋" 無與 "蠢蛋" 完全相同的字 => model predict
[B.無斷詞]
將 "你這個蠢蛋" 與 rule base 比對,無相同 => model predict
4. model predict
```
* 5/10 新採用的方法 (C/D)
```
1. 找出 帳號/電話/URL => 直接標記 5
2. 比對 rule base 的詞有無出現在帳號中
rule base = ['白癡', '蠢蛋' ]
nickname_1 = "你這個蠢蛋"
nickname_1 = "你這個帥哥"
以"白癡"與"蠢蛋" 去比對是否存在於 nickname 中
=> 解決因斷詞被斷開而無法透過 rule base 找出的情況
3. model predict
[C.不斷詞 predict]
「你這個蠢蛋: 2」
[D.斷詞後 predict ]
「你 這個 帥哥」 =>「你:0 這個:0 帥哥:0」 => 「final label:0」
```
### Time(單位:秒)
| 類別 | 筆數 | A.斷詞後檢查 rule-base | B.不斷詞檢查 rule-base | C.先掃 rule-base 不斷詞 predict | D.先掃 rule-base 再斷詞 predict |
| ---- | ---- | ---------------------- | --- | ------------------------------- | ------------------------------- |
| 涉政 | 1376 | 400 | 230 | 186 | 373 |
| 辱罵 | 302 | 92 |38 | 17 | 48 |
| 違禁 | 1182 | 438 | 160 | 132 | 405 |
| 色情 | 415 | 124 | 53 | 45 | 114 |
| 廣告 | 5529 | 23 | 17 | 28 | 35 |
### Accuracy
| 類別 | 筆數 | A.斷詞後檢查 rule-base | B.不斷詞檢查 rule-base | C.先掃 rule-base | D.先掃 rule-base 再斷詞 predict |
| ---- | ---- | ------| --- | -------- | ------ |
| 涉政 | 1376 | 0.67 | 0.89 | 0.89 | 0.67 |
| 辱罵 | 302 | 0.52 | 0.41 | 0.70 | 0.74 |
| 違禁 | 1182 | 0.79 | 0.97 | 0.93 | 0.76 |
| 色情 | 415 | 0.46 | 0.91 | 0.88 | 0.44 |
| 廣告 | 5529 | 0.99 | 0.99 | 0.99 | 0.99 |
## 分析
### 違禁與色情 why Accuracy B 高於 C
C 掃 Rule Base 的方法會將一些含有其他類別 rule base 的詞錯判
常見: `狗` `=` `娘`
```
EX:
'妓女 => jnv' 因為 '=' 是廣告的 rule base 故被直接標為 5 (應為4)
'氣狗'(好像是中國對某種槍的用語) 因為 '狗' 是辱罵的 rule base 故被直接標為 2 (應為3)
```


### 違禁與色情 why Accuracy A 高於 D
D 掃 Rule Base 的方法會將一些含有其他類別 rule base 的詞錯判
常見: `價格` `收` `狗`

### 涉政 (A:0.67 ; B:0.89 ; C:0.89 ; D:0.67)
#### 1. 不斷詞 Accuracy 高
* 因為這些詞都出現過在 Training data
Censor word 中整理成 Ground Truth 後加入至 Training data `(2021.04.28)`
* 人名及歷史事件斷詞後難預測

#### 2. 法輪功: 數美標 1 ; Training Data 標 3

#### 3. 異體字 or 特殊字元導致被切開


### 辱罵 (A:0.52 ; B: 0.41 ; C:0.70 ; D:0.74)
#### 1. 新掃 rule base Accuracy 高

能被判斷的關鍵字容易被切開 or Training data 仍須調整 `ex: 老子 賤 ...`
#### 2. 判斷成4

### 違禁(A:0.79 ; B:0.93 ; C:0.97 ; D:0.76)
#### 1. 同時有多項違禁字,因順位標為 涉政或廣告

#### 2. 販賣賭博等違禁品被判為 5

### 色情 (A:0.46 ; B:0.91 ; C:0.88 ; D:0.94)
#### 1. 判斷成違禁 (Traing data 中類似的字也是標違禁)

#### 2. C 因為 rule base 而判斷成 辱罵

#### 3. 數美標錯(不明所以)

#### 4. 英文 or 中英夾雜 model 判斷不出來

#### 5. 斷詞後個別詞為正常 or Training data 仍須調整

## 討論
### 小結
1. 目前整句給 model predict 效果較好,因為那些句子都在 training data 出現過(老師之前提供的 Censor),但若超出 training data 涵蓋的範圍 => 未知
2. 斷詞(目前已換上新 Jieba 字典,但對這份測試資料無影響)
* 容易受 諧音/特殊字元而斷不好` ex: 毛厕東 法@倫@功`
* 切開後個別為不同的違禁詞,而預測錯誤 ex:`中國:1 狗:2` `售:5 手槍:3`
* 切開後個別為正常的詞 ex: `功官 小姐` `鴛鴦 洗`
3. 掃 rule base 的方法 (AB or CD)
* CD 方式可以抓到許多字直接標記,有效提升辱罵正確率,減少一些時間(不預測而省下的)
* CD 方式去也可能錯抓一些詞,導致部分 Accuracy: B>C ; A>D
### 結論
* 選擇整句(B/C) 需承擔字詞變化導致超出 training 的風險
* 選擇斷詞則要克服 斷不好(異體字/符號干擾) 與 多個詞違規且比例相同導致錯判
### 嘗試改進方向
1. 先將整理出需調整的關鍵字新增 or 調整 training data 重 train model
2. 將調整後的 training data 更新 jieba 斷詞表
3. rule base 依觀察做調整
### Q
1. 涉政 Rule base 多是拼音,是否與拼音功能重疊
2. 斷詞: 多項違規時,違規順序 ex:`出售:5 功弩:3` => 3/5 ?
### Predict result
https://drive.google.com/drive/folders/1sAtdfCpEzDSxmzdJrNWZrC5xVRkDg9S-?usp=sharing
## Detail
#### A.斷詞後檢查 rule-bas
```
涉政_A_210520_0413.csv
Predict 0 1 2 3 4 5 All
label
1 478 1164 3 80 2 9 1736
All 478 1164 3 80 2 9 1736
Accuracy: 0.6705069124423964
Error amount: 572 / 1736
/辱罵_A_210520_0413.csv
Predict 0 1 2 4 5 All
label
2 87 4 160 48 3 302
All 87 4 160 48 3 302
Accuracy: 0.5298013245033113
Error amount: 142 / 302
違禁_A_210520_0414.csv
Predict 0 1 2 3 4 5 All
label
3 157 15 5 937 5 63 1182
All 157 15 5 937 5 63 1182
Accuracy: 0.7927241962774958
Error amount: 245 / 1182
色情_A_210520_0414.csv
Predict 0 1 2 3 4 5 All
label
4 182 6 5 21 195 6 415
All 182 6 5 21 195 6 415
Accuracy: 0.46987951807228917
Error amount: 220 / 415
廣告_A_210520_0414.csv
Predict 0 1 4 5 All
label
5 47 1 2 5736 5786
All 47 1 2 5736 5786
Accuracy: 0.9913584514344971
Error amount: 50 / 5786
```
#### B.不斷詞檢查 rule-base
```
涉政_B_210520_0417.csv
Predict 0 1 3 4 5 All
label
1 69 1553 106 2 6 1736
All 69 1553 106 2 6 1736
Accuracy: 0.8945852534562212
Error amount: 183 / 1736
辱罵_B_210520_0417.csv
Predict 0 1 2 3 4 All
label
2 117 4 125 7 49 302
All 117 4 125 7 49 302
Accuracy: 0.4139072847682119
Error amount: 177 / 302
違禁_B_210520_0418.csv
Predict 0 1 3 4 5 All
label
3 15 3 1154 8 2 1182
All 15 3 1154 8 2 1182
Accuracy: 0.9763113367174281
Error amount: 28 / 1182
色情_B_210520_0418.csv
Predict 0 3 4 5 All
label
4 9 21 380 5 415
All 9 21 380 5 415
Accuracy: 0.9156626506024096
Error amount: 35 / 415
廣告_B_210520_0418.csv
Predict 0 1 3 4 5 All
label
5 37 1 12 4 5732 5786
All 37 1 12 4 5732 5786
Accuracy: 0.9906671275492568
```
#### C.先掃 rule-base 不斷詞 predict
```
涉政_C_210520_0325.csv
Predict 0 1 2 3 4 5 All
label
1 46 1551 20 105 1 13 1736
All 46 1551 20 105 1 13 1736
Accuracy: 0.8934331797235023
Error amount: 185 / 1736
辱罵_C_210520_0326.csv
Predict 0 1 2 3 4 5 All
label
2 58 3 214 2 21 4 302
All 58 3 214 2 21 4 302
Accuracy: 0.7086092715231788
Error amount: 88 / 302
違禁_C_210520_0328.csv
Predict 0 1 2 3 4 5 All
label
3 14 3 27 1108 8 22 1182
All 14 3 27 1108 8 22 1182
Accuracy: 0.937394247038917
Error amount: 74 / 1182
色情_C_210520_0329.csv
Predict 0 1 2 3 4 5 All
label
4 7 5 10 19 366 8 415
All 7 5 10 19 366 8 415
Accuracy: 0.8819277108433735
Error amount: 49 / 415
廣告_C_210520_0329.csv
Predict 0 1 3 4 5 All
label
5 35 1 10 4 5736 5786
All 35 1 10 4 5736 5786
Accuracy: 0.9913584514344971
Error amount: 50 / 5786
```
#### D.先掃 rule-base 再斷詞 predict
```
涉政_D_210520_0357.csv
Predict 0 1 2 3 4 5 All
label
1 448 1169 21 80 2 16 1736
All 448 1169 21 80 2 16 1736
Accuracy: 0.6733870967741935
Error amount: 567 / 1736
辱罵_D_210520_0357.csv
Predict 0 1 2 4 5 All
label
2 38 3 225 32 4 302
All 38 3 225 32 4 302
Accuracy: 0.7450331125827815
Error amount: 77 / 302
違禁_D_210520_0358.csv
Predict 0 1 2 3 4 5 All
label
3 154 15 28 903 5 77 1182
All 154 15 28 903 5 77 1182
Accuracy: 0.7639593908629442
Error amount: 279 / 1182
色情_D_210520_0358.csv
Predict 0 1 2 3 4 5 All
label
4 179 8 13 19 186 10 415
All 179 8 13 19 186 10 415
Accuracy: 0.44819277108433736
Error amount: 229 / 415
廣告_D_210520_0358.csv
Predict 0 1 4 5 All
label
5 47 1 2 5736 5786
All 47 1 2 5736 5786
Accuracy: 0.9913584514344971
Error amount: 50 / 5786
```
## New Model 2021.05.23
##### `text_cnn_best_99.83006535947712_LR0.001_BATCH100_EPOCH100`
### Training data
##### `new word dataset_add label_normal name_default_Ground truth_Corrected_prohibit_fixed.csv`
* information
```
Training data: 61144
0 50727
1 3866
3 3157
4 2364
5 515
2 515
Name: label, dtype: int64
```
* 組成
```
1. Fix 重覆
2. 宗教、法輪功等等 => 3
3. 新增 AV 女優名
4. 新增 命中字詞
```
### Accuracy
| 類別 | 筆數 | A.斷詞後檢查 rule-base | B.不斷詞檢查 rule-base | C.先掃 rule-base | D.先掃 rule-base 再斷詞 predict |
| ---- | ---- | ------| --- | -------- | ------ |
| 涉政 | 1376 | 0.69 / 0.77 | 0.84 / 0.94 | 0.84 / 0.94 | 0.69 / 0.77 |
| 辱罵 | 302 | 0.65 | 0.45 | 0.72 | 0.82 |
| 違禁 | 1182 | 0.83 | 0.98 | 0.94 | 0.80 |
| 色情 | 415 | 0.62 | 0.92 | 0.89 | 0.61 |
| 廣告 | 5529 | 0.99 | 0.99 | 0.99 | 0.99 |
### 分析
#### 整句 (BC)
* 優勢
* 正確率高
* 不必考慮多項違規時的違規順序
```
[('赵式', 0), ('弓弩', 3), ('销售', 5)] => 1? / 3? / 5?
[('我', 0), ('想', 0), ('买', 5), ('枪', 3)] => 3? / 5?
[('我', 0), ('想', 0), ('买', 5), ('三级片', 4)] => 4? 5?
```
* 風險
* 超出 Training data 涵蓋範圍時,表現未知
* 需決定 threshold (超過時斷詞)
```
[('我想买枪', 3)]
[('我好想买枪', 3)]
[('你想买枪吗', 3)]
[('妳想买枪吗', 0)]
```
#### 斷詞(A/D)
* 優勢
* 彈性較好 (不會超出 training data 就表現未知)
* 表現受斷詞結果 與 多項違規時的違規順序 影 想
```
[('我', 0), ('想', 0), ('买', 5), ('A', 0), ('片', 0)]
[('垃圾', 2), ('游戏', 0), ('该', 0), ('卸载', 0), ('了', 0)]
```
* 風險
* 超出 jieba 字典檔時可能切不好導致預測錯誤
* 多項違規時的違規順序影響最後分類類別
#### 斷詞後判斷詞彙是否 in rule base (A/B)
* 優勢
* 較不會錯抓
* 風險
* 不斷詞時此機制效果較差
#### 先掃 rule-base 是否存在於 nickname 中 (C/D)
* 優勢
* 範圍較大,只要有涵蓋一定抓的到
* 提早預判 label 而省下之後 predict 的時間
* 風險
* 範圍較大,可能錯抓(需要慎選 rule-base)
`涉政 27` / `辱罵 4` / `違禁 47` / `色情 14` / `廣告 0`


### To-do
1. 調整 rule base 減少錯抓
2. 決定 threshold
3. 更新 jieba 字典