本文為您介紹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 | 今天是個好日子,天氣好晴朗。 |
輸出說明
輸出原表中的分詞列的分詞,其余列原樣輸出。
使用自定義詞典時,系統會按照自定義詞典和上下文來分詞,不會完全按照自定義詞典分詞。