本文为您介绍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 | 今天是个好日子,天气好晴朗。 |
输出说明
输出原表中的分词列的分词,其余列原样输出。
使用自定义词典时,系统会按照自定义词典和上下文来分词,不会完全按照自定义词典分词。