文章相似度

文章相似度是在字符串相似度的基础上,基于词,计算两两文章或者句子之间的相似度,其中文章或句子需要以空格分割。本文为您介绍文章相似度算法组件的配置方法。

背景信息

文章相似度的计算方式和字符串相似度类似,支持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

    说明

使用限制

支持的计算引擎为MaxCompute。

组件配置

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

方式一:可视化方式

Designer(原PAI-Studio)工作流页面配置组件参数。

页签

参数

描述

字段设置

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

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

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

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

输出表追加的列名

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

输出表中相似度列的列名

指定输出表中相似度列的列名,默认值为output。

说明

列名中不能有特殊字符,只能用英文的a-z,A-Z及数字和下划线_,且以字母开头,名称的长度不超过128字节。

参数设置

相似度计算方法

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

  • levenshtein

  • levenshtein_sim(默认值)

  • lcs

  • lcs_sim

  • ssk

  • cosine

  • simhash_hamming

  • simhash_hamming_sim

子串的长度,sskcosine中可用

仅当相似度计算方法取值为levenshteinsskcosine时,该参数生效。取值范围为(0,100)。默认值为2。

匹配词组合的权重,ssk中可用

仅当相似度计算方法取值为ssk时,该参数生效。取值范围为(0,1)。默认值为0.5。

执行调优

计算的核心数

系统自动选择。

每个核心的内存(MB)

系统自动选择。

方式二:PAI命令方式

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

PAI -name doc_similarity    
    -project algo_public    
    -DinputTableName="pai_test_doc_similarity"    
    -DoutputTableName="pai_test_doc_similarity_output"    
    -DinputSelectedColName1="col0"    
    -DinputSelectedColName2="col1"

参数名称

是否必选

描述1

默认值

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

子串的长度,sskcosine中可用。取值范围为(0,100)。

2

lifecycle

指定输出表的生命周期。

coreNum

计算的核心数。

系统自动分配

memSizePerCore

每个核心的内存,单位为MB。

系统自动分配

示例

  • 生成数据

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

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

    执行成功后,输入表pai_doc_similarity_input的数据如下:

    id

    col0

    col1

    1

    北京 上海

    北京 上海 深圳

    0

    北京 上海

    北京 上海

  • 运行PAI命令

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

    drop table if exists pai_doc_similarity_output;
    PAI -name doc_similarity    
        -project algo_public    
        -DinputTableName=pai_doc_similarity_input    
        -DoutputTableName=pai_doc_similarity_output    
        -DinputSelectedColName1=col0    
        -DinputSelectedColName2=col1    
        -Dmethod=levenshtein_sim    
        -DinputAppendColNames=id,col0,col1;
  • 输出结果

    输出表为pai_doc_similarity_output,如下所示。

    id

    col0

    col1

    output

    1

    北京 上海

    北京 上海 深圳

    0.6666666666666667

    0

    北京 上海

    北京 上海

    1.0

常见问题

  • 相似度计算是基于分词的结果,即以空格分割的每个词作为相似度计算的一个单位。如果是以字符串整体输入,需要使用字符串相似度方法。

  • 参数method中,levenshtein、lcs、simhash_hamming为计算距离。levenshtein_sim、lcs_sim、ssk、cosine、simhash_hamming_sim为计算相似度。距离=1.0-相似度。

  • 相似度计算方法为cosinessk时,存在参数k,表示以k个词作为一个组合,进行相似度计算。如果k大于词的个数,即是两个相同的字符串,相似度输出也为0。此时需要调小k的值,使其小于或等于最小词个数。

相关文档

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

  • 您可以使用字符串相似度组件来计算字符串相似度,详情请参见字符串相似度

  • Designer预置了多种算法组件,你可以根据不同的使用场景选择合适的组件进行数据处理,详情请参见组件参考:所有组件汇总