東南大學(xué)公共衛(wèi)生學(xué)院流行病與衛(wèi)生統(tǒng)計系(210009) 黃子陽 王詩遠 劉癸壬 劉 沛
《國際醫(yī)學(xué)用語詞典》(medical dictionary for regulatory activities,MedDRA)是在人用藥物注冊技術(shù)要求國際協(xié)調(diào)理事會(international council for harmonization,ICH)主辦下編制的國際標(biāo)準(zhǔn)醫(yī)學(xué)術(shù)語集[1]。它被廣泛應(yīng)用于對由藥品或醫(yī)療器械引起的不良事件的規(guī)范化表達。MedDRA的應(yīng)用不僅使得衛(wèi)生管理部門和制藥企業(yè)可以更方便地評估藥品或醫(yī)療器械的安全性,同時也有利于安全性數(shù)據(jù)的跨公司交換以及國際間的學(xué)術(shù)交流與合作。MedDRA12.1推出了中文版,中文版的推出為我國不良事件的規(guī)范化表達提供了技術(shù)支撐[2]。使用MedDRA官方提供的中文版桌面瀏覽器進行人工編碼時,需要將原始不良事件描述逐個輸入軟件中并手動選擇MedDRA編碼,過程繁瑣且易出錯。而若利用自動編碼系統(tǒng)減少MedDRA編碼過程中人工參與的程度,則可帶來十分可觀的收益[3]。雖然目前國內(nèi)已有應(yīng)用MedDRA對不良事件描述編碼的報道[4-6],但關(guān)于開發(fā)中文版MedDRA自動編碼系統(tǒng)的報告卻未見報道。
1.設(shè)計原理
在使用MedDRA桌面瀏覽器進行編碼時,我們發(fā)現(xiàn),由于該軟件不支持批量編碼,因此只能通過手工將不良事件描述逐條輸入軟件。另外,該軟件在搜索匹配術(shù)語時采用單字匹配法,導(dǎo)致其精準(zhǔn)度低,因此當(dāng)搜索非標(biāo)準(zhǔn)不良事件描述時,匹配到的MedDRA術(shù)語雖然條數(shù)眾多,但包含正確匹配MedDRA術(shù)語的概率卻較低。在臨床試驗中,需要進行MedDRA編碼的不良事件數(shù)目往往很大,如果通過人工逐條輸入編碼并在眾多匹配結(jié)果中選擇,除工作量大之外,還十分容易發(fā)生匹配錯誤。為了解決這些實際問題,我們考慮將從MedDRA官網(wǎng)下載的包含全部MedDRA術(shù)語層級結(jié)構(gòu)的ASCII文件導(dǎo)入SAS,在SAS中先使用SQL語句將標(biāo)準(zhǔn)的原始不良事件描述與相應(yīng)MedDRA術(shù)語直接匹配;而對于那些非標(biāo)準(zhǔn)的原始不良事件描述,首先通過引入編輯距離算法計算其與各MedDRA術(shù)語的相似度,之后對相似度排序,從而以較大概率通過人工快速選出匹配的MedDRA術(shù)語。另外,根據(jù)“自動學(xué)習(xí)”理念,將每次人工選擇的結(jié)果保存于同義詞典中,當(dāng)下次再遇到已選擇過的非標(biāo)準(zhǔn)不良事件描述時可以直接完成匹配,隨著同義詞典中儲存同義詞的增多,就可不斷提高該自動編碼系統(tǒng)匹配的效率。
2.SAS宏程序工作流程
按照前述原理,我們開發(fā)了一套基于SAS宏程序并引入了相似度計算的MedDRA自動編碼系統(tǒng),SAS宏程序工作流程見圖1。
圖1 MedDRA自動編碼SAS宏程序工作流程
(1)首先判斷當(dāng)前是否為初次使用該宏程序,若為初次使用,需在參數(shù)中指定用于生成MedDRA編碼詞典的ASCII文件所在路徑,宏程序會自動將所需的全部ASCII文件導(dǎo)入SAS,并合并為一個單獨的且具有完整MedDRA層級結(jié)構(gòu)的SAS數(shù)據(jù)集,稱為MedDRA編碼詞典。
(2)之后判斷當(dāng)前是否已存在MedDRA同義詞典,若存在則先根據(jù)同義詞典對原始不良事件描述進行同義詞替換,之后再與MedDRA編碼詞典中的LLT術(shù)語進行初次匹配;若不存在,則直接將原始不良事件描述與MedDRA編碼詞典中的LLT術(shù)語進行初次匹配。
(3)初次匹配完成后,通過SAS的PROC IML模塊調(diào)用R的stringdist包,對每個未完成初次匹配的非標(biāo)準(zhǔn)不良事件描述分別計算其與MedDRA編碼字典中各LLT術(shù)語的相似度,并保留相似度最高的若干個LLT術(shù)語作為對該非標(biāo)準(zhǔn)不良事件描述推薦選用的LLT術(shù)語;對于同時包含多個癥狀的非標(biāo)準(zhǔn)不良事件描述(如,將“感冒、咳嗽、發(fā)熱、流涕”作為一條不良事件描述),該宏程序可以自動對其進行分詞并分別計算每個癥狀描述與各LLT術(shù)語的相似度,從而實現(xiàn)更為精準(zhǔn)的LLT術(shù)語推薦。計算完成后,將相似度計算結(jié)果輸出為EXCEL表格以進行人工編碼,編碼完成后自動將結(jié)果返回SAS。
(4)根據(jù)人工編碼結(jié)果進行第二次匹配。全部匹配完成后將每一原始不良事件描述及其對應(yīng)的MedDRA標(biāo)準(zhǔn)術(shù)語(包括LLT、PT、HLT、HLGT、SOC及其各自對應(yīng)的代碼)輸出到結(jié)果數(shù)據(jù)集中;最后利用MedDRA同義詞典記錄每次人工編碼的結(jié)果。
3.編輯距離算法及其實現(xiàn)
本自動編碼系統(tǒng)選用編輯距離(levenshtein distance,LD)算法計算非標(biāo)準(zhǔn)不良事件描述與LLT術(shù)語間的相似度。編輯距離算法作為常用的字符串相似度求解算法,具有應(yīng)用廣泛、查找有效和時間復(fù)雜度較低等優(yōu)勢[7]。編輯距離是指在兩個字符串之間,由一個字符串轉(zhuǎn)為另一個字符串所需要的最少編輯次數(shù)(可用的編輯操作包括替換一個字符、插入一個字符和刪除一個字符)。編輯距離相似度的計算公式為:
兩個字符串之間的編輯距離越小,其相似度越高;反之,相似度越低。
編輯距離算法可以通過R包stringdist中的stringsim函數(shù)實現(xiàn)。在SAS 9.4版本中,可以通過PROC IML模塊直接調(diào)用R包stringdist(需要先在本地R軟件中安裝該R包),代碼示例如下:
proc iml;
call ExportDataSetToR(“Target_MeaDRA”,“Target_MedDRA”);
call ExportDataSetToR(“SingleTerm”,“SingleTerm”);
%include “C:UserskynooDesktopMedDRAinclude.sas”;
call ImportDataSetFromR(“Single_Output”,“Single_Output”);
quit;
Call ExportDataSetToR語句可以將SAS數(shù)據(jù)集傳入R中;Call ImportDataSetFromR語句可以將R中的數(shù)據(jù)傳回SAS中;調(diào)用的目標(biāo)R代碼需要放置于Submit塊中,由于SAS不允許將Submit塊直接置于宏中,所以需要先將Submit塊置于另一個SAS程序,之后在宏中通過%include命令對該SAS程序進行引用。SAS程序Include.sas即用于存放需要調(diào)用的R代碼和相應(yīng)的Submit語句。
4.數(shù)據(jù)結(jié)構(gòu)
本自動編碼系統(tǒng)由許多SAS數(shù)據(jù)集構(gòu)成,在此介紹構(gòu)成該系統(tǒng)的三個關(guān)鍵SAS數(shù)據(jù)集的結(jié)構(gòu)。
(1)MedDRA編碼詞典:MedDRA術(shù)語集包含五級術(shù)語,分別為低位語(low level term,LLT)、首選語(preferred term,PT)、高位語(high level term,HLT)、高位組語(high level group term,HLGT)和系統(tǒng)器官分類(system organ class,SOC)。構(gòu)成MedDRA編碼詞典的所有ASCII文件均可以從MedDRA官網(wǎng)下載。將這些文件導(dǎo)入SAS后利用SQL語句使其合并成為一個具有完整MedDRA層級結(jié)構(gòu)的SAS數(shù)據(jù)集,即MedDRA編碼詞典。當(dāng)MedDRA版本更新時,只需將舊版本的MedDRA編碼詞典刪除,之后重新導(dǎo)入新版本的ASCII文件即可完成本系統(tǒng)MedDRA編碼詞典的更新。該數(shù)據(jù)集結(jié)構(gòu)如表1所示。
表1 MedDRA編碼詞典結(jié)構(gòu)
由于一個PT術(shù)語通過不同的HLT術(shù)語或HLGT術(shù)語可以對應(yīng)多個SOC術(shù)語,而其對應(yīng)的主SOC只有一個,所以需要通過設(shè)置指示變量PRIMARY_SOC_FG標(biāo)識該PT術(shù)語所對應(yīng)的主SOC。該變量取值為”Y”時表示該SOC術(shù)語為當(dāng)前PT術(shù)語的主SOC;取值為“N”時表示該SOC為當(dāng)前PT術(shù)語的次SOC。本系統(tǒng)在進行匹配時自動選擇主SOC作為輸出結(jié)果。
(2)MedDRA人工編碼文件:此數(shù)據(jù)集用于存放未成功進行初次匹配的非標(biāo)準(zhǔn)不良事件描述、對該非標(biāo)準(zhǔn)不良事件描述推薦選用的LLT術(shù)語及相應(yīng)的相似度。該數(shù)據(jù)集可通過SAS的X命令輸出為EXCEL文件以進行人工編碼,人工編碼完成后可直接將編碼結(jié)果重新讀入SAS,從而實現(xiàn)SAS與EXCEL、自動與人工編碼的無縫銜接[8]。該數(shù)據(jù)集結(jié)構(gòu)如表2所示。
表2 MedDRA人工編碼文件結(jié)構(gòu)
(3)MedDRA同義詞典:對于完成了人工匹配的非標(biāo)準(zhǔn)不良事件描述,其與最終選用LLT術(shù)語之間的對應(yīng)關(guān)系將作為一對同義詞存入MedDRA同義詞典。該同義詞典同樣通過X命令輸出為EXCEL表格,在人工填寫GLOBALYN變量后重新讀入SAS并保存在永久邏輯庫中。若下次使用本系統(tǒng)進行編碼時再次遇到相同的非標(biāo)準(zhǔn)不良事件描述,則會直接根據(jù)MedDRA同義詞典進行自動編碼,無需再次進行人工匹配。這意味著本自動編碼系統(tǒng)具有“學(xué)習(xí)”功能。該數(shù)據(jù)集結(jié)構(gòu)如表3所示。
表3 MedDRA同義詞典結(jié)構(gòu)
該數(shù)據(jù)集中的GLOBALYN變量用于界定同義詞的適用范圍,若對于任意研究均適用,則填寫“Y”;若僅對本次研究適用,則填寫“N”。
使用我們開發(fā)的MedDRA自動編碼系統(tǒng)對某疫苗隨機盲法安慰劑對照III期臨床試驗進行了實際應(yīng)用。該臨床試驗共入組3000人,數(shù)據(jù)庫中不良事件描述共5553條。其中,第一針接種后8~28天癥狀/疾病1451條,第二針接種后8~28天癥狀/疾病812條;第一針接種后7天局部癥狀203條,全身癥狀1898條;第二針接種后7天局部癥狀125條,全身癥狀1064條。對于這5553條不良事件描述,若逐條進行人工MedDRA編碼,其工作量和復(fù)雜程度不言而喻。故選用該項目數(shù)據(jù)測試本自動編碼系統(tǒng)的性能,能夠較為真實的反映出本系統(tǒng)相較手工編碼所帶來的效率提升。
調(diào)用宏程序?qū)υ擁椖繑?shù)據(jù)進行自動編碼的代碼如下:
%Trans2MedDRA(StudyID=EV71,SubjectID=SUBSCNUM,AE_Dataset=ae.AE1,AE_Var=FIRDIS,RecommendNum=5);
%Trans2MedDRA(StudyID=EV71,SubjectID=SUBSCNUM,AE_Dataset=ae.AE2,AE_Var=SECDIS,RecommendNum=5);
%Trans2MedDRA(StudyID=EV71,SubjectID=SUBSCNUM,AE_Dataset=ae.QS1,AE_Var=FIRSYS,RecommendNum=5);
%Trans2MedDRA(StudyID=EV71,SubjectID=SUBSCNUM,AE_Dataset=ae.QS2,AE_Var=SECSYS,RecommendNum=5);
%Trans2MedDRA(StudyID=EV71,SubjectID=SUBSCNUM,AE_Dataset=ae.JB1,AE_Var=FIRLOC,RecommendNum=5);
%Trans2MedDRA(StudyID=EV71,SubjectID=SUBSCNUM,AE_Dataset=ae.JB2,AE_Var=SECLOC,RecommendNum=5);
宏程序%Trans2MedDRA的參數(shù)StudyID用于指定研究項目編號,其作用是在調(diào)用MedDRA同義詞典時判斷非通用同義詞的可用性;參數(shù)SubjectID用于指定受試者唯一識別號變量;參數(shù)AE_Dataset用于指定需要進行自動編碼的目標(biāo)數(shù)據(jù)集,即存放不良事件描述變量的數(shù)據(jù)集;參數(shù)AE_Var用于指定目標(biāo)數(shù)據(jù)集中的不良事件描述變量;參數(shù)RecommendNum用于指定在輸出MedDRA人工編碼文件時,對每一條非標(biāo)準(zhǔn)不良事件描述所展示的推薦LLT術(shù)語數(shù)目,本例中指定推薦LLT術(shù)語數(shù)為5。受篇幅所限,本文僅以第一針接種后8~28天癥狀/疾病的部分不良事件編碼流程為例說明本宏程序的用法和性能。
在讀取原始數(shù)據(jù)并完成同義詞替換后,會首先對全部不良事件描述進行初次MedDRA術(shù)語匹配(精確匹配)。對于未能完成初次匹配的不良事件描述,逐條計算其與每條LLT術(shù)語的相似度。計算完成后輸出MedDRA人工編碼文件至EXCEL中,如表4-5所示(實際使用過程中所輸出的EXCEL表格還包含每條推薦LLT術(shù)語對應(yīng)的各級PT-SOC術(shù)語,受篇幅所限此處不予展示)。
表4 MedDRA人工編碼文件(EXCEL)輸出結(jié)果示例1
如表4所示,對“心絞疼”這條非標(biāo)準(zhǔn)癥狀描述,在其對應(yīng)的“推薦選用的LLT”列中可以找到相匹配的LLT術(shù)語“心絞痛”,其相似度為0.67,故在該條LLT術(shù)語右側(cè)的“處理(Y/N/MODIFY)”列中填寫“Y”,代表選用該條LLT術(shù)語。
如表5所示,對于“頭磕破”這條非標(biāo)準(zhǔn)癥狀描述,在其對應(yīng)的“推薦選用的LLT”列中沒有發(fā)現(xiàn)相匹配的LLT術(shù)語,利用MedDRA官方桌面瀏覽器進行查詢并憑借臨床經(jīng)驗可判斷“頭部損傷”為最匹配的LLT術(shù)語,故在“頭磕破”下方的“MODIFY_TERM”右側(cè)填寫“頭部損傷”,代表將LLT術(shù)語“頭部損傷”人工匹配給非標(biāo)準(zhǔn)癥狀描述“頭磕破”。
表5 MedDRA人工編碼文件(EXCEL)輸出結(jié)果示例2
本宏程序在MedDRA人工編碼文件填寫完成后會自動將填寫結(jié)果再次讀入SAS,并將成功完成人工匹配的非標(biāo)準(zhǔn)癥狀描述與標(biāo)準(zhǔn)LLT術(shù)語之間的對應(yīng)關(guān)系保存至MedDRA同義詞典中。之后再將MedDRA同義詞典輸出至EXCEL文件如表6所示。
表6 MedDRA同義詞典(EXCEL)輸出結(jié)果
如表6所示,對于人工編碼的結(jié)果,需要逐條對其作為同義詞的適用范圍進行聲明。若某對同義詞僅適用于當(dāng)前的研究,則在“是否為通用同義詞”列的相應(yīng)位置填寫“N”;若某對同義詞適用于所有的研究,則在“是否為通用同義詞”列的相應(yīng)位置填寫“Y”。至此,本宏程序需要人工操作的部分已全部完成。程序運行完畢后輸出包含輸入數(shù)據(jù)集中全部原始不良事件描述及其對應(yīng)的各級MedDRA術(shù)語和代碼的結(jié)果數(shù)據(jù)集,該數(shù)據(jù)集包括LLT、PT、HLT、HLGT、SOC全部五級MedDRA術(shù)語及其相應(yīng)的代碼。
實際應(yīng)用顯示,在上述疫苗臨床試驗項目的5553條不良事件描述中,共5389條可以完成自動編碼,共164條非標(biāo)準(zhǔn)不良事件描述需要進行人工編碼;在人工編碼過程中,可以直接在推薦的5條LLT術(shù)語中找到匹配術(shù)語的有113條,推薦成功率為68.9%,僅51條需要進一步查詢MedDRA官方桌面瀏覽器。實際應(yīng)用結(jié)果顯示,本系統(tǒng)可以大幅降低編碼人員的工作量,在顯著提升編碼效率的同時也降低了手工編碼可能導(dǎo)致的錯誤風(fēng)險。
目前,MedDRA術(shù)語集已成為世界多個國家藥監(jiān)機構(gòu)推薦或強制使用的不良事件報告標(biāo)準(zhǔn)術(shù)語集[9]。本研究在系統(tǒng)分析MedDRA編碼原理的基礎(chǔ)上,針對使用MedDRA官方提供的中文版桌面瀏覽器進行人工編碼過程中存在的工作量大、復(fù)雜程度高等問題,通過將MedDRA官網(wǎng)下載的包含全部MedDRA術(shù)語層級結(jié)構(gòu)的ASCII文件導(dǎo)入SAS,使用SAS SQL語句將標(biāo)準(zhǔn)的原始不良事件描述與相應(yīng)MedDRA術(shù)語匹配,并引入編輯距離算法計算非標(biāo)準(zhǔn)原始不良事件與MedDRA術(shù)語的相似度。在保留原始不良事件描述的前提下,通過編寫SAS宏程序,實現(xiàn)了原始不良事件描述在MedDRA五個層級術(shù)語(LLT低位語、PT首選語、HLT高位語、HLGT高位語組、SOC系統(tǒng)器官分類)下的自動編碼。
MedDRA桌面瀏覽器內(nèi)置的模糊匹配算法只能按單個漢字拆分后進行簡單匹配,搜索結(jié)果中僅展示包含搜索詞全部漢字的候選MedDRA術(shù)語集合,如輸入“心絞痛”時,會匹配到同時包含“心”、“絞”、“痛”三個字的全部MedDRA術(shù)語;而當(dāng)輸入“心絞疼”時,因MedDRA術(shù)語庫中并無同時包含“心”、“絞”、“疼”這三個字的術(shù)語,故無法搜索到所需結(jié)果。本系統(tǒng)在進行模糊匹配時引入了相似度的概念,而不局限于僅列出包含輸入不良事件描述全部漢字的結(jié)果,從而在原理上對原系統(tǒng)對漢字的識別功能進行了改進。通過將原始不良事件描述與相應(yīng)MedDRA術(shù)語之間的相似程度量化,進而選取相似度較高的MedDRA術(shù)語推薦給編碼人員,便于編碼人員快速鎖定目標(biāo)MedDRA術(shù)語。
本研究通過引入編輯距離算法部分解決了MedDRA桌面瀏覽器內(nèi)置模糊匹配算法精準(zhǔn)度較低的問題,并且隨著同義詞典中同義詞的積累,可不斷提高本自動編碼系統(tǒng)的匹配效率,使得本系統(tǒng)具備了一定的自動學(xué)習(xí)功能。但本系統(tǒng)尚存在一些不足之處,如非標(biāo)準(zhǔn)不良事件描述“變態(tài)反應(yīng)”與LLT術(shù)語“超敏反應(yīng)”在語義上十分接近,但計算出的相似度卻較低,究其原因,是因為本系統(tǒng)所選用的編輯距離算法只能計算兩字符串的字面相似度,無法考慮到語義上的相似情況。當(dāng)使用本系統(tǒng)完成足夠多的MedDRA編碼任務(wù)后,可以利用自然語言處理(natural langunge processing,NLP)技術(shù)對先前積累的數(shù)據(jù)進行深度學(xué)習(xí),從而在計算非標(biāo)準(zhǔn)不良事件描述與MedDRA術(shù)語之間的相似度時,可以同時考慮其在字面和語義上的關(guān)系。詞匯的語義相似度計算正是當(dāng)前人工智能研究的熱點之一,在信息檢索、自然語言處理、推薦系統(tǒng)等領(lǐng)域已有成功應(yīng)用[10],這是今后進一步完善本系統(tǒng)需要研究的方向。