最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python sentence_transformers 庫的作用(生成句子、段落或圖像的高質(zhì)量嵌入(embeddings))

 更新時(shí)間:2025年08月28日 15:37:40   作者:彬彬俠  
sentence_transformers是基于HuggingFace Transformers的Python庫,用于生成文本和圖像的高質(zhì)量嵌入,支持多語言、跨模態(tài)及語義搜索等NLP任務(wù),本文給大家介紹Python sentence_transformers 庫的作用及詳細(xì)說明,感興趣的朋友一起看看吧

sentence_transformers 是一個(gè)用于生成句子、段落或圖像的高質(zhì)量嵌入(embeddings)的 Python 庫,基于 Hugging Face 的 transformers 庫。它通過預(yù)訓(xùn)練的 Transformer 模型(如 BERT、RoBERTa、DistilBERT 等)生成固定長度的密集向量表示,廣泛應(yīng)用于自然語言處理(NLP)任務(wù),如語義搜索、文本相似性比較、聚類、釋義挖掘等。以下是對(duì) sentence_transformers 庫的詳細(xì)說明。

1.sentence_transformers 庫的作用

  • 生成嵌入:將文本(句子、段落)或圖像編碼為固定長度的向量(嵌入),表示語義信息。
  • 高效任務(wù)支持:支持語義文本相似性(STS)、語義搜索、聚類、問答檢索、圖像搜索等任務(wù)。
  • 多語言支持:提供超過 100 種語言的預(yù)訓(xùn)練模型,適合多語言應(yīng)用。
  • 易于微調(diào):允許用戶基于特定任務(wù)微調(diào)模型,生成任務(wù)特定的嵌入。
  • 跨模態(tài)支持:支持文本和圖像嵌入到同一向量空間(如 CLIP 模型)。

2.安裝與環(huán)境要求

根據(jù)官方文檔,推薦以下環(huán)境:

  • Python 版本:3.9 或更高。
  • 依賴庫
    • PyTorch 1.11.0+(支持 GPU 需安裝對(duì)應(yīng) CUDA 版本)。
    • transformers 4.34.0+。
  • 安裝命令
    pip install sentence-transformers
  • 可選擴(kuò)展
    • ONNX/OpenVINO:用于推理優(yōu)化和量化。
    • 訓(xùn)練支持:pip install sentence-transformers[train]
    • GPU 支持:確保安裝與 CUDA 版本匹配的 PyTorch。

注意:若需 GPU 加速,需根據(jù)系統(tǒng) CUDA 版本安裝 PyTorch,參考 PyTorch 官方指南。

3.核心功能與用法

sentence_transformers 提供兩種主要模型類型:SentenceTransformer(用于生成嵌入)和 CrossEncoder(用于重新排序或相似性評(píng)分)。

3.1SentenceTransformer:生成嵌入

SentenceTransformer 將文本編碼為固定長度的向量,適合語義搜索、相似性比較等任務(wù)。

基本用法

from sentence_transformers import SentenceTransformer
# 加載預(yù)訓(xùn)練模型
model = SentenceTransformer("all-MiniLM-L6-v2")
# 待編碼的句子
sentences = [
    "The weather is lovely today.",
    "It's so sunny outside!",
    "He drove to the stadium."
]
# 生成嵌入
embeddings = model.encode(sentences)
print(embeddings.shape)  # 輸出: (3, 384)  # 3 個(gè)句子,每個(gè)嵌入 384 維
# 計(jì)算相似性
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# 輸出: tensor([[1.0000, 0.6660, 0.1046],
#                [0.6660, 1.0000, 0.1411],
#                [0.1046, 0.1411, 1.0000]])

說明

  • 模型 all-MiniLM-L6-v2 是一個(gè)輕量高效的預(yù)訓(xùn)練模型,生成 384 維嵌入。
  • model.encode() 將文本轉(zhuǎn)換為嵌入(numpy 數(shù)組或 tensor)。
  • model.similarity() 計(jì)算嵌入之間的余弦相似度(或其他相似性度量)。

帶提示(Prompt)的高級(jí)用法
某些模型支持在推理時(shí)添加提示以優(yōu)化性能,例如查詢嵌入:

model = SentenceTransformer("mixedbread-ai/mxbai-embed-large-v1")
query_embedding = model.encode("What are Pandas?", prompt_name="query")
document_embeddings = model.encode([
    "Pandas is a software library written for the Python programming language for data manipulation and analysis.",
    "Pandas are a species of bear native to South Central China."
])
similarity = model.similarity(query_embedding, document_embeddings)
print(similarity)  # 輸出: tensor([[0.7594, 0.7560]])

