人工智能的未來在于使人類和機器能夠共同解決復雜問題。組織正在嘗試通過將人工智能/機器學習技術(shù)與人工審核相結(jié)合來提高流程效率和透明度。
近年來,隨著人工智能的發(fā)展,專門針對人工智能的法規(guī)也應運而生,例如制藥行業(yè)的良好機器學習實踐 (GMLP) 和金融行業(yè)的模型風險管理 (MRM),以及其他涉及數(shù)據(jù)隱私的廣泛法規(guī),如歐盟的 GDPR 和加州的 CCPA。同樣,內(nèi)部合規(guī)團隊在驗證基于模型預測的決策時可能也希望解釋模型的行為。例如,承保人希望了解為什么特定的貸款申請被 ML 模型標記為可疑。
概述
什么是可解釋性?
在機器學習環(huán)境中,可解釋性是指嘗試追溯哪些因素對機器學習模型做出特定預測有影響。如下圖所示,較簡單的模型更易于解釋,但與深度學習和基于 Transformer 的模型等復雜模型相比,其準確率通常較低,因為后者可以理解數(shù)據(jù)中的非線性關(guān)系,并且準確率通常較高。
寬泛地來說,有兩種類型的解釋:
· 全局解釋: 在整體模型層面進行解釋,以了解哪些特征對輸出貢獻最大?例如,在金融環(huán)境中,用例是構(gòu)建 ML 模型來識別最有可能違約的客戶,而做出該決定的一些最有影響力的特征是客戶的信用評分、信用卡總數(shù)、循環(huán)余額等。
· 局部解釋:這可以讓你放大特定數(shù)據(jù)點并觀察模型在該鄰域中的行為。例如,對于電影評論用例的情緒分類,評論中的某些詞可能對結(jié)果產(chǎn)生比其他詞更大的影響?!拔覐膩頉]有看過這么糟糕的電影。 ”
什么是變壓器模型?
Transformer 模型是一種神經(jīng)網(wǎng)絡,它跟蹤順序輸入中的關(guān)系(例如句子中的單詞),以學習上下文和后續(xù)含義。Transformer 模型使用一組不斷發(fā)展的數(shù)學方法(稱為注意力或自我注意力)來查找一系列等距數(shù)據(jù)元素之間的細微關(guān)系。有關(guān)更多信息,請參閱Google 的出版物。
積分梯度
積分梯度 (IG) 是論文《深度網(wǎng)絡的公理歸因》中介紹的一種可解釋 AI技術(shù)。本文嘗試為每個輸入特征分配一個歸因值。這說明輸入對最終預測的貢獻有多大。
IG 是一種局部方法,由于其廣泛適用于任何可微分模型(例如文本、圖像、結(jié)構(gòu)化數(shù)據(jù))、易于實施、相對于替代方法的計算效率高以及理論依據(jù),它是一種流行的可解釋性技術(shù)。積分梯度表示沿從給定基線到輸入的路徑對輸入的梯度的積分。積分可以用黎曼和或高斯勒讓德求積規(guī)則來近似。形式上,它可以描述如下:
沿輸入 X 的第 i 維積分梯度。Alpha 是縮放系數(shù)。這些方程式是從 原始論文中復制而來的。
該方法的基石是兩個基本公理,即敏感性和實現(xiàn)不變性。更多信息可以在原始論文中找到。
用例
現(xiàn)在讓我們實際看看如何使用Captum包應用積分梯度法。我們將使用HuggingFace的 transformers 庫在SQUAD數(shù)據(jù)集上微調(diào)問答B(yǎng)ERT(來自 Transformers 的雙向編碼器表示)模型,請查看筆記本以了解詳細的演練。
腳步
· 加載標記器和預先訓練的 BERT 模型,在本例中,bert-base-uncased
· 接下來是計算與BertEmbeddings層相關(guān)的屬性。為此,定義基線/參考并將基線和輸入數(shù)字化。
ython
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)在,讓我們將問答對定義為 BERT 模型的輸入
問題 =“什么對我們來說是重要的?”
text = “對我們來說,包容、賦權(quán)和支持各種各樣的人非常重要?!?
· 為問答對生成相應的基線/參考
· 下一步是進行預測,一種選擇是使用LayerIntegratedGradients和計算關(guān)于的屬性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)
· Output:
Question: What is important to us?
Predicted Answer: to include , em ##power and support humans of all kinds
· 使用輔助函數(shù)可視化輸入序列中每個單詞標記的屬性
Python
# storing couple samples in an array for visualization purposes
Python
start_position_vis =
viz.VisualizationDataRecord(
attributions_start_sum,
torch.max(torch.softmax(start_scores[0], dim=0)),
torch.argmax(start_scores),
torch.argmax(start_scores),
str(ground_truth_start_ind),
attributions_start_sum.sum(),
all_tokens,
delta_start)
Python
print(‘\033[1m’, ‘Visualizations For Start Position’, ‘\033[0m’)
viz.visualize_text([start_position_vis])
Python
print(‘\033[1m’, ‘Visualizations For End Position’, ‘\033[0m’)
viz.visualize_text([end_position_vis])
從上面的結(jié)果可以看出,對于預測起始位置,我們的模型更側(cè)重于問題方面。更具體地說,側(cè)重于標記“什么”和“重要”。在文本方面,它也稍微側(cè)重于標記序列“對我們來說”。
與此相反,對于預測結(jié)束位置,我們的模型更加側(cè)重于文本方面,并且對最后的結(jié)束位置標記“種類”具有相對較高的歸因。
結(jié)論
本文介紹了如何使用可解釋的人工智能技術(shù)(如積分梯度)通過強調(diào)正面和負面的詞語對模型結(jié)果的影響,使深度學習 NLP 模型變得可解釋。