動機(jī)和背景
為什么構(gòu)建可解釋的人工智能模型很重要?
人工智能的未來在于使人類和機(jī)器能夠共同解決復(fù)雜的問題。各組織正試圖通過將AI/ML技術(shù)與人力審查相結(jié)合來提高流程效率和透明度。
近年來,隨著人工智能的發(fā)展,出現(xiàn)了專門針對人工智能的法規(guī),例如,在制藥業(yè)和金融業(yè)的模型風(fēng)險管理中出現(xiàn)了良好的機(jī)器學(xué)習(xí)做法,其他涉及數(shù)據(jù)隱私的廣譜法規(guī),歐盟的《電子商務(wù)規(guī)則》和加利福尼亞的《計算機(jī)風(fēng)險管理法》。同樣,內(nèi)部合規(guī)團(tuán)隊在根據(jù)模型預(yù)測驗證決策時也可能希望解釋模型的行為。例如,承銷商想知道為什么一個特定的貸款申請被一個ML模型標(biāo)記為可疑。
概述
什么是可解釋性?
在ML上下文中,可解釋性是指試圖追溯哪些因素有助于使用ML模型進(jìn)行某種預(yù)測。作為?展示 在下圖中,較簡單的模型較容易解釋,但與能夠理解數(shù)據(jù)中的非線性關(guān)系并往往具有高精度的深入學(xué)習(xí)和轉(zhuǎn)換器模型等復(fù)雜模型相比,其準(zhǔn)確性往往較低。
定義松散,有兩種解釋:
· 全球解釋: 是在整體模型層面上解釋哪些功能對產(chǎn)出貢獻(xiàn)最大?例如,在一個財務(wù)環(huán)境中,用例是建立一個ML模型來識別最有可能違約的客戶,做出這一決定的一些最有影響力的功能是客戶的信用評分,總數(shù)為否。信用卡、循環(huán)余額等。
· 本地解釋: 這可以使您放大特定的數(shù)據(jù)點,并觀察模型在該附近的行為。例如,對于電影評論用例的情感分類,評論中的某些詞對結(jié)果的影響可能高于其他詞。""我已經(jīng) 決不 看了一些東西 很糟糕。 ”
什么是變壓器模型?
變壓器模型是一個神經(jīng)網(wǎng)絡(luò),它追蹤連續(xù)輸入的關(guān)系,如句子中的單詞,以學(xué)習(xí)上下文和隨后的意義。變壓器模型使用一套不斷演變的數(shù)學(xué)方法,即被稱為注意力或自我注意的方法,在一個系列中找到即使是距離數(shù)據(jù)元素之間的微小關(guān)系。指?谷歌的出版物 獲取更多信息。
綜合梯度
集成梯度是一種?可解釋的人工智能 本文介紹的技術(shù)?深層網(wǎng)絡(luò)的公理歸屬 .本文試圖為每個輸入特性分配一個屬性值。這說明了輸入對最終預(yù)測的貢獻(xiàn)。
因其廣泛適用于任何可微模型(例如:可微模型),因而是一種流行的可解釋性方法。,文本,圖像,結(jié)構(gòu)化數(shù)據(jù)),容易實現(xiàn),相對于其他方法的計算效率,理論上的合理性。集成梯度代表從給定基線到輸入的路徑上輸入的梯度的積分。積分可以用黎曼和或高斯理論正交規(guī)則近似.其形式如下:
沿輸入X的I-TH維度的綜合梯度。阿爾法是比例系數(shù)。這些方程是從 ?原件 .
這種方法的基石是兩個基本公理,即敏感性和實現(xiàn)不變性。更多信息可在原始文件中找到。
用例
現(xiàn)在讓我們來看看如何使用綜合梯度法?頂蓋 包裹。我們將對答案進(jìn)行微調(diào)?伯特 (由變壓器發(fā)出的雙向編碼器表示法)?小隊 使用變壓器庫的數(shù)據(jù)集?擁抱臉 ,回顧?筆記簿 為了詳細(xì)的演練。
臺階
· 在這種情況下,裝上標(biāo)志和經(jīng)過訓(xùn)練的伯特模型,bert-base-uncased
· 接下來是計算屬性BertEmbeddings 一層。為此,定義基線/引用并對基線和輸入進(jìn)行數(shù)字化。
Python
1
def construct_whole_bert_embeddings(input_ids, ref_input_ids, \
2
token_type_ids=None, ref_token_type_ids=None, \
3
position_ids=None, ref_position_ids=None):
Python
1
input_embeddings = model.bert.embeddings(input_ids, token_type_ids=token_type_ids, position_ids=position_ids)
Python
1
ref_input_embeddings = model.bert.embeddings(ref_input_ids, token_type_ids=ref_token_type_ids, position_ids=ref_position_ids)
Python
1
return input_embeddings, ref_input_embeddings
· 現(xiàn)在,讓我們把問答對定義為對伯特模型的輸入
問題="什么對我們很重要?"
對我們來說,重要的是接納、授權(quán)和支持各種人類。"
· 生成相應(yīng)的答案對基線/引用
· 下一步是做預(yù)測,一個選擇是使用LayerIntegratedGradients 以及計算屬性BertEmbedding .LayerIntegratedGradients 表示沿直線路徑的層輸入/輸出的梯度積分,從給定基線的層激活到輸入的層激活。
Python
1
start_scores, end_scores = predict(input_ids, \
2
token_type_ids=token_type_ids, \
3
position_ids=position_ids, \
4
attention_mask=attention_mask)
Python
1
print(‘Question: ‘, question)
2
print(‘Predicted Answer: ‘, ‘ ‘.join(all_tokens[torch.argmax(start_scores) : torch.argmax(end_scores)+1]))
Python
1
lig = LayerIntegratedGradients(squad_pos_forward_func, model.bert.embeddings)
· 產(chǎn)出:
問題:什么對我們很重要?
預(yù)測答案:包括,em##力量和支持各種人類
· 使用幫助函數(shù)在輸入序列中對每個單詞標(biāo)記的屬性進(jìn)行可視化
Python
1
# storing couple samples in an array for visualization purposes
Python
1
start_position_vis =
2
viz.VisualizationDataRecord(
3
attributions_start_sum,
4
torch.max(torch.softmax(start_scores[0], dim=0)),
5
torch.argmax(start_scores),
6
torch.argmax(start_scores),
7
str(ground_truth_start_ind),
8
attributions_start_sum.sum(),
9
all_tokens,
10
delta_start)
Python
1
print(‘\033[1m’, ‘Visualizations For Start Position’, ‘\033[0m’)
2
viz.visualize_text([start_position_vis])
Python
1
print(‘\033[1m’, ‘Visualizations For End Position’, ‘\033[0m’)
2
viz.visualize_text([end_position_vis])
從上面的結(jié)果可以看出,對于預(yù)測起點位置,我們的模型更多地側(cè)重于問題方面。更具體地說,在"什么"和"重要"上。它還稍微側(cè)重于文本方面"給我們"的標(biāo)記序列。
與此相反,為了預(yù)測端點位置,我們的模型更側(cè)重于文本方面,并且在最后端點標(biāo)記"種類"上有相對較高的歸屬。
結(jié)論
這個文章描述了如何使用集成梯度等可解釋的人工智能技術(shù),通過突出正面和負(fù)面的詞匯對模型結(jié)果的影響,使深入學(xué)習(xí)的NLP模型可以被解釋。