3.2CrossEncoder:重新排序

CrossEncoder 用于對(duì)句子對(duì)進(jìn)行直接評(píng)分,適合需要高精度的任務(wù)(如檢索重排序)。

用法

from sentence_transformers import CrossEncoder
# 加載預(yù)訓(xùn)練 CrossEncoder 模型
model = CrossEncoder("cross-encoder/ms-marco-MiniLM-L6-v2")
# 查詢與文檔
query = "Which planet is known as the Red Planet?"
passages = [
    "Venus is often called Earth's twin because of its similar size and proximity.",
    "Mars, known for its reddish appearance, is often referred to as the Red Planet.",
    "Jupiter, the largest planet in our solar system, has a prominent red spot."
]
# 計(jì)算評(píng)分
scores = model.predict([(query, passage) for passage in passages])
print(scores)  # 輸出: [0.0123, 0.9987, 0.3456](示例分?jǐn)?shù))

說明

  • CrossEncoder 直接處理句子對(duì),輸出相似性分?jǐn)?shù)(通常 0 到 1)。
  • 適合需要高精度的場(chǎng)景,但計(jì)算成本高于 SentenceTransformer。

4.預(yù)訓(xùn)練模型

sentence_transformers 提供超過 10,000 個(gè)預(yù)訓(xùn)練模型,托管在 Hugging Face Hub,覆蓋以下類型:

  • 通用嵌入模型:如 all-MiniLM-L6-v2(輕量)、all-mpnet-base-v2(高性能)。
  • 多語言模型:如 distiluse-base-multilingual-cased-v2,支持 100+ 語言。
  • 領(lǐng)域特定模型:如 multi-qa-MiniLM-L6-cos-v1(問答)、paraphrase-MiniLM-L6-v2(釋義)。
  • 跨模態(tài)模型:如 CLIP 模型(clip-ViT-B-32),支持文本和圖像嵌入。

加載模型

model = SentenceTransformer("all-MiniLM-L6-v2")  # 從 Hugging Face 下載

本地加載
若需離線使用,可先下載模型并保存:

model = SentenceTransformer("all-MiniLM-L6-v2")
model.save("local_model_path")
# 加載本地模型
model = SentenceTransformer("local_model_path")

5.微調(diào)與訓(xùn)練

sentence_transformers 支持微調(diào)模型以適應(yīng)特定任務(wù),提供多種損失函數(shù)和訓(xùn)練方式。

5.1訓(xùn)練示例

以下是一個(gè)微調(diào)模型的示例,用于語義文本相似性任務(wù):

from sentence_transformers import SentenceTransformer, InputExample, losses
from torch.utils.data import DataLoader
# 加載模型
model = SentenceTransformer("all-MiniLM-L6-v2")
# 準(zhǔn)備訓(xùn)練數(shù)據(jù)
train_examples = [
    InputExample(texts=["The weather is nice today.", "It's pleasant outside."], label=0.9),
    InputExample(texts=["The weather is nice today.", "He went to the park."], label=0.2)
]
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16)
# 定義損失函數(shù)
train_loss = losses.CosineSimilarityLoss(model)
# 訓(xùn)練模型
model.fit(
    train_objectives=[(train_dataloader, train_loss)],
    epochs=1,
    warmup_steps=100
)
# 保存模型
model.save("finetuned_model")

說明

  • InputExample 定義訓(xùn)練樣本,包含句子對(duì)和標(biāo)簽(如相似性分?jǐn)?shù))。
  • CosineSimilarityLoss 優(yōu)化嵌入之間的余弦相似度。
  • model.fit 執(zhí)行訓(xùn)練,支持多任務(wù)學(xué)習(xí)。

5.2支持的損失函數(shù)

sentence_transformers.losses 提供多種損失函數(shù),包括:

  • CosineSimilarityLoss:優(yōu)化句子對(duì)的余弦相似度。
  • TripletLoss:基于三元組(錨點(diǎn)、正例、負(fù)例)優(yōu)化。
  • SoftmaxLoss:用于分類任務(wù)(如 NLI)。
  • MultipleNegativesRankingLoss:適合無監(jiān)督或弱監(jiān)督訓(xùn)練。

