字符串相似度

计算字符串相似度是机器学习领域的一个基本操作,主要用于信息检索、自然语言处理和生物信息学等领域。本文为您介绍字符串相似度算法组件的配置方法。

背景信息

字符串相似度算法组件支持Levenshtein(Levenshtein Distance)、LCS(Longest Common SubString)、SSK(String Subsequence Kernel)、Cosine(Cosine)和Simhash_Hamming五种相似度计算方式,支持两两计算。

  • Levenshtein支持计算距离和相似度。

    • 距离在参数中表示为levenshtein

    • 相似度=1-距离。在参数中表示为levenshtein_sim

  • lCS支持计算距离和相似度。

    • 距离在参数中表示为lcs

    • 相似度=1-距离。相似度在参数中表示为lcs_sim

  • SSK支持计算相似度,在参数中表示为ssk

  • Cosine支持计算相似度,在参数中表示为cosine

  • Simhash_Hamming,其中SimHash算法是把原始的文本映射为64位的二进制指纹,Hamming Distance则是计算二进制指纹在相同位置上不同字符的个数,支持计算距离和相似度。

    • 距离在参数中表示为simhash_hamming

    • 相似度=1-距离/64.0。相似度在参数中表示为simhash_hamming_sim

组件配置

您可以使用以下任意一种方式,配置字符串相似度组件参数。

方式一:可视化方式

Designer工作流页面配置组件参数。

页签

参数

描述

字段设置

输出表追加的列名

指定输出表中追加的列名。

相似度计算中第一列的列名

默认为表中第一个STRING类型的列名。

相似度计算中第二列的列名

默认为表中第二个STRING类型的列名。

输出表中相似度列的列名

指定输出表中相似度列的列名。

参数设置

相似度计算方法

指定相似度计算方法类型。取值范围为:

  • levenshtein

  • levenshtein_sim

  • lcs

  • lcs_sim

  • ssk

  • cosine

  • simhash_hamming

  • simhash_hamming_sim

默认值为levenshtein_sim。

子串的长度

仅当相似度计算方法取值为sskcosinesimhash_hammingsimhash_hamming_sim时,才需要配置该参数。取值范围为(0,100)。默认值为2。

匹配字符串的权重

仅当相似度计算方法取值为ssksimhash_hammingsimhash_hamming_sim时,才需要配置该参数。取值范围为(0,1)。默认值为0.5。

执行调优

计算的核心数

默认为系统自动分配。

每个核心的内存(MB)

默认为系统自动分配。

方式二:PAI命令方式

使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本

PAI -name string_similarity
    -project algo_public
    -DinputTableName="pai_test_string_similarity"
    -DoutputTableName="pai_test_string_similarity_output"
    -DinputSelectedColName1="col0"
    -DinputSelectedColName2="col1";

参数名称

是否必选

描述

默认值

inputTableName

输入表的名称。

outputTableName

输出表的名称。

inputSelectedColName1

相似度计算中第一列的列名。

表中第一个STRING类型的列名

inputSelectedColName2

相似度计算中第二列的列名。

表中第二个STRING类型的列名

inputAppendColNames

输出表追加的列名。

inputTablePartitions

输入表的分区名称。

所有分区

outputColName

输出表中相似度列的列名。列名中不能有特殊字符,只能使用英文a~z,A~Z、数字或下划线(_),且以字母开头,长度不超过128字节。

output

method

相似度计算方法类型。取值范围为:

  • levenshtein

  • levenshtein_sim

  • lcs

  • lcs_sim

  • ssk

  • cosine

  • simhash_hamming

  • simhash_hamming_sim

levenshtein_sim

lambda

仅当相似度计算方法取值为ssk时,才需要配置该参数。取值范围为(0,1)

0.5

k

仅当相似度计算方法取值为sskcosinesimhash_hammingsimhash_hamming_sim时,才需要配置该参数。取值范围为(0,100)

2

lifecycle

输出表的生命周期。取值范围为正整数。

coreNum

计算的核心数。

系统自动分配

memSizePerCore

每个核心的内存数。

系统自动分配

示例

  • 输入数据

    使用ODPS SQL节点创建表pai_ft_string_similarity_topn_input。命令如下:

    create table pai_ft_string_similarity_input as select * from
    (select 0 as id, "北京" as col0, "北京" as col1
    union all
    select 1 as id, "北京" as col0, "北京上海" as col1
    union all
    select 2 as id, "北京" as col0, "北京上海深圳" as col1
    )tmp;

    执行成功后,pai_ft_string_similarity_topn_input表数据如下:

    id

    col0

    col1

    0

    北京

    北京

    1

    北京

    北京上海

    2

    北京

    北京上海深圳

  • 运行PAI命令

    您可以使用SQL脚本执行如下PAI命令,也可以使用ODPS SQL节点执行如下PAI命令。

    PAI -name string_similarity
        -project algo_public
        -DinputTableName=pai_ft_string_similarity_input
        -DoutputTableName=pai_ft_string_similarity_output
        -DinputSelectedColName1=col0
        -DinputSelectedColName2=col1
        -Dmethod=simhash_hamming
        -DinputAppendColNames=col0,col1;
  • 输出结果

    • 使用simhash_hamming计算方法的输出结果如下。

      col0

      col1

      output

      北京

      北京

      0.0

      北京

      北京上海

      6.0

      北京

      北京上海深圳

      13.0

    • 使用simhash_hamming_sim计算方法的输出结果如下。

      col0

      col1

      output

      北京

      北京

      1.0

      北京

      北京上海

      0.90625

      北京

      北京上海深圳

      0.796875

相关文档

  • 关于Designer更详细的内容介绍,请参见Designer概述

  • 您也可以使用字符串相似度-topN算法组件计算字符串相似度,并筛选出最相似的Top N个数据。关于该组件的使用详情,请参见字符串相似度-topN