字符串相似度计算是机器学习中的一个基础操作,旨在评估两个字符串之间的相似性或差异。这种计算在信息检索、自然语言处理和生物信息学等领域广泛应用,通过使用不同的算法和度量方法(如Levenshtein Distance、Cosine Similarity等),帮助识别、匹配或聚类相似文本数据。
算法说明
字符串相似度算法组件支持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_sim。 |
子串的长度 | 仅当相似度计算方法取值为ssk、cosine、simhash_hamming或simhash_hamming_sim时,才需要配置该参数。取值范围为(0,100)。默认值为2。 | |
匹配字符串的权重 | 仅当相似度计算方法取值为ssk、simhash_hamming或simhash_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 | 否 | output | 输出表中相似度列的列名。列名中不能有特殊字符,只能使用英文a~z,A~Z、数字或下划线(_),且以字母开头,长度不超过128字节。 |
method | 否 | levenshtein_sim | 相似度计算方法类型。取值范围为:
|
lambda | 否 | 0.5 | 仅当相似度计算方法取值为ssk时,才需要配置该参数。取值范围为(0,1)。 |
k | 否 | 2 | 仅当相似度计算方法取值为ssk、cosine、simhash_hamming或simhash_hamming_sim时,才需要配置该参数。取值范围为(0,100)。 |
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
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
col0
col1
output
北京
北京
0.0
北京
北京上海
6.0
北京
北京上海深圳
13.0
使用simhash_hamming_sim计算方法的输出结果如下。
col0
col1
output
col0
col1
output
北京
北京
1.0
北京
北京上海
0.90625
北京
北京上海深圳
0.796875
相关文档
关于Designer更详细的内容介绍,请参见Designer概述。
您也可以使用字符串相似度-topN算法组件计算字符串相似度,并筛选出最相似的Top N个数据。关于该组件的使用详情,请参见字符串相似度-topN。
- 本页导读 (1)
- 算法说明
- 组件配置
- 方式一:可视化方式
- 方式二:PAI命令方式
- 示例
- 相关文档