盛蒙蒙
(浙江警察學院計算機與信息安全系,杭州310051)
Python 語言因其簡單易學、功能強大、高效靈活等優點,成為“復雜信息系統時代”利用計算機解決問題最直觀的表達工具,各大院校紛紛開設Python 語言程序設計課程。從多所公安院校的實際教學效果看,Py?thon 語言適合的教學對象是需要利用計算機解決各類實際問題、甚至是公安實戰問題的群體,這恰是網絡安全與執法專業(以下簡稱網安專業)程序設計課程的教學目的。因此,如何以Python 程序設計課程為載體,培養學生的實戰應用能力和創新能力已成為研究熱點。
國內外專家對Python 語言程序設計課程進行多方面的探索和研究。X Kui 等人[1]利用交互式課堂管理系統和在線判斷系統來促進學生自我探索能力。Fangohr等人[2]設計自動評估和反饋系統,并根據評估結果提供合適的指導。文欣秀等人[3]以軟件工程思想為指導,通過模塊化教學,提高學生的創新實踐能力和問題分析能力。趙廣輝等人[4]從教學目標、課程內容、教學設計和教學形式方面對程序設計公共課進行重構,實現賦能目標。上述文章從教學方式、教學設計、評價系統、能力建設等方面對Python 程序設計課程進行了研究,然而對實驗環節的討論甚少。我校是公安院校,十分注重實戰應用能力的培養。本文以基于文本內容的垃圾短信識別為例,探討Python 程序設計課程綜合實驗案例的設計,目的是提高學生的實踐能力和創新能力,增強職業認同感和學習熱情。
首先,實驗內容是實驗目標的主要載體,決定實驗效果。目前單一固定的實驗主題造成Python 知識與實戰應用嚴重脫節,學生對課程滿意度低,學完就忘。其次,Python 綜合實驗需要進行探究性學習來深入理解教學內容,固定的學習時間會阻礙學生的探索欲望,造成學生淺嘗輒止、難以綜合利用所學知識去解決實際問題的現狀。第三,傳統實驗教學模式是教師講授實驗要求,同學們按既定的步驟開展實驗并提交報告,這使得學生滋生被動完成任務甚至抄襲實驗報告的心理。
清華大學副校長楊斌[5]指出,“對于‘新工科’建設要‘授人以欲’。因此,從培養學生的實踐能力和創新能力角度出發,在網安工作的實際需求中提取實驗素材,探索Python 課程實驗教學改革,具有重要的現實意義。
實驗教學對象是網安專業大二上學生,有C 語言和數據結構基礎,對網絡安全業務有一定的了解。筆者根據公安網警偵破網絡犯罪案件的能力要求,篩選3個常見的公安應用,并結合Python 教學要求和教師科研經驗對實驗進行改編,使其既保持實驗內容的真實性、實踐性,又通過設計加強它的學科性、創新性。同時,采用基于SPOC 的混合教學模式進行實驗教學,有效提升學生“自主學習、團隊協作、融合創新”能力。
綜合實驗的內容來自公安實際工作需求,在此基礎上將課程知識點有效地進行融入,能引起學生強烈的解決問題的內生動力。同時,實驗的綜合性促使學生在腦海里將各個章節的“知識孤島”變成整門課的“知識地圖”,鍛煉綜合應用知識的能力。
SPOC(Small Private Online Course)形式進行實驗教學,能以學生為中心,注重培養學生的學習能力和實踐能力[6]。課程采用SPOC 混合學習模式探討3 個主題的綜合實驗,并予以難度區分,既讓學生“吃得飽”,也能“走得遠”,有效延伸教學廣度和深度。實驗主題具體如表1 所示。此外,SPOC 教學為學生靈活的學習時間創造條件,十分契合公安院校學生的學習實際。

表1 綜合實驗的主題設計
韓紹程等人[7]指出,將課程評定分數相對“均勻”和“明確”地分布在學生參與課程學習的各個環節,有利于調動學生學習的積極性,提高學生的學習興趣。綜合性實驗成績包括線上學習分、線下討論分、展示評價分和提交文檔評分。其中展示部分是以小組為單位對實驗進行功能介紹、代碼演示和現場答疑。如此小組比賽的形式,即是壓力也是動力,為取得更好的成績,每個小組都用極大的熱情去完成實驗。
近年來,電信詐騙的手段趨于專業化、多樣化,不法分子利用短信等方式進行詐騙,嚴重影響社會穩定,威脅人民財產安全[8]。課程以此為背景開發了垃圾短信識別程序實驗。
本實驗采用Python 語言進行數據預處理、分詞、數據建模與模型評價工作。具體實驗環境如表2 所示。

表2 實驗環境
本實驗首先讀取脫敏的短信數據文件,然后通過采樣、數據清洗、分詞等步驟為分析做好數據準備,接著采用詞云圖方法進行直觀分析,再通過數據建模方法進行模型構建和模型評估。主要流程如圖1 所示。

