---
# System prepended metadata

title: 不當訊息及異常帳號偵測於遊戲社交平台之應用
tags: [Final Report]

---

# 不當訊息及異常帳號偵測於遊戲社交平台之應用

[TOC]

## 壹、前言

由於網際網路的快速發展，促進訊息快速傳播，造成的影響可大可小，從商業利益到人民革命，社群媒體都能成為消息傳遞的載體，進而造成影響力。

各國為了有效控制社會，均有不同程度的言論審查制度，在實行上最著名的國家中華人民共和國（以下簡稱中國）。根據《南華早報》指出，中國政府會定期指導各個敏感議題，而多數行業為了確保安全，會實行自我言論審查，以確保由自家發出的言論是符合言論審查制度。

有心人士會利用社群媒體公開、成本低、快速的特性，為了自己利益不當利用社群平台，違反社群交流的初衷，並造成商業甚至政治上的損失與影響。

在這個專題，我們特別與國內某知名遊戲公司（以下簡稱公司）合作，取得由公司發行的某款遊戲（客群主要為中國）聊天室資料庫。除了利用深度學習神經網路來判斷不當文字（如：涉政、色情、廣告…），並將帳號文字分群試著偵測假帳號，以提升平台穩定度。

## 貳、研究方法
### 一、不當訊息偵測

圖 1 為本模型流程圖，首先會先使用中文斷詞模組 (jieba) 將訊息切成數個詞彙，再以斷詞的結果，初步過濾存有「涉賭禁字」、「廣告關鍵詞」、「類似帳號字串」等訊息。再將剩餘的斷詞結果內嵌（embedding）成詞向量後，透過卷積神經網路的文本分析模組 (TextCNN) 把各個詞彙分類成正常一類與非正常五類（各類說明如下表所示）。最後檢查訊息各詞彙的發音，是否與禁字表其中某詞彙相符，若有的話則改判定為與禁字表該詞彙相同不當訊息類型。

+ 涉政：涉及中國政治相關議題的言論。
+ 辱罵：對他人進行人身攻擊的言論。
+ 違禁：有違中國法律之相關行為的言論。
+ 色情：與性慾相關的言論。
+ 廣告：引誘使用者購買產品或服務的言論。
+ 正常：不符上述條件的言論。


