

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 記錄與 AWS Lake Formation FindMatches 相符
<a name="machine-learning"></a>

**注意**  
 AWS Glue 主控台中的下列區域目前無法使用記錄比對：中東 （阿拉伯聯合大公國）、歐洲 （西班牙）、亞太區域 （雅加達） 和歐洲 （蘇黎世）。

AWS Lake Formation 提供機器學習功能來建立自訂轉換以清理您的資料。目前有一個名為 FindMatches 的可用轉換。FindMatches 轉換可讓您識別資料集中重複或相符的記錄，即使記錄沒有通用的唯一識別符，也沒有欄位完全相符。不需要編寫任何程式碼或了解機器學習的運作方式。FindMatches 在許多不同的問題中非常有用，例如：
+ **Matching customers** (比對客戶)：跨不同客戶資料庫連結客戶記錄，即使許多客戶欄位在資料庫之間不完全相符 (例如：名稱拼字不同、地址差異、資料遺失或不正確等)。
+ **Matching products** (比對產品)：比對目錄中的產品與其他產品來源，例如產品目錄與競爭對手的目錄 (其中的項目結構不同)。
+ **Improving fraud detection** (改善詐騙偵測)：識別重複的客戶帳戶，新建立的帳戶與先前已知的詐騙使用者相符 (或可能相符) 時進行判斷。
+ **Other matching problems** (其他比對問題)：比對地址、電影、零件清單等。一般而言，如果人類可以查看您的資料庫列並判斷它們是否相符，則 FindMatches 轉換很有可能對您有幫助。

 當您建立任務時，您可以建立這些轉換。您建立的轉換會以來源資料存放區結構描述與您標記的來源資料集中的範例資料為基礎 (我們將這個程序稱為「教導」轉換)。來源資料集中必須存在您標記的記錄。在這個程序中，我們會產生一個檔案，您可以標記然後重新上傳，轉換會從中學習。在您教導轉換後，您便可以從您的 Spark 式 AWS Glue 任務 (PySpark 或 Scala Spark) 呼叫它，並搭配相容的來源資料存放區，在其他指令碼中使用它。

 在建立轉換後，它便會存放在 AWS Glue 中。在 AWS Glue 主控台上，您可以管理您建立的轉換。在**資料整合和 ETL** 的導覽窗格中，選擇**資料分類工具 > 記錄比對**，您可以進行編輯並繼續教導您的機器學習轉換。如需在主控台上管理轉換的詳細資訊，請參閱[使用機器學習轉換](console-machine-learning-transforms.md)。

**注意**  
AWS Glue 2.0 版 FindMatches 任務使用 Amazon S3 儲存貯體 `aws-glue-temp-<{{accountID}}>-<{{region}}>`，在轉換處理資料期間存放暫時檔案。您可以在執行完成後，手動或設定 Amazon S3 生命週期規則來刪除此資料。

## 機器學習轉換的類型
<a name="machine-learning-transforms"></a>

您可以建立機器學習轉換，來清理您的資料。您可以從 ETL 指令碼呼叫這些轉換。您的資料會在資料結構中從轉換傳遞至轉換，而此資料結構稱為 *DynamicFrame*，是 Apache Spark SQL `DataFrame` 的延伸。`DynamicFrame` 包含您的資料，而您可以參考其結構描述以處理資料。

下列類型的機器學習轉換可供您使用：

*尋找符合項目*  
在來源資料中尋找重複記錄。您可以透過標記範例資料集，指出哪些資料列相符，來教導此機器學習轉換。您使用範例標記資料教導它的次數越多，機器學習轉換便會學習應將哪些資料列視為相符項目。取決於您設定轉換的方式，輸出會是以下其中一項：  
+ 輸入資料表的複本，加上 `match_id` 資料行，其中會填入指出相符記錄集的值。`match_id` 資料行是任意識別符。具有相同 `match_id` 的任何記錄已識別為彼此相符。具有不同 `match_id` 的記錄不相符。
+ 輸入資料表的複本，其中會移除重複的資料列。若找到多個重複項，便會保留主索引鍵最小的記錄。

*尋找增量改進相符項目*  
尋找相符項目轉換也可以設定為在現有和增量改進框架中尋找相符項目，並以輸出方式傳回包含每個相符群組唯一 ID 的資料行。  
如需詳細資訊，請參閱：[尋找增量改進相符項目](machine-learning-incremental-matches.md)

### 使用 FindMatches 轉換
<a name="machine-learning-find-matches"></a>

您可以使用 `FindMatches` 轉換來在來源資料中尋找重複記錄。其中會產生或提供標記檔案，來協助教導轉換。

