實作 ANLS
· 閱讀時間約 7 分鐘
Average Normalized Levenshtein Similarity,簡稱 ANLS,是一種用於計算兩個字符串之間相似性的指標。
在自然語言處理(NLP)中,我們經常需要比較兩個字符串的相似性。
Levenshtein Similarity 是一種常見的度量方法,它衡量了兩個字符串之間的「編輯距離」,即通過多少次插入、刪除或替換操作可以將一個字符串轉換為另一個字符串。然而,Levenshtein Similarity 本身並不直觀,因為它取決於字符串的長度。
為了解決這個問題,我們可以將 Levenshtein Similarity 標準化為 [0, 1] 區間,這樣我們就可以更容易地理解和比較不同字符串之間的相似性,稱為 Normalized Levenshtein Similarity(NLS)。
由於 NLS 指的是一組字串之間的相似性,我們可以將其進一步擴展為 ANLS,即 Average Normalized Levenshtein Similarity,它計算了多組字串之間的平均相似性,藉此來橫量模型的性能。
然後...
我總是找不到喜歡的實作,最後決定自己寫一個。
導入必要的庫
首先,我們需要導入一些必要的庫,特別是由 torchmetrics
實作的 EditDistance
:
from typing import Any, Literal, Optional, Sequence, Union
import torch
from torch import Tensor
from torchmetrics.metric import Metric
from torchmetrics.text import EditDistance
from torchmetrics.utilities.data import dim_zero_cat
由於 EditDistance
已經可以計算 Levenshtein 距離,我們可以直接使用它來計算兩個字符串之間的編輯距離。然而,EditDistance
並沒有提供標準化的功能,所以我們需要自己實現這一部分。