本文为您介绍PAI-Studio提供的Split Word算法组件。

Split Word算法组件基于AliWS(Alibaba Word Segmenter)词法分析系统,对指定列的内容进行分词,分词后的各个词语之间以空格分隔。如果您配置了词性标注或语义标注相关参数,则系统会将分词、词性标注和语义标注结果一同输出,其中词性标注分隔符为正斜线(/),语义标注分隔符为竖线(|)。

Split Word仅支持中文淘宝分词(TAOBAO_CHN)和互联网分词(INTERNET_CHN)。

PAI-Studio支持通过可视化或PAI命令方式,配置Split Word算法组件相关参数。

配置组件

  • 可视化方式
    页签 参数 描述
    字段设置 列名 用来进行分词的列名。
    参数设置 识别选项 识别内容类型。取值范围为:
    • 识别简单实体
    • 识别人名
    • 识别机构名
    • 识别电话号码
    • 识别时间
    • 识别日期
    • 识别数字字母

    默认值为:识别简单实体、识别电话号码、识别时间、识别日期和识别数字字母。

    合并选项 合并内容类型。取值范围为:
    • 合并中文数字
    • 合并阿拉伯数字
    • 合并中文日期
    • 合并中文时间

    默认值为:合并阿拉伯数字。

    过滤器 过滤器的类型。取值范围为TAOBAO_CHN和INTERNET_CHN。默认值为TAOBAO_CHN。
    Pos Tagger 是否进行词性标注。默认进行词性标注。
    Semantic Tagger 是否进行语义标注。默认不进行语义标注。
    过滤分词结果为数字的词 是否过滤分词结果为数字的词。默认不过滤。
    过滤分词结果为全英文的词 是否过滤分词结果为全英文的词。默认不过滤。
    过滤分词结果为标点符号的词 是否过滤分词结果为标点符号的词。默认不过滤。
    执行调优 核心数 默认为系统自动分配。
    每个核的内存数 默认为系统自动分配。
  • PAI命令方式
    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 输出表的生命周期。取值为正整数。

    如果表为普通表,不建议您设置coreNummemSizePerCore,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
    from  dual;
  • PAI命令行
    pai -name split_word
        -project algo_public
        -DinputTableName=pai_aliws_test
        -DselectedColNames=content
        -DoutputTableName=doc_test_split_word
  • 输入说明
    输入包含两列的表,第一列是文档ID,第二列是文档内容。
    +------------+------------+
    | id         | content    |
    +------------+------------+
    | 1          | 今天是个好日子,天气好晴朗。 |
  • 输出说明
    • 输出原表中的分词列的分词,其余列原样输出。
    • 使用自定义词典时,系统会按照自定义词典和上下文来分词,不会完全按照自定义词典分词。