**注意**  
目前，下列區域不支援使用自訂加密金鑰的 `FindMatches` 轉換：  
亞太區域 (大阪) – `ap-northeast-3`

 若要開始使用 FindMatches 轉換，您可依照以下步驟操作。如需更進階且詳細的範例，請參閱**AWS 大數據部落格**：[使用 AWS Glue 和 AWS Lake Formation FindMatches ML 協調資料，以建置客戶 360 檢視。 ](https://aws.amazon.com/blogs/big-data/harmonize-data-using-aws-glue-and-aws-lake-formation-findmatches-ml-to-build-a-customer-360-view/)

#### 開始使用尋找相符項目轉換
<a name="machine-learning-find-mathes-workflow"></a>

遵循這些步驟來開始使用 `FindMatches` 轉換：

1. 在 中 AWS Glue Data Catalog 為要清理的來源資料建立資料表。如需如何建立爬蟲程式的資訊，請參閱[在 AWS Glue 主控台上使用爬蟲程式](https://docs.aws.amazon.com/glue/latest/dg/console-crawlers.html)。

   若您的來源資料是文字類型的檔案 (例如逗點分隔值 (CSV) 檔案)，請考慮以下事項：
   + 在不同的資料夾中保留您的輸入記錄 CSV 檔案及標記檔案。否則，AWS Glue 爬蟲程式可能會將他們視為相同資料表的多個部分，並以不正確的方式在 Data Catalog 中建立資料表。
   + 除非您的 CSV 檔案只包含 ASCII 字元，否則請確保針對 CSV 檔案使用不包含 BOM (位元組順序標記) 的 UTF-8 編碼。Microsoft Excel 通常會在 UTF-8 CSV 檔案的開頭新增 BOM。若要移除它，請在文字編輯器中開啟 CSV 檔案，然後將檔案重新儲存為 **UTF-8 without BOM (不包含 BOM 的 UTF-8)**。

1. 在 AWS Glue 主控台上建立任務，然後選擇 **Find matches (尋找相符項目)** 轉換類型。
**重要**  
您為任務選擇的資料來源資料表不能包含超過 100 個資料行。

1. 告訴 AWS Glue 產生標籤檔案，方法是選擇 **Generate labeling file (產生標籤檔案)**。AWS Glue 會先對每個 `labeling_set_id` 的類似記錄進行分組，以便您可以檢閱這些群組。您在 `label` 資料行中標示相符項目。
   + 若您已有標記檔案 (即指出相符資料列的記錄範例)，請將檔案上傳至 Amazon Simple Storage Service (Amazon S3)。如需標記檔案格式的資訊，請參閱[標記檔案格式](#machine-learning-labeling-file)。繼續進行步驟 4。

1. 下載標記檔案並標記檔案，如[標記](#machine-learning-labeling)一節所述。

1. 上傳修正後的標記檔案。AWS Glue 會執行任務來教導轉換如何尋找相符項目。

   在 **Machine learning transforms (機器學習轉換)** 清單頁面上，選擇 **History (歷史記錄)** 標籤。此頁面會指出 AWS Glue 何時執行下列任務：
   + **Import labels (匯入標籤)**
   + **Export labels (匯出標籤)**
   + **Generate labels (產生標籤)**
   + **Estimate quality (估計品質)**

1. 若要建立更佳的轉換，您可以反覆地下載、標記和上傳標記檔案。在初始執行時，會有許多記錄比對錯誤。但是 AWS Glue 會隨著您透過驗證標記檔案繼續教導它而逐步學習。

1. 評估尋找相符項目的效能和結果，來評估和調校您的轉換。如需詳細資訊，請參閱[在 AWS Glue 中調校機器學習轉換](add-job-machine-learning-transform-tuning.md)。

#### 標記
<a name="machine-learning-labeling"></a>

當 `FindMatches` 產生標記檔案時，會從您的來源資料表選取記錄。根據先前的培訓結果，`FindMatches` 會識別價值最高的記錄來進行學習。

*標記*的動作是編輯標記檔案 (我們建議使用如 Microsoft Excel 的試算表)，並將識別符或標籤新增至識別相符和不相符記錄的 `label` 資料行。在您資料檔案中擁有清楚且一致的相符項目定義相當重要。`FindMatches` 會從您指定為相符 (或不相符) 的記錄學習，並使用您的決定來學習如何尋找重複的記錄。

`FindMatches` 產生標記檔案時，大約會產生 100 筆記錄。這些 100 筆記錄通常會分為 10 個*標記組*，其中每個標記組會以 `FindMatches` 產生的唯一 `labeling_set_id` 辨識。每個標記組應視為是獨立於其他標記組的個別標記任務。您的任務為使用每個標記組識別相符與不相符的記錄。

##### 在試算表中編輯標記檔案的秘訣
<a name="machine-learning-labeling-tips"></a>

在試算表應用程式中編輯標記檔案時，請考慮以下事項：
+ 檔案可能會在尚未完全展開資料行欄位的情況下開啟。您可能需要展開 `labeling_set_id` 和 `label` 資料行來查看那些資料格中的內容。
+ 若主索引鍵資料行是數字 (例如 `long` 資料類型)，試算表可能會將其解譯為數字並變更值。此索引鍵值必須做為文字處理。若要修正此問題，請將主索引鍵資料行中的所有資料格格式化成 **Text data (文字資料)**。

#### 標記檔案格式
<a name="machine-learning-labeling-file"></a>

AWS Glue 產生的標記檔案用以教導您的 `FindMatches` 轉換使用以下格式。如果您為 AWS Glue 產生自己的檔案，該檔案也需遵循此格式：
+ 它是一個逗點分隔值 (CSV) 檔案。
+ 它必須以 `UTF-8` 編碼。若您使用 Microsoft Windows 編輯檔案，它可能會以 `cp1252` 進行編碼。
+ 它必須位在 Amazon S3 位置中，才能傳遞給 AWS Glue。
+ 為每個標記任務使用中等數量的行。雖然每個任務可達 2-30 列，但每個任務建議使用 10—20 列。不建議使用超過 50 列的任務，且此類任務可能會導致不佳的結果或系統故障。
+ 如果您有已標記的資料 (由標記為「match」(相符) 或「no-match」(不相符) 的記錄對組成)，這也沒問題。這些已標記的記錄對可以表示為大小 2 的標記組。在這種情況下，例如，如果兩項紀錄相符，則可將它們標記為「A」；如果它們不相符，則可將一筆記錄標記為「A」，另一筆標記為「B」。
**注意**  
 因為它包含額外的資料行，標記檔案所擁有的結構描述會與包含您來源資料的檔案不同。請將標記檔案置放在與任何轉換輸入 CSV 檔案不同的資料夾中，以防 AWS Glue 爬蟲程式在 Data Catalog 中建立資料表時將其納入考慮範圍。否則，AWS Glue 爬取程式建立的資料表可能無法正確地代表您的資料。
+ 前兩個資料行 (`labeling_set_id`、`label`) 是 AWS Glue 的必要項目。其餘資料行必須與要處理資料的結構描述相符。
+ 針對每個 `labeling_set_id`，您可以使用相同的標籤識別所有相符記錄。標籤是置放在 `label` 欄中的唯一字串。我們建議使用包含簡單字元的標籤，例如 A、B、C 等。標籤區分大小寫，並且會在 `label` 資料行中輸入。
+ 包含相同 `labeling_set_id` 和相同標籤的資料列會視為是相符的標記。
+ 包含相同 `labeling_set_id` 但不同標籤的資料列會視為是*不*相符的標記。
+ 包含不同 `labeling_set_id` 資料會視為未傳達任何資訊或不相符。

  以下是標記資料的範例：    
<a name="table-labeling-data"></a>[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/machine-learning.html)
+ 在以上的例子中，我們會將 John/Johnny/Jon Doe 識別為相符，並教導系統這些記錄與 Jane Smith 不相符。我們會另外教導系統 Richard 和 Rich Jones 皆為同一人，但這些記錄與 Sarah Jones/Jones-Walker 和 Richie Jones Jr. 不相符。
+ 如您所見，標籤的範圍會限制在 `labeling_set_id`。因此，標籤不會超過 `labeling_set_id` 的邊界。例如，位於 `labeling_set_id` 1 中的標籤「A」不會與 `labeling_set_id` 2 中的標籤「A」有任何關聯。
+ 若記錄不包含標記組內的任何相符項目，請為其指派一個唯一標籤。例如，Jane Smith 與標記組 ABC123 中的任何記錄，因此它是在有 B 標籤的該標記組中的唯一記錄。
+ 標記組「GHI678」表示標記組可以只由授予相同標籤 (以表示其相符) 的兩筆記錄組成。同樣地「XYZABC」表示授予不同標籤給兩筆記錄，以表示其不相符。
+ 請注意，有時標記組可能不含任何相符項目 (亦即，您授予標記組中的每筆記錄不同的標籤)，或標記組可能全都「相同」(您授予它們全都相同的標籤)。只要您的標籤組共同包含依您的條件屬於與不屬於「相同」的記錄範例。

**重要**  
確認您傳遞給 AWS Glue 的 IAM 角色具備包含標記檔案 Amazon S3 儲存貯體的存取權限。按照慣例，AWS Glue 政策會授予許可至名稱字首為 **aws-glue-** 的 Amazon S3 儲存貯體或資料夾。若您的標記檔案位於不同位置，請在 IAM 角色中將許可新增至該位置。