高冠東
(中央司法警官學院信息管理系,河北保定 071000)
隨著科學技術的發展,人工智能技術在不同領域取得較好的發展,在司法領域中引入人工智能技術成為必然趨勢。2018年司法部發布的《“數字法治、智慧司法”信息化體系建設指導意見》中,對“數字法治,智慧司法”的信息化體系建設提出指導性意見。同時“智慧司法”[1]“智慧法院”[2]等以人工智能為支撐,取得較好的發展,促進司法信息化和智能化[3-5]。自然語言處理技術作為人工智能中的重要組成部分,為在海量的司法文本數據中挖掘具有重要價值信息提供支持。文本分類作為自然語言處理中一項基本任務,在司法領域中得到廣泛應用,例如類案推送[6]、爭議焦點[7]、法條預測[8]等。
文本數據是非結構化的,并且噪聲很大。在執行文本分類時,用戶獲得了標記良好的訓練數據和監督學習的益處。然而,文檔聚類是一個無監督的學習過程,用戶借以通過讓機器了解各種文本及其特征、相似度和差異性,嘗試將文檔分割和分類為不同的類別。這使得文檔聚類更有挑戰性,也更有趣。本研究考慮擁有一個犯罪文檔語料庫,以期討論各種不同的概念和想法。人類以一種方式將文本鏈接,文本使得人類能使用從過去所學到的知識,并可以將其應用于區分概念。例如,與句子“2016 年11 月份,被告人溫某某與被告人蔡某某合謀走私柴油?!毕啾?,句子“2012 年6 月初,郭某與汪某聯系購買10 000 克毒品氯胺酮。”更類似于“2016年春節后的一天,董某某、嚴某某(另案處理)密謀生產毒品甲卡西酮?!边@句話。用戶可以輕松并直觀地確定特定的關鍵短語,例如:走私、毒品、氯胺酮、甲卡西酮等,這有助于其確定哪些句子或文本更為相似。
在司法實踐中,判決案例是一項非常重要的資料。通過分析判決案例,法官可以了解類似案例的判決結果,并參考其理由和邏輯進行判斷。然而,由于案例數量龐大,法官往往需要花費大量的時間和精力來尋找類似案例。因此,構建一種基于相似性聚類的智能推薦系統,可以幫助法官快速準確地找到與當前案件類似的案例,提高司法效率和判決質量。
推薦系統是機器學習中最流行、最常用的應用之一。通常,它們用于向用戶推薦實體。這些實體可以是任何東西,例如產品、案例、電影、服務等。常見的推薦例子包括:
1)司法案例庫推薦相似案例。
2) Amazon Prime、Netflix 和Hotstar 推 薦 電 影/節目。
3)YouTube推薦觀看的視頻。
推薦系統通常可以通過三種方式實現:
1)簡單的基于規則的推薦系統:基于特定的全局指標和閾值。
2)基于內容的推薦系統:基于特定的感興趣實體提供相似的實體。
3)協同過濾推薦系統:不需要元數據,但用戶會嘗試根據不同用戶和特定項的過去評分來預測推薦和評分。
本研究構建了一個司法案例推薦系統,借此基于與不同案例有關的數據/元數據,嘗試推薦類似的司法案例,推斷未來案情結果。
本研究以中國裁判文書網為語料源,收集并選取了詐騙、行賄、走私、制造毒品、危險駕駛、搶劫、綁架、故意傷害、故意殺人、強奸等指控的典型案件判決書共123 條。數據集樣式如圖1 所示,由姓名、年齡、民族、戶籍所在地、文化程度、職業、案件類型、案由、罪名、犯案事實、刑期等多個短語組成。

圖1 司法案例數據集
本研究構建司法案例推薦系統,具體流程如圖2所示:

圖2 司法案例推薦系統技術路線圖
推薦都是關于了解基本特性的,它使我們傾向于一種選擇而不是另一種選擇。項目之間的相似性(在本例中是司法案例)是了解為什么用戶選擇一個司法案例而不是另一個司法案例的一種方式。有不同的方法可以計算兩個項目之間的相似度。
司法案例語料在計算相似度之前一般需要一系列的預處理工作,才能輸入得符合要求。首先需將用戶預定義詞典載入,防止一些重要的短語被分詞器所分開。其次,載入停用詞典,減少噪聲。然后,讀入語料文件對整個語料庫進行分詞操作。最終將整個語料庫制作成向量形式,才能進行相似度計算。
相似性度量,即綜合評定兩個事物之間相近程度的一種度量。兩個事物越接近,它們的相似性度量也就越大,而兩個事物越疏遠,它們的相似性度量也就越小。相似性度量的給算種類繁多,一般根據實際問題進行選用。相似度度量用于文本相似度分析和聚類。任何相似度度量或距離度量都可測量兩個實體之間的緊密程度,該實體可以是任何文本格式,例如文檔、句子甚至側向。這種相似度度量有助于識別相似實體和區分彼此差異明顯的實體。相似度度量非常有效,有時選擇正確的度量可能會對最終分析系統的性能產生很大的影響。
文本相似度的主要目標是分析和度量文本兩個實體之間的緊密程度。文本的這些實體可以是簡單的標識符或詞項,例如單詞或包含句子或文本段落的整個文檔。分析文本相似度的方法有很多種,可以將分析文本相似度的意圖大致分為以下兩個方面:
1)詞匯相似度:這涉及觀察文本文檔的語法、結構和內容方面的內容,并根據這些參數度量它們的相似度。
2)語義相似度:這涉及確定文檔的語義、含義和上下文,然后確定它們彼此間的緊密程度。在此方面,依存語法和實體識別是可以提供幫助的便捷工具。
文本分詞后,如何將其送入一個計算文本相似度的過程中呢?答案是文本向量化,即用向量或矩陣的形式表示文本,也可以理解為對文本的數值化處理。文本向量化從數學角度可以解釋為映射,即將單詞映射到另一個空間。本研究將把語料庫制作成詞袋模型+TF-IDF的向量化表示形式。結果如圖3所示。

