本模型基於 Gemma2:2b 進行微調,目的是讓其依據台灣刑法學中常用的「刑法三階理論」,針對大型語言模型生成的詐欺罪「犯罪事實」段落,依照詐欺罪法條所規定的構成要件進行標註。
14 Pulls Updated 4 months ago
Updated 4 months ago
4 months ago
3f61b76deaec · 5.2GB
Readme
Model Card for Gemma2-2b-ner
本模型基於 Gemma2:2b 進行微調,目的是讓其依據台灣刑法學中常用的「刑法三階理論」,針對大型語言模型生成的詐欺罪「犯罪事實」段落,依照詐欺罪法條所規定的構成要件進行標註。具備生成詐欺罪「犯罪事實」的模型,可以參考以 BLOOM 560M 為基礎的BLOOM 560M Fraud微調模型,或是以 Gemma2 為基礎的Gemma2:2b Fraud微調模型。
Model Details
Model Description
本模型目前在識別出詐欺罪犯罪事實構成要件要素的平均準確率(percision)及召回率(recall)分別為0.98及0.75。從本模型訓練初期的語料資料錄為 979 筆開始,採用強化學習的流程,將生成的標註資料,採用人工對齊的方式修正後再投入語料庫中進行訓練。最終訓練用的語料計有 2577 筆,經過微調 3 個回合,就完成了本模型。以下是訓練過程各代的準確率及召回率的變化。
版次 | 資料量 | 準確率(Precision) | 召回率(Recall) |
---|---|---|---|
v1 | 979 | 0.272727273 | 0.218623482 |
v2 | 1538 | 0.725888325 | 0.581300813 |
v3 | 1886 | 0.717277487 | 0.465986395 |
v4 | 2173 | 0.826086957 | 0.550724638 |
v5 | 2577 | 0.983606557 | 0.75 |
Uses
目前可以識別出來的標註標籤有以下七種具名實體,無法識別出來的構成要件要素具名實體,則會傳回 None。
from colorama import Fore, Back, Style
elements = {'LEO_SOC': ('犯罪主體', 'Subject of Crime'),
'LEO_VIC': ('客體', 'Victim'),
'LEO_ACT': ('不法行為', 'Behavior'),
'LEO_SLE': ('主觀要件', 'Subjective Legal Element of the Offense'),
'LEO_CAU': ('因果關係', 'Causation'),
'LEO_ROH': ('危害結果', 'Result of Hazard'),
'LEO_ATP': ('未遂', 'Attempted')
}
tag_color = {'LEO_SOC': Fore.BLACK + Back.RED,
'LEO_VIC': Fore.BLACK + Back.YELLOW,
'LEO_ACT': Fore.BLACK + Back.GREEN,
'LEO_SLE': Fore.BLACK + Back.MAGENTA,
'LEO_CAU': Fore.BLACK + Back.CYAN,
'LEO_ROH': Fore.BLACK + Back.BLUE,
'LEO_ATP': Fore.WHITE + Back.BLACK,
}
為了要將本模型標註出來的結果以更明顯的方式識別,可以參考以下的程式碼,將本大型語言模型生成的標註結果以及所標註的標籤,同時送入以下的函數,就可以將結果以 colorama 的方式著色標註。
from colorama import Fore, Back, Style
def tag_in_color(response_content, tag):
'''
說明:
將標註結果依照標籤進行標色。
Parameters:
response_content (str): 已經標註完畢並有標籤的內容。
tag (str): 標籤名稱,英文,沒有括號。
Return:
result (str): 去除標籤並含有 colorama 標色符號的字串。
'''
response_head = response_content.split("標註結果:\n")[0]
response_body = response_content.split("標註結果:\n")[1]
start_index = 0
# 使用正規表示式找出所有構成要件要素文字的起始位置
# 加入 re.escape() 是為了避免處理到有逸脱字元的字串會報錯而中斷程式執行
findall_open_tags = [m.start() for m in re.finditer(re.escape(f"[{tag}]"), response_body)]
findall_close_tags = [m.start() for m in re.finditer(re.escape(f"[/{tag}]"), response_body)]
try:
parts = [response_body[start_index:findall_open_tags[0]]] # 第一個標籤之前的句子
except IndexError:
parts = []
# 找出每個標籤所在位置,取出標籤文字並加以著色。
for j, idx in enumerate(findall_open_tags):
tag_text = response_body[idx + len(tag) + 2:findall_close_tags[j]]
parts.append(f"{tag_color[tag]}" + tag_text + Style.RESET_ALL) # 標籤內文字著色
closed_tag = findall_close_tags[j] + len(tag) + 3
try:
next_open_tag = findall_open_tags[j+1]
parts.append(response_body[closed_tag: next_open_tag]) # 結束標籤之後到下一個標籤前的文字
except IndexError:
parts.append(response_body[findall_close_tags[-1] + len(tag) + 3 :]) # 加入最後一句
result = ''
for _, part in enumerate(parts):
result = result + part
if result == '':
color_result = f"{tag_color[tag]}{tag}" + Fore.RESET + Back.RESET + " " +Fore.YELLOW + Back.RED + "*** 無標註結果 ***" + Fore.RESET + Back.RESET
else:
color_result = Fore.RED + Back.YELLOW + "標註著色結果:\n" + Fore.RESET + Back.RESET + result
return color_result
Out-of-Scope Use
本模型目前僅能標示依據中華民國刑法規定的「詐欺罪」所擬撰(或是語言模型生成)之「犯罪事實」中的構成要件要素,若要具備標註其餘各種不同的犯罪構成要件要素之標註能力,則是後續可以發展以及擴增語料庫的方向。
訓練資料
本模型是以強化學習的方式微調 Gemma2:2b 並經過多回合人工對齊生成資料反覆迭代訓練而成,訓練所需要的資料集是法律要件資料集。使用者可以下載後自己持續迭代後修正及擴充資料集內容。