5.3訓(xùn)練提示

  • 數(shù)據(jù)集:可使用 Hugging Face 數(shù)據(jù)集(如 STS-B、SNLI)或自定義數(shù)據(jù)。
  • 提示(Prompt):支持在訓(xùn)練和推理時(shí)添加提示以提升性能。
  • PEFT 支持:自 v3.3.0 起支持參數(shù)高效微調(diào)(Parameter-Efficient Fine-Tuning)。
  • NanoBEIR 評(píng)估:用于快速評(píng)估信息檢索性能。

6.性能優(yōu)化

  • ONNX/OpenVINO:使用 ONNX 或 OpenVINO 后端進(jìn)行推理優(yōu)化和量化。
    pip install sentence-transformers[onnx]
  • CPU 加速:v3.3.0 引入 OpenVINO int8 量化,CPU 推理速度提升 4.5 倍。
  • GPU 加速:確保 PyTorch 支持 CUDA。
  • 批量處理model.encode(sentences, batch_size=32) 優(yōu)化內(nèi)存和速度。
  • 緩存嵌入:預(yù)計(jì)算并存儲(chǔ)常用文本的嵌入,減少重復(fù)計(jì)算。

7.實(shí)際應(yīng)用場(chǎng)景

  • 語義搜索
    from sentence_transformers import SentenceTransformer, util
    model = SentenceTransformer("multi-qa-MiniLM-L6-cos-v1")
    query = "How big is London?"
    passages = ["London has 9,787,426 inhabitants at the 2011 census."]
    query_embedding = model.encode(query)
    passage_embedding = model.encode(passages)
    similarity = util.dot_score(query_embedding, passage_embedding)
    print(similarity)  # 輸出相似度
  • 聚類:使用嵌入進(jìn)行 K-Means 或其他聚類算法。
  • 釋義挖掘:使用 util.paraphrase_mining 查找語料庫中的釋義。
  • 跨模態(tài)搜索:使用 CLIP 模型實(shí)現(xiàn)文本-圖像搜索。
  • 問答系統(tǒng):結(jié)合 CrossEncoder 進(jìn)行檢索和重排序。

8.與 LangChain 集成

sentence_transformers 常與 LangChain 結(jié)合,用于構(gòu)建基于語義的應(yīng)用程序(如聊天機(jī)器人、文檔檢索):

from sentence_transformers import SentenceTransformer
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
# 初始化嵌入模型
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
# 創(chuàng)建向量存儲(chǔ)
texts = ["The weather is nice today.", "It's sunny outside."]
vector_store = FAISS.from_texts(texts, embeddings)
# 搜索
query = "How's the weather?"
results = vector_store.similarity_search(query, k=2)
print(results)

9.注意事項(xiàng)

  • 依賴體積sentence_transformers 依賴 PyTorch 和 transformers,安裝可能占用較大空間(約 5-7GB,含模型)??墒褂?--no-cache-dir 減小 Docker 鏡像體積。
  • 模型下載:首次加載模型會(huì)自動(dòng)從 Hugging Face 下載,需確保網(wǎng)絡(luò)連接或預(yù)先下載模型。
  • 離線使用:保存模型到本地路徑以支持無網(wǎng)絡(luò)環(huán)境。
  • 版本兼容性:定期檢查 sentence-transformers 的版本更新(如 v3.3.0 引入了多項(xiàng)優(yōu)化)。
  • 多語言模型:選擇多語言模型時(shí),需引用相關(guān)論文以確保學(xué)術(shù)規(guī)范。

10.綜合示例

以下是一個(gè)綜合示例,結(jié)合嵌入生成、相似性計(jì)算和 CrossEncoder 重排序:

from sentence_transformers import SentenceTransformer, CrossEncoder, util
# 加載模型
encoder = SentenceTransformer("all-MiniLM-L6-v2")
reranker = CrossEncoder("cross-encoder/ms-marco-MiniLM-L6-v2")
# 語料庫和查詢
query = "What is pandas?"
corpus = [
    "Pandas is a Python library for data analysis.",
    "Pandas are animals native to China.",
    "NumPy is a Python library for numerical computing."
]
# 生成嵌入并計(jì)算相似度
query_embedding = encoder.encode(query)
corpus_embeddings = encoder.encode(corpus)
similarities = util.cos_sim(query_embedding, corpus_embeddings)
# 獲取初步檢索結(jié)果
top_k = 3
hits = [{"corpus_id": i, "score": similarities[0][i]} for i in range(len(corpus))]
hits = sorted(hits, key=lambda x: x["score"], reverse=True)[:top_k]
# 使用 CrossEncoder 重排序
pairs = [(query, corpus[hit["corpus_id"]]) for hit in hits]
scores = reranker.predict(pairs)
# 輸出結(jié)果
for hit, score in zip(hits, scores):
    print(f"Score: {score:.4f}, Text: {corpus[hit['corpus_id']]}")