圖3 文本向量化函數測試結果
目標案例預處理與司法案例數據集預處理類似,也是通過加載用戶預定義詞典、刪除停用詞、分詞、向量化4步組成。唯一區別是由整個語料庫案例變為了單個案例預處理。目標案例預處理一共分為載入用戶預定義詞典、停用詞刪除以及分詞操作、文本向量化(將單一目標案例制作成詞袋模型+TF-IDF的向量化表示形式)3個步驟:
現在已經使用基于TF-IDF的向量表示對整個語料庫和目標案例進行了規范化和向量化處理,接下來看看如何計算具有余弦相似度和文檔相似度。
本研究重復使用計算余弦相似度的概念來計算文檔而不是詞項的余弦相似度分數。文檔向量將是基于詞袋模型的向量,其具有TF-IDF值而不是詞頻。
基于Numpy的余弦相似度代碼如下所示:
def Cos_Distance(vector1,vector2):
vec1=np.array(vector1)
vec2=np.array(vector2)
return float(np.sum(vec1 * vec2))/ (np.linalg.norm(vec1) * np.linalg.norm(vec2)) # 此處可以更換成任意的相似度計算公式
實現余弦相似度的代碼之后,便要計算目標案例與整個司法案例語料庫的相似度,代碼如下所示:
def similarity_words(vec,vecs_list): # 傳進目標語句的向量形式和整個語料庫的向量形式
Similarity_list=[]
for vec_i in vecs_list:#拿出整個語料庫中語句Similarity=Cos_Distance(vec,vec_i)#計算目標語句與整個語料庫中語句的余弦相似度
Similarity_list.append(Similarity)return Similarity_list
將目標案例與整個語料庫中的司法案例進行對比,以計算其與整個語料庫中的案例的相似度,并返回前十條相似度較高的樣本,借此可以推斷目標案例未來的案情結果,可以成為法律咨詢方面的一個有價值的補充。代碼如下所示:
def main(words,token2id,idf_dict,tfidf_library):
cut_words=split_words(words)#對目標語句進行分詞
vec=make_tfidf(cut_words,token2id,idf_dict)#將目標語句轉換成詞袋模型+TFIDF的表現形式
similarity_lists = similarity_words(vec, tfidf_library)#計算相似度,返回目標語句與整個語料庫中每個語句的相似度列表
sorted_res=sorted(enumerate(similarity_lists),key=lambda x:x[1])#將相似度列表轉換成枚舉形式,針對枚舉類型的第2個值進行升序排序
outputs = [[word_list[i[0]], i[1]] for i in sorted_res[-1:-11:-1]]#取出排名前十的原始語料
return outputs
最終測試某一條目標案例,代碼如下所示:
words="原審判決認定:被告人于某某與同居女友夏某(被害人,歿年43 歲)因于飲酒問題而多次爭吵。2020年5月27日17時許,因于再次飲酒,夏在開原市內服藥自殺,此舉引發于的憤怒。于趁夏昏睡之機,用電熱毯電源線勒夏頸部,致夏窒息和缺氧;后又用平底炒勺擊打夏頭面部數下,用蔬菜刮刀割夏的頸部數下,被害人夏某經搶救無效死亡。經法醫鑒定:夏某系頭右額部、面部遭受反復鈍器打擊致硬膜下血腫、蛛網膜下腔出血、腦挫傷死亡。案發后被告人于某某主動投案,并對犯罪事實供認不諱"
outputs=main(words,token2id,idf_dict,tfidf_library)
for i in outputs:
print(str(i[1])+" "+i[0])
實驗結果,返回了十條與目標案例相近的案例與相似度。
本研究使用文本相似度開發了一種司法案例推薦系統,并將相似的文檔聚類在一起。利用AI算法來學習過去法律情景的案例信息集,構建預測模型,推斷未來案情結果,可以成為法律咨詢方面的一個有價值的補充。