本文为您介绍PAI-Studio提供的文章相似度算法组件。

文章相似度是在字符串相似度的基础上,基于词,计算两两文章或者句子之间的相似度。文章或句子需要以空格分割,计算方式和字符串相似度类似,支持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
    说明

配置组件

PAI-Studio支持通过可视化或PAI命令的方式,配置组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 相似度计算中第一列的列名 默认为表中第一个string类型的列名。
    相似度计算中第二列的列名 默认为表中第二个string类型的列名。
    输出表追加的列名 指定输出表中追加的列名。
    输出表中相似度列的列名 指定输出表中相似度列的列名,默认值为output。
    说明 列名中不能有特殊字符,只能用英文的a-z,A-Z及数字和下划线_,且以字母开头,名称的长度不超过128字节。
    参数设置 相似度计算方法 指定相似度计算方法类型。取值范围为:
    • levenshtein
    • levenshtein_sim
    • lcs
    • lcs_sim
    • ssk
    • cosine
    • simhash_hamming
    • simhash_hamming_sim
    默认值为levenshtein_sim。
    子串的长度,ssk和cosine中可用 仅当相似度计算方法取值为levenshteinsskcosine时,该参数生效。取值范围为(0,100)。默认值为2。
    匹配词组合的权重,ssk中可用 仅当相似度计算方法取值为ssk时,该参数生效。取值范围为(0,1)。默认值为0.5。
    执行调优 计算的核心数 系统自动选择。
    每个核心的内存(MB) 系统自动选择。
  • PAI命令方式
    PAI -name doc_similarity    
        -project algo_public    
        -DinputTableName="pai_test_doc_similarity"    
        -DoutputTableName="pai_test_doc_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 子串的长度,ssk和cosine中可用。取值范围为(0,100)。 2
    lifecycle 指定输出表的生命周期
    coreNum 计算的核心数 系统自动分配
    memSizePerCore 每个核心的内存,单位为MB。 系统自动分配

示例

  • 生成数据
    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 from dual
    union all
    select 1 as id, "北京 上海" as col0, "北京 上海 香港" as col1 from dual
    )tmp
    输入表为pai_doc_similarity_input,如下所示。
    id col0 col1
    1 北京 上海 北京 上海 香港
    0 北京 上海 北京 上海
  • 运行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-相似度。
  • 相似度计算方法为cosine或ssk时,存在参数k,表示以k个词作为一个组合,进行相似度计算。如果k大于词的个数,即是两个相同的字符串,相似度输出也为0。此时需要调小k的值,使其小于或等于最小词个数。