Split Word

更新时间:
复制 MD 格式

本文为您介绍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

否

输入表中参与分词的分区名。格式为partition_name=value。多级分区格式为name1=value1/name2=value2。如果指定多个分区,用英文逗号(,)分隔。

所有分区

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          | 今天是个好日子,天气好晴朗。 |
  • 输出说明

    • 输出原表中的分词列的分词,其余列原样输出。

    • 使用自定义词典时,系统会按照自定义词典和上下文来分词,不会完全按照自定义词典分词。