機器閱讀理解(MRC)解決方案,具有基于文檔的智能問答能力。幫助您快速搭建囊括模型離線訓練、離線預測和在線部署的端到端全鏈路流程。旨在從大量文本中,基于給定的問題,快速抽取出答案,降低人工成本,增加信息檢索有效性。本文為您介紹該解決方案的使用流程和操作步驟。
前提條件
在開始執行操作前,請確認您已完成以下準備工作。
已開通PAI(Designer、DSW、EAS)后付費,并創建默認工作空間,詳情請參見開通并創建默認工作空間。
已創建OSS存儲空間(Bucket),用于存儲數據集、訓練獲得的模型文件和配置文件。關于如何創建存儲空間,詳情請參見創建存儲空間。
已創建EAS專屬資源組,用于部署訓練好的模型。關于如何創建專屬資源組,詳情請參見使用專屬資源組。
已為工作空間關聯MaxCompute和DLC計算資源,詳情請參見管理工作空間。
背景信息
阿里云PAI在機器閱讀理解領域,提供了端到端、多樣化的純白盒解決方案,支持基于大段篇章文本的問答功能。您可以根據自己的業務場景自定義構建機器閱讀理解模型,或使用PAI提供的默認模型,進行模型調優和線上部署,針對不同的問題從給定的篇章文本中抽取出相應答案。具體解決方案如下。
基于PAI提供的機器閱讀理解模型和算法,針對您自己的閱讀理解場景,在Designer平臺上進行模型微調,從而構建具體場景的NLP(Natural Language Processing)機器閱讀理解模型。
在Designer平臺,基于PAI提供的默認模型或您自行微調的機器閱讀理解模型,進行批量離線預測。
將模型部署為EAS在線服務,對給定的篇章文本和問題進行自動閱讀理解。
使用流程
將模型部署為EAS在線服務,對給定的篇章文本和問題進行自動閱讀理解。
將訓練數據集和驗證數據集上傳到OSS Bucket中,用于后續的機器閱讀理解模型訓練和預測。
在Designer平臺上,使用機器閱讀理解訓練組件,基于海量大數據語料預訓練獲得的NLP預訓練模型,構建機器閱讀理解模型。
在Designer平臺上,使用機器閱讀理解預測組件,基于海量篇章文本和問句,用微調好的機器閱讀理解模型或PAI提供的默認模型,進行批量離線預測答案抽取。
通過模型在線服務EAS,您可以將訓練好的機器閱讀理解模型部署為在線服務,并在實際的生產環境調用,從而實現在線機器閱讀理解。
步驟一:準備數據
準備訓練數據集和驗證數據集。
本文使用某個中文機器閱讀理解數據集進行模型訓練和預測。訓練數據集和預測數據集具體格式要求如下。
需要準備的數據
格式
包含列
數據集示例文件
訓練數據集
TSV或TXT
ID列
篇章列
問句列
答案列
起始位置列
標題列(非必須)
驗證數據集
TSV或TXT
ID列
篇章列
問句列
答案列(非必須)
起始位置列(非必須)
標題列(非必須)
將數據集上傳至OSS Bucket,具體操作,請參見上傳文件。
說明如果您需要利用自己的數據集對模型進行微調,則需要提前將數據集上傳至OSS Bucket中。
步驟二:構建機器閱讀理解模型
進入PAI-Designer頁面,并創建空白工作流,具體操作請參見操作步驟。
在工作流列表,選擇已創建的空白工作流,單擊進入工作流。
在工作流頁面,分別拖入以下組件,并根據下文的組件參數配置組件。
區域
描述
①
配置實驗的訓練數據集,即配置讀OSS數據-1組件的OSS數據路徑參數為訓練數據集在OSS Bucket中的存儲路徑。
②
配置實驗的驗證數據集,即配置讀OSS數據-2組件的OSS數據路徑參數為驗證數據集在OSS Bucket中的存儲路徑。
③
配置文本摘要模型訓練的參數。機器閱讀理解訓練組件的配置詳情,請參見下文的機器閱讀理解訓練組件的配置。
表 1. 機器閱讀理解訓練組件的配置 頁簽
參數
描述
本案例使用的示例值
字段設置
選擇語種
輸入文件的語種,目前支持以下兩種語言的機器閱讀理解:
zh
en
zh
輸入數據格式
輸入文件中每列的數據格式,多列之間使用半角逗號(,)分隔。
qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1
問句列
問句在輸入文件中對應的列名。
question_text
篇章列
篇章文本在輸入文件中對應的列名。
context_text
回復列
答案在輸入文件中對應的列名。
answer_text
ID列
ID在輸入文件中對應的列名。
qas_id
起始位置列
在輸入文件中,答案在篇章文本中的起始位置對應的列名。
start_position_character
模型存儲路徑
配置OSS Bucket中的目錄,用來存儲機器閱讀理解模型訓練或微調后生成的模型文件。
oss://exampleBucket.oss-cn-shanghai-internal.aliyuncs.com/exampledir
說明需要修改為您使用的OSS路徑。
參數設置
批次大小
訓練過程中的批處理大小。如果使用多機多卡,則表示每個GPU上的批處理大小。
4
說明由于滑動窗口機制的存在,訓練時批次大小不宜設置過大,否則易造成內存溢出。
篇章最大長度
表示系統可處理的篇章最大長度。
384
問句最大長度
表示系統可處理的問句最大長度。
64
滑動窗口大小
對篇章進行滑動窗口切分時,滑動窗口的大小。
128
迭代輪數
訓練總Epoch的數量。
3
學習率
模型構建過程中的學習率。
3.5e-5
保存Checkpoint步數
表示每訓練多少步,對模型進行評價,并保存當前最優模型。
600
pretrainModelNameOrPath
系統提供的預訓練模型名稱路徑選擇,取值如下:
自定義
hfl/macbert-base-zh(默認值)
hfl/macbert-large-zh
bert-base-uncased
bert-large-uncased
hfl/macbert-base-zh
模型額外參數
用戶自定義參數,您可以根據自己的數據對模型參數進行調整。
如果您想采用自定義的預訓練或微調好的模型時,可以在這里聲明。
無需填寫
執行調優
GPU機器類型
計算資源的GPU機型。默認值為gn5-c8g1.2xlarge,表示8核CPU、80 GB內存、P100單卡。
gn5-c8g1.2xlarge
指定Worker的GPU卡數
每個Worker下的GPU卡數量。
1
步驟三:離線批量預測
配置離線預測工作流。
機器閱讀理解預測組件有以下兩種工作方式。
方式一:利用機器閱讀理解訓練組件生成的模型進行預測并抽取答案。
您需要在步驟二的工作流頁面,參照下圖補充拖入組件,并根據下文的組件參數配置組件。
方式二:將PAI默認模型上傳至OSS Bucket,并接入機器閱讀理解預測組件進行預測并抽取答案。
您需要參照步驟二創建新的空白工作流,參照下圖拖入組件,并根據下文的組件參數配置組件。
區域
描述
①
配置實驗的預測數據集(使用步驟一中的驗證數據集作為預測數據集),即配置讀OSS數據-3組件的OSS數據路徑參數為驗證數據集在OSS Bucket中的存儲路徑。
②
配置機器閱讀理解模型預測的參數。機器閱讀理解預測組件的配置詳情,請參見機器閱讀理解預測組件的配置。
表 2. 機器閱讀理解預測組件的配置 頁簽
參數
描述
本案例使用的示例值
字段設置
選擇語種
輸入文件的語種,目前支持以下兩種語言的機器閱讀理解:
zh
en
zh
輸入數據格式
輸入文件中每列的數據格式,多列之間使用半角逗號(,)分隔。
qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1
問句列
問句在輸入文件中對應的列名。
question_text
篇章列
篇章文本在數據文件中對應的列名。
context_text
回復列
答案在輸入文件中對應的列名。
answer_text
Id列
ID在輸入文件中對應的列名。
qas_id
起始位置列
在輸入文件中,答案在篇章文本中的起始位置對應的列名。
start_position_character
預測數據輸出
配置OSS Bucket中的目錄,用來存儲機器閱讀理解模型預測的答案文件。
oss://exampleBucket.oss-cn-shanghai-internal.aliyuncs.com/exampledir1
說明需要修改為您使用的OSS路徑。
使用自定義模型
選擇是否使用自定義模型,取值如下:
否:對應上述方式一。
是:對應上述方式二。
否
模型存儲路徑
當使用自定義模型為是時,需要配置該參數。
配置OSS Bucket中的目錄,用來存儲自定義模型文件。
oss://exampleBucket.oss-cn-shanghai-internal.aliyuncs.com/exampledir2
說明需要修改為您使用的OSS路徑。
參數設置
批次大小
訓練過程中的批處理大小。如果使用多機多卡,則表示每個GPU上的批處理大小。
256
篇章最大長度
表示系統可處理的篇章最大長度。
384
問句最大長度
表示系統可處理的問句最大長度。
64
回復最大長度
表示系統可抽取的答案最大長度。
30
滑動窗口大小
對篇章進行滑動窗口切分時,滑動窗口的大小。
128
pretrainModelNameOrPath
系統提供的預訓練模型名稱或路徑選擇,取值如下:
用戶自定義
hfl/macbert-base-zh
hfl/macbert-large-zh
bert-base-uncased
bert-large-uncased
hfl/macbert-base-zh
模型額外參數
用戶自定義參數,您可以根據自己的數據對模型參數進行調整。
無需填寫
執行調優
GPU機型類型
計算資源的GPU機型。默認值為gn5-c8g1.2xlarge,表示8核CPU、80 GB內存、P100單卡。
gn5-c8g1.2xlarge
指定Worker的GPU卡數
每個Worker下的GPU卡數量。
1
單擊畫布上方的運行。
實驗運行成功后,您可以在機器閱讀理解預測組件預測數據輸出配置的OSS Bucket目錄中,下載系統預測出的答案文件;在機器閱讀理解訓練組件模型存儲路徑配置的OSS Bucket目錄中,下載生成的模型文件和配置文件。
步驟四:部署及調用模型服務
通過模型在線服務PAI EAS,您可以將訓練好的機器閱讀理解模型部署為在線服務,并在實際的生產環境中調用,從而進行推理實踐。
進入模型在線服務(EAS)頁面。
登錄PAI控制臺。
在左側導航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應的工作空間。
在工作空間頁面的左側導航欄選擇 ,進入模型在線服務(EAS)頁面。
部署模型服務。
在模型在線服務(EAS)頁面的推理服務頁簽,單擊部署服務。
在部署服務頁面,配置以下參數(此處僅介紹與本案例相關的核心參數配置,其他參數配置,詳情請參見控制臺上傳部署),并單擊部署。
參數
描述
服務名稱
模型的名稱,建議結合實際業務進行命名,以區分不同的模型服務。
部署方式
選擇模型+processor部署服務。
Processor種類
選擇EasyNLP。
模型文件
本案例中訓練好的模型均存儲在OSS中,因此選擇OSS掛載。
OSS路徑選擇機器閱讀理解組件模型存儲路徑參數配置的路徑下的模型文件夾(其中包含config.json、pytorch_model.bin、pytorch_model.meta.bin、train_config.json、vocab.txt及label_mapping.json)。例如,對于下圖中的模型目錄結構,您需要將OSS路徑選擇到此目錄。
模型類別
按照您自己的實際情況選擇機器閱讀理解(中文)或者機器閱讀理解(英文)。
資源部署信息
按照您購買的資源進行合適選擇,建議優先選擇GPU資源。
調試模型服務。
在模型在線服務(EAS)頁面,單擊目標服務操作列下的在線調試。
在調試頁面的在線調式請求參數區域的Body處填寫如下內容。
[ {"query": "杭州什么時候發布了《杭州市亞運城市行動計劃綱要》?", "context": "某某社杭州9月22日電競賽場館全部竣工并完成賽事功能驗收,“迎亞運”城市基礎設施建設邁入快車道,亞運場館提前開放掀起全民健身熱潮……23日,延期后的杭州亞運會將迎來倒計時一周年,各項籌備工作也結出累累碩果,“天堂之城”再次蓄勢待發。辦好一個會,提升一座城。2020年4月,杭州發布了《杭州市亞運城市行動計劃綱要》,其中包括基礎設施提升、綠水青山守護、數字治理賦能等八項具體行動。隨著亞運的腳步日益臨近,杭州西站、蕭山國際機場三期、合杭高鐵湖杭段、機場軌道快線(19號線)等“兩點兩線”重大項目正式投運。根據杭州市城鄉建設委員會發布的信息,預計到今年9月底全市快速路總里程將達到480公里。住在這里的人們正切身體會到悄然發生的變化-交通方便了,道路變美了,城市基礎設施也愈發完善。", "id": "01"}, {"query": "今年9月底全市快速路總里程將達到多少?", "context": "某某社杭州9月22日電競賽場館全部竣工并完成賽事功能驗收,“迎亞運”城市基礎設施建設邁入快車道,亞運場館提前開放掀起全民健身熱潮……23日,延期后的杭州亞運會將迎來>倒計時一周年,各項籌備工作也結出累累碩果,“天堂之城”再次蓄勢待發。辦好一個會,提升一座城。2020年4月,杭州發布了《杭州市亞運城市行動計劃綱要》,其中包括基礎設施提升、綠水青山守護、數字治理賦能等八項具體行動。隨著亞運的腳步日益臨近,杭州西站、蕭山國際機場三期、合杭高鐵湖杭段、機場軌道快線(19號線)等“兩點兩線”重大項目正式投運。根據杭州市城鄉建設委員會發布的信息,預計到今年9月底全市快速路總里程將達到480公里。住在這里的人們正切身體會到悄然發生的變化-交通方便了,道路變美了,城市基礎設施也愈發完善。", "id": "02"} ]
單擊發送請求,即可在調式信息區域查看預測結果,如下圖所示。
預測結果中:best_answer即為模型給出的答案文本。為方便對照,輸入的id、query、context信息也會一并返回。如果您在輸入中指定了參考答案,該參考答案文本也會在gold_answer中一并返回。返回結果示例如下。
[ {"unique_id": "01", "best_answer": "2020年4月", "gold_answer": "", "query": "杭州什么時候發布了《杭州市亞運城市行動計劃綱要》?", "context": "某某社杭州9月22日電競賽場館全部竣工并完成賽事功能驗收,“迎亞運”城市基礎設施建設邁入快車道,亞運場館提前開放掀起全民健身熱潮……23日,延期后的杭州亞運會將迎來倒計時一周年,各項籌備工作也結出累累碩果,“天堂之城”再次蓄勢待發。辦好一個會,提升一座城。2020年4月,杭州發布了《杭州市亞運城市行動計劃綱要》,其中包括基礎設施提升、綠水青山守護、數字治理賦能等八項具體行動。隨著亞運的腳步日益臨近,杭州西站、蕭山國際機場三期、合杭高鐵湖杭段、機場軌道快線(19號線)等“兩點兩線”重大項目正式投運。根據杭州市城鄉建設委員會發布的信息,預計到今年9月底全市快速路總里程將達到480公里。住在這里的人們正切身體會到悄然發生的變化-交通方便了,道路變美了,城市基礎設施也愈發完善。"}, {"unique_id": "02", "best_answer": "480公里", "gold_answer": "", "query": "今年9月底全市快速路總里程將達到多少?", "context": "某某社杭州9月22日電競賽場館全部竣工并完成賽事功能驗收,“迎亞運”城市基礎設施建設邁入快車道,亞運場館提前開放掀起全民健身熱潮……23日,延期后的杭州亞運會將迎來>倒計時一周年,各項籌備工作也結出累累碩果,“天堂之城”再次蓄勢待發。辦好一個會,提升一座城。2020年4月,杭州發布了《杭州市亞運城市行動計劃綱要》,其中包括基礎設施提升、綠水青山守護、數字治理賦能等八項具體行動。隨著亞運的腳步日益臨近,杭州西站、蕭山國際機場三期、合杭高鐵湖杭段、機場軌道快線(19號線)等“兩點兩線”重大項目正式投運。根據杭州市城鄉建設委員會發布>的信息,預計到今年9月底全市快速路總里程將達到480公里。住在這里的人們正切身體會到悄然發生的變化-交通方便了,道路變美了,城市基礎設施也愈發完善。"} ]
查看模型服務的公網地址和訪問Token。
在模型在線服務(EAS)頁面,單擊目標服務服務方式列下的調用信息。
在調用信息對話框的公網地址調用頁簽,查看公網調用的訪問地址和Token。
使用腳本進行批量調用。
創建調用模型服務的Python腳本eas_test_mrc.py。
#!/usr/bin/env python #encoding=utf-8 from eas_prediction import PredictClient from eas_prediction import StringRequest if __name__ == '__main__': #下面的client = PredictClient()入參需要替換為實際的訪問地址。 client = PredictClient('http://xxxxxxxxxxxxxxxx.cn-hangzhou.pai-eas.aliyuncs.com', 'test_mrc_new') #下面的Token需要替換為實際值。 client.set_token('ZDY5Mzg1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxjlmZTEyYmY0Yg==') client.init() #輸入請求需要根據模型進行構造,此處僅以字符串作為輸入輸出的程序為例。 request = StringRequest('[{"query": "杭州什么時候發布了《杭州市亞運城市行動計劃綱要》?", "context": "某某社杭州9月22日電競賽場館全部竣工并完成賽事功能驗收,“迎亞運”城市基礎設施建設邁入快車道,亞運場館提前開放掀起全民健身熱潮……23日,延期后的杭州亞運會將迎來倒計時一周年,各項籌備工作也結出累累碩果,“天堂之城”再次蓄勢待發。辦好一個會,提升一座城。2020年4月,杭州發布了《杭州市亞運城市行動計劃綱要》,其中包括基礎設施提升、綠水青山守護、數字治理賦能等八項具體行動。隨著亞運的腳步日益臨近,杭州西站、蕭山國際機場三期、合杭高鐵湖杭段、機場軌道快線(19號線)等“兩點兩線”重大項目正式投運。根據杭州市城鄉建設委員會發布的信息,預計到今年9月底全市快速路總里程將達到480公里。住在這里的人們正切身體會到悄然發生的變化-交通方便了,道路變美了,城市基礎設施也愈發完善。", "id": "01"}, {"query": "今年9月底全市快速路總里程將達到多少?", "context": "某某社杭州9月22日電競賽場館全部竣工并完成賽事功能驗收,“迎亞運”城市基礎設施建設邁入快車道,亞運場館提前開放掀起全民健身熱潮……23日,延期后的杭州亞運會將迎來>倒計時一周年,各項籌備工作也結出累累碩果,“天堂之城”再次蓄勢待發。辦好一個會,提升一座城。2020年4月,杭州發布了《杭州市亞運城市行動計劃綱要》,其中包括基礎設施提升、綠水青山守護、數字治理賦能等八項具體行動。隨著亞運的腳步日益臨近,杭州西站、蕭山國際機場三期、合杭高鐵湖杭段、機場軌道快線(19號線)等“兩點兩線”重大項目正式投運。根據杭州市城鄉建設委員會發布>的信息,預計到今年9月底全市快速路總里程將達到480公里。住在這里的人們正切身體會到悄然發生的變化-交通方便了,道路變美了,城市基礎設施也愈發完善。", "id": "02"}]') for x in range(0, 1): resp = client.predict(request) print(str(resp.response_data, 'utf8')) print("test ending")
將eas_test_mrc.py的Python腳本上傳至您的任意環境,并在腳本上傳后的當前目錄執行如下調用命令。
python <eas_test_mrc.py>
其中<eas_test_mrc.py>需要替換為實際的Python腳本名稱。
監控服務指標。調用模型服務后,您可以查看模型調用的相關指標水位,包括QPS、RT、CPU、GPU及Memory。
在PAI-EAS 模型在線服務頁面,單擊已調用服務服務監控列下的圖標。
在服務監控頁簽,即可查看模型調用的指標水位。您自己的模型指標水位以實際為準。