圖1 基于文本內容的垃圾短信識別綜合實驗設計
(1)讀取數據
本實驗提供80 萬條的脫敏短信數據,以csv 格式保存。其中正常短信72 萬條(類型以0 表示),垃圾短信8 萬條(類型以1 表示)。通過pandas 庫,用read_csv 函數來讀取短信數據。數據的屬性為3 列,包括序號、短信類型、短信內容。部分數據內容如表3所示。

表3 短信文件的部分數據內容
(2)對數據進行采樣
首先,對正常短信和垃圾短信進行統計。數據顯示,正常短信占了90%,垃圾短信僅占10%,屬于不平衡數據。因此,實驗采用欠采樣方式,通過減少正常短信的樣本數量來提高垃圾短信的分類性能,最后獲取正常短信和垃圾短信各1 萬條的數據集形成待分析的樣本。
(3)數據清洗
將短信列(message)提取出來,去除文本中的空格和文本脫敏后造成的大量‘x’符號,并刪除重復短信。然后使用jieba 中文分詞庫,對短信數據進行分詞處理。分詞結果中會出現很多沒有太大檢索意義的詞語,如“的”、“呢”、“一些”等,這些稱為Stop Words(停用詞)。分詞后的數據需要做去除停用詞處理。
(4)基于詞云圖的短信可視化分析
可視化分析是指通過形象地展示數據分析結果來方便用戶理解。本實驗通過詞云圖分析,可以直觀地發現兩類短信中常見的詞語。通過詞云圖可以看出,垃圾短信經常出現的詞語有“活動”、“送”、“折”等,與商家促銷廣告相關,符合我們對垃圾短信的日常認知。如圖2 所示。
(5)用樸素貝葉斯進行模型訓練
實驗選用模型對已有短信分類進行學習,再通過測試數據計算模型的精準度,若符合要求,可以發布模型,用該模型實現對新增短信的類型自動識別。
①短信文本的特征提取。實驗使用逆文檔頻率(TF-IDF)方法進行特征提取,其原理是用統計方法評估一個字詞的重要性,某個詞項在多篇語料庫文本中出現的次數越多,該詞項的區分能力越差[9]。計算每個詞項的TF-IDF 值,公式如下所示:

其中,tf(wi)表示詞語的詞頻,idf(wi)表示逆文檔頻率,用于衡量關鍵詞的權重,N 表示詞語在某文檔中的頻次,M 表示該文檔的詞語數,D 表示總文檔數,Dw表示包含該詞語的文檔數。計算所有詞語的TF-IDF的值,將短信文本表示為文檔-詞條矩陣。
②獲取訓練數據和測試數據。隨機抽取80%的樣本數據為訓練數據,剩下的20%為測試數據,通過train_test_split 函數進行數據拆分。
③分類器選擇與訓練。模式識別分類器種類很多,scikit-learn 提供了常用的分類器,如支持向量機、最近鄰、神經網絡模型等。本實驗采用的是高斯樸素貝葉斯模型。
④對模型進行評估。評估模型通過四種指標進行評價,結果如表4 所示。

圖2

表4 高斯樸素貝葉斯模型評分結果表
(6)模型對比分析
學有余力的學生可以進行擴展學習,例如使用支持向量機(SVM)、決策樹(Decision Trees)、最近鄰(NearestNeighbors)等機器學習模型進行實驗對比。另外,學生們在細節上可以有更多改進,例如為逃避垃圾短信檢測,部分短信會采用拼音處理,預處理的時候可以加入拼音檢測;例如類似“#$@[]”等干擾字符過多的,可以直接歸類為垃圾短信等。
通過教學實踐發現,以SPOC 形式進行Python 程序設計綜合實驗教學取得良好效果。首先,實驗的每個步驟覆蓋多個知識點,對一學期學習的各章節內容形成有效連接,讓學生切身感受到Python 語言的強大性和實用性。具體如表5 所示。

表5 實驗所覆蓋的知識點
其次,采取SPOC 實驗教學,學生以團隊形式選取感興趣的主題進行實踐并舉行同臺競賽,大大激發學生的學習主動性和不斷完善項目的動力,鍛煉科研能力,促進深度學習。
最后,教師以SPOC 形式講解綜合實驗,即能將復雜的問題通過視頻形式講解清楚,又將教師從重復的勞動中解放出來,把更多的精力放在教學活動的組織、評價和資源的建設等方面,從而達到教學相長的效果。
本文基于Python 語言實驗教學的特點和傳統編程實驗教學中存在的不足,結合公安院校的培養要求,以垃圾短信識別為例,詮釋用綜合實驗串聯Python 程序設計課程知識點的完整過程,在培養學生自主學習、動手實踐和應用創新能力方面取得良好的教學效果。Python 程序設計作為網安專業的核心課程,教學團隊需要不斷汲取國內外的優秀教學經驗,不斷改進與創新教學內容、教學方法,以培養學生的綜合能力和創新能力為目標,為社會培養更多的卓越警務人才。