![](https://i.imgur.com/ZdUYUXk.png)
--圖  不當訊息舉例

![](https://i.imgur.com/TZRudgW.png)

--圖 惡意訊息偵測模型流程圖

#### 1.1 資料前處理
由公司提供聊天室內容，訊息資料欄位內容如下：

+ EventTime：發送時間 (Unix Timestamp格式)
+ ReceiverID：發送者 ID
+ SenderID：接收者 ID
+ Message：訊息內容

我們在訊息處理上會只使用 Message ，並去除重複的訊息後再開始進行訊息斷詞。

##### 1.1.1 訊息斷詞
為了能理解中文語句的語意，需將訊息切成數個詞彙。我們使用中文斷词套件 jieba將訊息分割成獨立的詞彙，該套件能將訊息列出所有可能的斷詞組合，以「下雨天」為例，可以被分成「下雨」、「雨天」與「下雨天」三種不同詞彙。該結果亦可以有向無環圖 (Directed Acyclic Graph, DAG) 表示，並使用動態規劃 (Dynamic programming)，根據詞典中的詞頻 (Term Frequency)，計算出機率最大的路徑，並輸出結果，例如「下雨天留客天留我不留」可被分割成「下雨天、留客、天留、我、不留」。

##### 1.1.2 禁字表與帳號過濾
將訊息斷詞後，將先強制過濾有涉賭禁字的訊息，並透過定期蒐集的廣告關鍵詞，判斷是否為廣告訊息。而帳號通常都以英數組合而成，我們可以利用這個原則，使用正規表示式簡易判斷該訊息是否有類似帳號的字串。

##### 1.1.3 詞向量轉換
利用 XLNet 的簡體中文 Pre-train model 將斷詞後的訊息轉換成詞向量，並刪減與填補成統一的 TextCNN 輸入格式。

#### 1.2 TextCNN

將把訊息的詞彙轉成詞向量後，透過卷積神經網路的文本分析模組 (TextCNN)，將各個詞彙分類成正常一類與非正常五類（涉政、辱罵、違禁、色情、廣告）。

TextCNN模型結構如圖所示，資料進行內嵌層（Embedding Layer）使用 XLNetTokenrizer 的 pre-trained model 詞向量的維度是固定的，相對於使用 One-Hot-Encoding 還小，同時在詞向量空間上語意相同的詞向量會很相近，所以將所有詞 concat 起來後就可以把這個矩陣有點像是圖像的 CNN 一樣成為詞向量後，卷積層（Convulsion Layer）的過程跟一般的 CNN 相比，一個卷積核的寬度需要跟詞向量的寬度一樣，後面就是正常的卷積流程，在池化層（Pooling Layer）是做 max-overtime-pooling，也就是在對應的 feature map 求最大值，並把最後得到的值做 concat 進入 Fully Connected Layer 和做 softmax 做分類任務分成我們要的 6 大類。

![](https://i.imgur.com/VuUwJ3y.png)
--圖 TextCNN 模型結構圖

#### 1.3 同音異字檢測
在模型預測後我們將每個詞轉換成羅馬拼音並找出此拼音在拼音禁字表中所屬的label，若此label與模型預測不同，則匯出至dataframe，最終由廠商決定選擇模型預測的label或是拼音搜尋後的label。

![](https://i.imgur.com/lA6R67J.png =400x)

圖) 同音異字且意義不同的字能夠有效的找出，如：
- 沖值、充值
- 性福、幸福
- 首夠、首購
- 換弊、換幣



### 二、異常帳號偵測

為避免玩家建立大量假帳號於遊戲牟取不當利益。我們透過文字分群將帳號分類，藉此提醒管理者需特別關注哪些帳號。

我們使用萊文斯坦距離 (Levenshtein Distance) 找到帳號字串間的關聯性，由於資料量龐大，運算時間會過長，因此在做最短編輯距離(萊文斯坦距離為其中一種演算法)的運算之前，先將完整資料做一次初步分群。

![](https://i.imgur.com/6XOicLS.png)
圖 萊文斯坦距離 (Levenshtein Distance) 公式

#### 2.1 初步分群
我們將帳號字串經過雜湊得到的值與字串的長度同時作為特徵，透過 k-means進行初步分群。
![](https://i.imgur.com/5QzuHCc.png)
圖) Hash Value & String Length
![](https://i.imgur.com/qIrLWLB.png)
圖) 初步分群結果


##### 2.1.1 最短編輯距離 MED(Minimum edit distance)
得到初步的分群結果後，我們將各群資料再做MED，得到距離矩陣後，在透過Hierachy clustering做進一步的分群。
![](https://i.imgur.com/OxeDYfX.png =500x)
圖) MED Matrix

#### 

#### 結果
![](https://i.imgur.com/XciyWjK.png =500x)
圖) Hierachy Clustering


## 參、實驗結果
### 一、資料準確度
經過各階段的判斷後，正確率高達97 %，各類型的預測結果如圖3所示。實際使用聊天室訊息內容測試，結果如圖4所示，會顯示出該訊息的語系、帳號數量以及各類型的詞之統計。
![](https://i.imgur.com/LSeuFtL.png)
### 二、網頁展示



#### 2.1 訊息分析
使用者輸入於文字框，回傳分析結果（語系、帳號、字詞種類等）。
 ![](https://i.imgur.com/j905k4Y.png)


##### 2.1.1 正常訊息
![](https://i.imgur.com/8VbpRNP.png)

##### 2.1.2 涉政訊息
![](https://i.imgur.com/RwRKyUz.png)

##### 2.1.2 辱罵及色情訊息
![](https://i.imgur.com/2Jnk6wa.png)


##### 2.1.2 廣告訊息
也可以依需求增加人工禁詞。
![](https://i.imgur.com/d77N6o8.png)

#### 2.2 禁詞管理
管理者可依照自身需求加入人工禁詞。
![](https://i.imgur.com/U5o5bxv.png)

#### 2.3 常見字詞分析
我們透過整個月的聊天室訊息來做重要字詞的分析，同時也判斷字詞的種類，最後以文字雲呈現字詞的分部。
![](https://i.imgur.com/r14alHC.jpg)

##### 2.4 禁詞待選清單
使用者想及時將分析出來的常見詞加入人工禁詞，系統也有提供字詞列表可以直接加入禁詞清單。
![](https://i.imgur.com/PrdoeC6.png)


## 肆、未來展望

希望之後能夠加入社群網路的概念，將發送出不當訊息跟偵測出可疑帳號的發送者帳號都標注起來，或是加入使用者發送不當訊息的歷史紀錄，若連續發送不當訊息，我們可以認為該使用者為廣告帳號或是帳號已被盜用等情況，可以進一步進行封號或是禁言等管理，讓管理者能夠更加了解聊天室內的玩家狀況。


## 伍、參考資料
https://arxiv.org/abs/1408.5882
https://github.com/fxsjy/jieba
https://github.com/saffsd/langid.py

###### tags: `Final Report`