在自然語言處理(NLP)中,文本相似度是衡量兩個文本之間語義或結構相似程度的一個重要概念。計算文本相似度的方法多種多樣,適應不同的應用場景和需求。以下是一些常見的文本相似度計算方法:
1、余弦相似度:
通過將文本轉換為向量表示(例如,使用詞袋模型、TF-IDF 或 word2vec、GloVe 等詞嵌入技術),然后計算這兩個向量之間的余弦夾角來評估相似度。
余弦相似度值范圍從-1到1,值越接近1,代表兩個向量越相似。
2、Jaccard相似度:
對于分詞后的文檔集合,可以計算它們的交集與并集的比例,以此作為相似度指標。
3、編輯距離(Levenshtein距離)或其它字符串距離:
用于衡量兩個字符串變換成另一個所需的最少單字符編輯操作次數(插入、刪除、替換)。
編輯距離較小,表明文本更相似。
4、詞重疊度:
計算兩篇文檔共有的詞匯數量及其權重占比。
5、TF-IDF cosine similarity:
使用TF-IDF對每個詞語的重要性進行加權后計算余弦相似度。
6、Word Mover’s Distance (WMD):
基于地球 mover 距離的概念,考慮詞語之間的語義關系,在詞嵌入空間中計算距離。
7、BERT等預訓練模型:
利用如BERT這樣的Transformer架構的預訓練模型,可以直接獲取句子級別的向量表示,然后計算這些向量之間的相似度。
8、Siamese Networks 和 Sentence-BERT (SBERT):
訓練網絡以學習將文本映射到一個固定大小的向量空間,其中相似的文本對應相近的向量,從而可以直接比較向量間的距離或相似度得分。
具體可根據任務的需求和數據特性,可以選擇合適的文本相似度計算方法。隨著深度學習的發展,基于神經網絡的模型因其能夠捕捉到更深層次的語義信息而成為近年來越來越流行的選擇。
下面介紹使用transformers解決文本相似度任務的一個簡單流程。
# 文本相似度任務 **ForSequenceClassification
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from transformers import DataCollatorWithPadding
# 加載數據
dataset = load_dataset("json", data_files="./sentence_similarity/train_pair_1w.json", split="train")
print(dataset[:3])
# 劃分數據集
datasets = dataset.train_test_split(test_size=0.2)
print