機器學習自訂技能
使用機器學習自訂技能的運作方式與將任何其他自訂技能新增至搜尋索引相同。
在這裡,您將了解如何使用 AmlSkill
自訂技能,並探索如何有效地使用它的考慮。
自訂 Azure Machine Learning 技能架構
當您使用 Azure Machine Learning (AML) 自訂技能擴充搜尋索引時,擴充會在文件層級進行。 文件索引子所使用的技能集必須包含 AmlSkill
。 此技能的架構為:
{
"@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
"name": "AML name",
"description": "AML description",
"context": "/document",
"uri": "https://[Your AML endpoint]",
"key": "Your AML endpoint key",
"resourceId": null,
"region": null,
"timeout": "PT30S",
"degreeOfParallelism": 1,
"inputs": [
{
"name": "field name in the AML model",
"source": "field from the document in the index"
},
{
"name": "field name in the AML model",
"source": "field from the document in the index"
},
],
"outputs": [
{
"name": "result field from the AML model",
"targetName": "result field in the document"
}
]
}
重要
URI 必須使用 HTTPS 端點。 這可以是 Microsoft 所提供的受控自訂 URL 位址,或您自己的功能變數名稱和憑證。
請注意,自訂技能不包含 batchSize
的設定,因為 AML 模型會一次處理單一文件。 控制技能效能的其餘設定為 timeout
和 degreeOfParallelism
。 上述架構已將 30 秒設定為逾時值。 平行處理原則的程度應該從一開始。 視您的基礎結構而定,您可以增加此數目。
管理 AML 技能效率的最佳方式是適當地相應增加 Kubernetes 推斷叢集來管理工作負載。
文件的索引需要欄位來儲存 AML 模型的結果。 接著,您將新增輸出欄位對應,以將自訂技能集的結果儲存至索引中文件上的欄位。
執行此輸出欄位對應的 JSON 為:
"outputFieldMappings": [
{
"sourceFieldName": "/result field in the document",
"targetFieldName": "result field from the AML model"
}
]
您可以使用 Python SDK、REST API 或 Azure CLI 等開發人員工具來建立 Azure Machine Learning 模型。 另一個選項是利用 Azure AI Machine Learning 工作室,這是一個圖形化使用者介面,可讓您建立、定型和部署模型,而不需撰寫任何程式碼。
建立模型後,您可以改變評分程式碼呼叫模型的方式,以允許自訂搜尋技能使用模型。
最後一個步驟是建立 Kubernetes 叢集來裝載模型的端點。
建立 AML 工作區
當您建立 AML 工作區時,Azure 也會建立儲存體帳戶、金鑰存放區和 Application Insights 資源。 [AML 工作區概觀] 窗格提供您啟動 Azure AI Machine Learning Studio 的連結。
在 Azure Machine Learning 工作室 中建立和定型模型
Azure AI Machine Learning 工作室可讓您使用設計工具透過拖放來建立管線以便建立和定型模型。 使用預先建置的範本建立模型有一個更簡單的方式。
無論您選擇如何建立模型,它們都需要在 Azure AI Machine Learning 工作室中註冊,以便您將模型部署至 Web 服務。
改變模型的運作方式,以允許 AML 自訂技能呼叫模型
您定型的模型通常會使用許多資料範例。 資料集會有許多資料列,並被分割而用於定型和測試模型。 處理此資料並將它傳遞至模型的程式碼必須變更,才能處理單一資料列。
來自模型的 JSON 回應也應該只包含輸出預測。
例如,如果您的資料是 JSON 物件的陣列:
[
{
"attribute-1": null,
"attribute-2": null
},
{
"attribute-1": null,
"attribute-2": null
},
{
"attribute-1": null,
"attribute-2": null
}
]
Python 評分程式碼一次必須處理一列資料:
data = json.loads(data)
for row in data:
for key, val in row.items():
input_entry[key].append(decode_nan(val))
若要將輸入資料集變更為單一資料列:
{
"attribute-1": null,
"attribute-2": null
}
Python 程式碼必須變更為:
data = json.loads(data)
for key, val in data.items():
input_entry[key].append(decode_nan(val))
針對評分程式碼的回應,預設程式碼會傳回整個 JSON 文件:
return json.dumps({"result": result.data_frame.values.tolist()})
自訂技能必須能夠對應來自模型的單一回應。 因此,程式碼應該傳回只有最後一個屬性的 JSON。
output = result.data_frame.values.tolist()
# return the last column of the the first row of the dataframe
return {
"predicted_outcome": output[0][-1]
}
為您的模型建立要使用的端點
模型會部署到端點。 Azure AI Machine Learning 工作室支援將模型部署到即時端點、批次端點或 Web 服務。 目前,Azure AI 搜尋服務中的自訂 AmlSkill
技能僅支援 Web 服務端點。
另一項限制是端點必須是 Azure Kubernetes Service (AKS) 叢集。 不支援容器實例。
如果您有建立和管理 AKS 叢集的經驗,您可以在 Azure 入口網站中手動建立叢集,並在建立端點時加以參考。 不過,更簡單的選項是讓 Azure AI Machine Learning Studio 為您建立和管理叢集。
如果您瀏覽至工作室的計算區段,您可以建立推斷叢集。 接著,AML 工作室會引導您選擇叢集的大小,甚至啟用 HTTPS 並為您建立功能網域名稱。 其形式為 location.cloudapp.azure.com:443
。
將 AML 自訂技能連線至端點
上述全部就緒後,您需要更新 Azure AI 搜尋服務。 執行此作業的步驟與本課程模組中顯示的範例類似,因此我們不會在此處詳細說明具體細節,但會列出要遵循的步驟。
- 首先,若要豐富搜尋索引,您要將新的欄位新增至索引,以包含模型的輸出。
- 然後,您將更新索引技能集,並新增
#Microsoft.Skills.Custom.AmlSkill
自訂技能。 - 接下來,您將變更索引子,將自訂技能的輸出對應至您在索引上建立的欄位。
- 最後一個步驟是重新執行索引子,以使用 AML 模型豐富索引。