Python?sentence-transformers庫示例詳解
sentence-transformers 是一個非常流行的 Python 庫,專門用于將文本(句子、段落、文檔)轉(zhuǎn)換為高質(zhì)量的語義向量(嵌入)。它基于 Transformer 架構(gòu)(如 BERT、RoBERTa、DistilBERT 等) 的預(yù)訓(xùn)練模型,并在大量語義相似性數(shù)據(jù)上進(jìn)行了微調(diào),能夠捕捉句子之間的深層語義關(guān)系。
?? 什么是sentence-transformers?
- 項目地址:https://www.sbert.net/
- 作者:Nils Reimers 和 Iryna Gurevych(德國達(dá)姆施塔特工業(yè)大學(xué))
- 主要功能:
- 將文本轉(zhuǎn)化為稠密向量(sentence embeddings)
- 支持多種語言
- 支持多任務(wù)學(xué)習(xí)和跨語言檢索
- 底層依賴:基于 PyTorch 和 HuggingFace Transformers
?? 主要用途
| 場景 | 描述 |
|---|---|
| 文本相似度計算 | 判斷兩個句子是否語義相似(例如問答系統(tǒng)中的答案匹配) |
| 聚類 | 對大量文本進(jìn)行自動聚類(如新聞分類、評論分組) |
| 信息檢索 | 基于語義的搜索,而非關(guān)鍵詞匹配 |
| 語義搜索 / 向量數(shù)據(jù)庫 | 結(jié)合 FAISS、Annoy 等庫構(gòu)建高效的語義搜索引擎 |
| 無監(jiān)督/弱監(jiān)督學(xué)習(xí) | 在沒有標(biāo)簽的情況下提取語義特征進(jìn)行下游任務(wù) |
?? 安裝方式
pip install sentence-transformers
?? 注意:安裝前確保你已經(jīng)安裝了 PyTorch,否則可以使用 torch extra:
pip install sentence-transformers[torch]
?? 使用示例
示例1:加載模型并編碼句子
from sentence_transformers import SentenceTransformer
# 加載預(yù)訓(xùn)練模型(首次運行會自動下載)
model = SentenceTransformer('all-MiniLM-L6-v2')
# 待編碼的句子
sentences = [
"這是一個示例句子。",
"另一個句子用來測試。",
"這兩句話看起來不太一樣。"
]
# 編碼成向量(每個句子變成一個固定維度的向量,如 384 維)
embeddings = model.encode(sentences)
print(embeddings.shape) # (3, 384)示例2:計算兩個句子之間的余弦相似度
from sklearn.metrics.pairwise import cosine_similarity # 計算相似度矩陣 similarity_matrix = cosine_similarity(embeddings) print(similarity_matrix)
輸出是一個 3x3 的矩陣,顯示每對句子之間的語義相似度(值范圍在 [0, 1] 之間)。
示例3:使用 GPU 加速推理
import torch device = 'cuda' if torch.cuda.is_available() else 'cpu' model.to(device) embeddings = model.encode(sentences, device=device)
?? 支持的模型(推薦)
你可以從 HuggingFace Model Hub 上選擇不同類型的模型,以下是幾個常用的:
| 模型名稱 | 特點 |
|---|---|
all-MiniLM-L6-v2 | 輕量級,速度快,適合大多數(shù)通用任務(wù) |
paraphrase-MiniLM-L3-v2 | 更小,適合資源受限環(huán)境 |
all-mpnet-base-v2 | 高性能版本,效果更好但稍慢 |
multi-qa-mpnet-base-dot-v1 | 適用于問答、檢索任務(wù) |
distiluse-base-multilingual-cased-v1 | 支持 50+ 種語言,適合多語言場景 |
LaBSE | 支持 109 種語言,適合跨語言檢索 |
??? 自定義訓(xùn)練模型(進(jìn)階)
如果你有自己的語義匹配任務(wù)(如問答、對話理解),可以使用 sentence-transformers 提供的訓(xùn)練框架進(jìn)行 fine-tune:
from sentence_transformers import SentenceTransformer, InputExample, losses
from torch.utils.data import DataLoader
# 構(gòu)建訓(xùn)練樣本
train_examples = [
InputExample(texts=["春天來了", "天氣變暖了"], label=0.8),
InputExample(texts=["我愛中國", "我是中國人"], label=0.9),
...
]
# 創(chuàng)建數(shù)據(jù)加載器
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16)
# 加載模型
model = SentenceTransformer('bert-base-chinese')
# 使用余弦相似度損失函數(shù)
train_loss = losses.CosineSimilarityLoss(model)
# 開始訓(xùn)練
model.fit(
train_objectives=[(train_dataloader, train_loss)],
epochs=3,
output_path='./my_model/'
)?? 常見結(jié)合使用的庫
| 庫名 | 作用 |
|---|---|
faiss | 快速構(gòu)建高維向量索引,用于語義搜索 |
annoy | 近似最近鄰搜索,適合內(nèi)存有限的設(shè)備 |
pandas | 處理大規(guī)模文本數(shù)據(jù) |
transformers | 獲取原始 Transformer 模型 |
scikit-learn | 聚類、降維等后處理 |
? 總結(jié)
| 功能 | 描述 |
|---|---|
| 中文支持 | ??(需使用中文預(yù)訓(xùn)練模型) |
| 多語言支持 | ??(部分模型支持 50~109 種語言) |
| 易用性 | ??(API 簡潔清晰) |
| 可擴(kuò)展性 | ??(可自定義訓(xùn)練、結(jié)合其他庫) |
| 推薦應(yīng)用場景 | 語義搜索、文本聚類、相似度判斷、信息檢索 |
如果你正在做以下工作,建議使用 sentence-transformers:
- 想要做語義級別的文本匹配
- 不想手動寫特征工程
- 想快速部署一個語義搜索引擎
- 想要在無標(biāo)簽情況下做文本聚類分析
到此這篇關(guān)于Python sentence-transformers庫的文章就介紹到這了,更多相關(guān)Python sentence-transformers內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Python如何實現(xiàn)惰性導(dǎo)入-lazy import
如果你的 Python 程序程序有大量的 import,而且啟動非常慢,那么你應(yīng)該嘗試懶導(dǎo)入,本文分享一種實現(xiàn)惰性導(dǎo)入的一種方法,需要的可以參考一下2022-10-10
tensorflow指定GPU與動態(tài)分配GPU memory設(shè)置
今天小編就為大家分享一篇tensorflow指定GPU與動態(tài)分配GPU memory設(shè)置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
使用pandas忽略行列索引,縱向拼接多個dataframe
這篇文章主要介紹了使用pandas忽略行列索引,縱向拼接多個dataframe的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python 二叉樹的層序建立與三種遍歷實現(xiàn)詳解
這篇文章主要介紹了Python 二叉樹的層序建立與三種遍歷實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
解決pytorch?model代碼內(nèi)tensor?device不一致的問題
這篇文章主要介紹了pytorch?model代碼內(nèi)tensor?device不一致的問題,本文給大家分享完美解決方案,對pytorch?tensor?device不一致問題解決方案感興趣的朋友跟隨小編一起看看吧2023-07-07

