全部產品
Search
文件中心

Platform For AI:文章相似性

更新時間:Jul 13, 2024

文章相似性是在字串相似性的基礎上,基於詞,計算兩兩文章或者句子之間的相似性,其中文章或句子需要以空格分割。本文為您介紹文章相似性演算法組件的配置方法。

背景資訊

文章相似性的計算方式和字串相似性類似,支援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

子串的長度,ssk和cosine中可用

僅當相似性計算方法取值為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

子串的長度,ssk和cosine中可用。取值範圍為(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-相似性。

  • 相似性計算方法為cosine或ssk時,存在參數k,表示以k個詞作為一個組合,進行相似性計算。如果k大於詞的個數,即是兩個相同的字串,相似性輸出也為0。此時需要調小k的值,使其小於或等於最小詞個數。

相關文檔

  • 關於Designer組件更詳細的內容介紹,請參見Designer概述

  • 您可以使用字串相似性組件來計算字串相似性,詳情請參見字串相似性

  • Designer預置了多種演算法組件,你可以根據不同的使用情境選擇合適的組件進行資料處理,詳情請參見組件參考:所有組件匯總