輸出示例

Score: 0.9987, Text: Pandas is a Python library for data analysis.
Score: 0.3456, Text: Pandas are animals native to China.
Score: 0.0123, Text: NumPy is a Python library for numerical computing.

11.資源與文檔

到此這篇關(guān)于Python sentence_transformers 庫的作用(生成句子、段落或圖像的高質(zhì)量嵌入(embeddings))的文章就介紹到這了,更多相關(guān)Python sentence_transformers 庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • python實(shí)現(xiàn)學(xué)員管理系統(tǒng)

    python實(shí)現(xiàn)學(xué)員管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 使用Python高效實(shí)現(xiàn)Excel轉(zhuǎn)PDF

    使用Python高效實(shí)現(xiàn)Excel轉(zhuǎn)PDF

    在日常辦公和數(shù)據(jù)處理過程中,Excel 是我們最常用的工具,而 PDF 則是方便共享、打印和歸檔的格式,下面我們來看看如何使用 Python 把 Excel 轉(zhuǎn)換為 PDF吧
    2025-09-09
  • 解決pytorch 保存模型遇到的問題

    解決pytorch 保存模型遇到的問題

    這篇文章主要介紹了解決pytorch 保存模型遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)做人臉識(shí)別的示例代碼

    使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)做人臉識(shí)別的示例代碼

    這篇文章主要介紹了使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)做人臉識(shí)別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 教你python 中如何取出colomap部分的顏色范圍

    教你python 中如何取出colomap部分的顏色范圍

    這篇文章主要介紹了python 中如何取出colomap部分的顏色范圍,本文以以jet為例給大家提供一種方法,可以提取colormap色標(biāo)中的一部分,取出我們滿意的色標(biāo)區(qū)域,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Python3操作SQL Server數(shù)據(jù)庫(實(shí)例講解)

    Python3操作SQL Server數(shù)據(jù)庫(實(shí)例講解)

    下面小編就為大家?guī)硪黄狿ython3操作SQL Server數(shù)據(jù)庫(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Matlab中的mat數(shù)據(jù)轉(zhuǎn)成python中使用的npy數(shù)據(jù)遇到的坑及解決

    Matlab中的mat數(shù)據(jù)轉(zhuǎn)成python中使用的npy數(shù)據(jù)遇到的坑及解決

    這篇文章主要介紹了Matlab中的mat數(shù)據(jù)轉(zhuǎn)成python中使用的npy數(shù)據(jù)遇到的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python自動(dòng)化短視頻生成腳本實(shí)現(xiàn)熱門視頻流水線生產(chǎn)

    Python自動(dòng)化短視頻生成腳本實(shí)現(xiàn)熱門視頻流水線生產(chǎn)

    有粉絲和說,最近在網(wǎng)上看到一些視頻營銷號(hào)一天能發(fā)布幾百條短視頻, 感覺是批量生成的,能不能用Python做個(gè)自動(dòng)化短視頻生成腳本呢?今天就帶大家一起實(shí)現(xiàn)熱門視頻批量流水線生產(chǎn)
    2021-09-09
  • python繼承和抽象類的實(shí)現(xiàn)方法

    python繼承和抽象類的實(shí)現(xiàn)方法

    這篇文章主要介紹了python繼承和抽象類的實(shí)現(xiàn)方法,實(shí)例分析了Python針對(duì)類的繼承及抽象類的定義及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • pycharm下載依賴一直失敗的問題踩坑指南

    pycharm下載依賴一直失敗的問題踩坑指南

    在使用pycharm學(xué)習(xí)python的時(shí)候,經(jīng)常需要第三方庫,沒有第三方庫程序就會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于pycharm下載依賴一直失敗的問題踩坑指南,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

大余县| 石屏县| 广州市| 聂荣县| 拜泉县| 赤城县| 栾城县| 宁国市| 巴东县| 青冈县| 峨山| 呼图壁县| 盘山县| 长白| 堆龙德庆县| 岐山县| 湘乡市| 辽宁省| 广灵县| 石阡县| 天镇县| 锦屏县| 龙州县| 卢龙县| 婺源县| 两当县| 赣榆县| SHOW| 桃江县| 康乐县| 普兰店市| 贵港市| 石柱| 原阳县| 新龙县| 阳城县| 桐柏县| 水城县| 石嘴山市| 乌兰察布市| 永德县|