本文為您介紹Designer提供的Split Word演算法組件。
Split Word演算法組件基於AliWS(Alibaba Word Segmenter)詞法分析系統,對指定列的內容進行分詞,分詞後的各個詞語之間以空格分隔。如果您配置了詞性標註或語義標註相關參數,則系統會將分詞、詞性標註和語義標註結果一同輸出,其中詞性標註分隔字元為正斜線(/),語義標註分隔字元為豎線(|)。
Split Word僅支援中文淘寶分詞(TAOBAO_CHN)和互連網分詞(INTERNET_CHN)。
Designer支援通過可視化或PAI命令方式,配置Split Word演算法組件相關參數。
組件配置
您可以使用以下任意一種方式,配置Split Word組件參數。
方式一:可視化方式
在Designer工作流程頁面配置組件參數。
頁簽 | 參數 | 描述 |
欄位設定 | 列名 | 用來進行分詞的列名。 |
參數設定 | 識別選項 | 識別內容類型。取值範圍為:
預設值為:識別簡單實體、識別電話號碼、識別時間、識別日期和識別數字字母。 |
合并選項 | 合并內容類型。取值範圍為:
預設值為:合并阿拉伯數字。 | |
過濾器 | 過濾器的類型。取值範圍為TAOBAO_CHN和INTERNET_CHN。預設值為TAOBAO_CHN。 | |
Pos Tagger | 是否進行詞性標註。預設進行詞性標註。 | |
Semantic Tagger | 是否進行語義標註。預設不進行語義標註。 | |
過濾分詞結果為數位詞 | 是否過濾分詞結果為數位詞。預設不過濾。 | |
過濾分詞結果為全英文的詞 | 是否過濾分詞結果為全英文的詞。預設不過濾。 | |
過濾分詞結果為標點符號的詞 | 是否過濾分詞結果為標點符號的詞。預設不過濾。 | |
執行調優 | 核心數 | 預設為系統自動分配。 |
每個核的記憶體數 | 預設為系統自動分配。 |
方式二:PAI命令方式
使用PAI命令方式,配置該組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見SQL指令碼。
pai -name split_word_model
-project algo_public
-DoutputModelName=aliws_model
-DcolName=content
-Dtokenizer=TAOBAO_CHN
-DenableDfa=true
-DenablePersonNameTagger=false
-DenableOrgnizationTagger=false
-DenablePosTagger=false
-DenableTelephoneRetrievalUnit=true
-DenableTimeRetrievalUnit=true
-DenableDateRetrievalUnit=true
-DenableNumberLetterRetrievalUnit=true
-DenableChnNumMerge=false
-DenableNumMerge=true
-DenableChnTimeMerge=false
-DenableChnDateMerge=false
-DenableSemanticTagger=true
參數名稱 | 是否必選 | 描述 | 預設值 |
inputTableName | 是 | 輸入表的名稱。 | 無 |
inputTablePartitions | 否 | 輸入表中參與分詞的分區名。格式為 | 所有分區 |
selectedColNames | 是 | 輸入表中用於分詞的列名。如果指定多列,用英文逗號(,)分隔。 | 無 |
dictTableName | 否 | 是否使用自訂字典表。自訂字典表只有一列,每一行是一個詞。 | 無 |
tokenizer | 否 | 過濾器類型。取值為TAOBAO_CHN或INTERNET_CHN。 | TAOBAO_CHN |
enableDfa | 否 | 是否識別簡單實體。取值為True或False。 | True |
enablePersonNameTagger | 否 | 是否識別人名。取值為True或False。 | False |
enableOrgnizationTagger | 否 | 是否識別機構名。取值為True或False。 | False |
enablePosTagger | 否 | 是否進行詞性標註。取值為True或False。 | False |
enableTelephoneRetrievalUnit | 否 | 是否識別電話號碼。取值為True或False。 | True |
enableTimeRetrievalUnit | 否 | 是否識別時間號碼。取值為True或False。 | True |
enableDateRetrievalUnit | 否 | 是否識別日期號碼。取值為True或False。 | True |
enableNumberLetterRetrievalUnit | 否 | 是否識別數字字母。取值為True或False。 | True |
enableChnNumMerge | 否 | 是否將中文數字合并為一個檢索單元。取值為True或False。 | False |
enableNumMerge | 否 | 是否將普通數字合并為一個檢索單元。取值為True或False。 | True |
enableChnTimeMerge | 否 | 是否將中文時間合并為一個語義單元。取值為True或False。 | False |
enableChnDateMerge | 否 | 指定是否將中文日期合并為一個語義單元。取值為True或False。 | False |
enableSemanticTagger | 否 | 是否進行語義標註。取值為True或False。 | False |
outputTableName | 是 | 輸出表的名稱。 | 無 |
outputTablePartition | 否 | 輸出表的分區名稱。 | 無 |
coreNum | 否 | 節點個數,需要與memSizePerCore參數同時設定才生效。取值為正整數,範圍為[1,9999]。 | 系統自動分配 |
memSizePerCore | 否 | 單個節點記憶體大小,單位為MB。取值為正整數,範圍為[1024,64×1024]。 | 系統自動分配 |
lifecycle | 否 | 輸出表的生命週期。取值為正整數。 | 無 |
如果表為普通表,不建議您設定coreNum和memSizePerCore,Split Word演算法組件會自動計算。
在資源有限的情況下,您可以使用如下代碼計算節點個數和單個節點記憶體。
def CalcCoreNumAndMem(row, col, kOneCoreDataSize=1024):
"""計算節點個數和單個節點記憶體
Args:
row:輸入錶行數
col:輸入表列數
kOneCoreDataSize:單個節點計算的資料量,單位MB,正整數,預設為1024
Return:
coreNum, memSizePerCore
Example:
coreNum, memSizePerCore = CalcCoreNumAndMem(1000,99, 100, kOneCoreDataSize=2048)
"""
kMBytes = 1024.0 * 1024.0
#按數量劃分,計算節點個數
coreNum = max(1, int(row * col * 1000/ kMBytes / kOneCoreDataSize))
#單個節點記憶體 = 資料量大小
memSizePerCore = max(1024, int(kOneCoreDataSize*2))
return coreNum, memSizePerCore
樣本
產生資料
create table pai_aliws_test as select 1 as id, '今天是個好日子,天氣好晴朗。' as content;
PAI命令列
pai -name split_word -project algo_public -DinputTableName=pai_aliws_test -DselectedColNames=content -DoutputTableName=doc_test_split_word
輸入說明
輸入包含兩列的表,第一列是文檔ID,第二列是文檔內容。
+------------+------------+ | id | content | +------------+------------+ | 1 | 今天是個好日子,天氣好晴朗。 |
輸出說明
輸出原表中的分詞列的分詞,其餘列原樣輸出。
使用自訂字典時,系統會按照自訂字典和上下文來分詞,不會完全按照自訂字典分詞。