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

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

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

sentence_transformers 是一個用于生成句子、段落或圖像的高質(zhì)量嵌入(embeddings)的 Python 庫,基于 Hugging Face 的 transformers 庫。它通過預(yù)訓(xùn)練的 Transformer 模型(如 BERT、RoBERTa、DistilBERT 等)生成固定長度的密集向量表示,廣泛應(yīng)用于自然語言處理(NLP)任務(wù),如語義搜索、文本相似性比較、聚類、釋義挖掘等。以下是對 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 需安裝對應(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(用于重新排序或相似性評分)。

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 個句子,每個嵌入 384 維
# 計算相似性
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 是一個輕量高效的預(yù)訓(xùn)練模型,生成 384 維嵌入。
  • model.encode() 將文本轉(zhuǎn)換為嵌入(numpy 數(shù)組或 tensor)。
  • model.similarity() 計算嵌入之間的余弦相似度(或其他相似性度量)。

帶提示(Prompt)的高級用法
某些模型支持在推理時添加提示以優(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 用于對句子對進(jìn)行直接評分,適合需要高精度的任務(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."
]
# 計算評分
scores = model.predict([(query, passage) for passage in passages])
print(scores)  # 輸出: [0.0123, 0.9987, 0.3456](示例分?jǐn)?shù))

說明

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

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

sentence_transformers 提供超過 10,000 個預(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)練示例

以下是一個微調(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)練樣本,包含句子對和標(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)化句子對的余弦相似度。
  • TripletLoss:基于三元組(錨點、正例、負(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)練和推理時添加提示以提升性能。
  • PEFT 支持:自 v3.3.0 起支持參數(shù)高效微調(diào)(Parameter-Efficient Fine-Tuning)。
  • NanoBEIR 評估:用于快速評估信息檢索性能。

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ù)計算并存儲常用文本的嵌入,減少重復(fù)計算。

7.實際應(yī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 模型實現(xiàn)文本-圖像搜索。
  • 問答系統(tǒng):結(jié)合 CrossEncoder 進(jìn)行檢索和重排序。

8.與 LangChain 集成

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

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)建向量存儲
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.注意事項

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

10.綜合示例

以下是一個綜合示例,結(jié)合嵌入生成、相似性計算和 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."
]
# 生成嵌入并計算相似度
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

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

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

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

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

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

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

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

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

    這篇文章主要介紹了使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)做人臉識別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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ù)庫(實例講解)

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

    下面小編就為大家?guī)硪黄狿ython3操作SQL Server數(shù)據(jù)庫(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    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ù)遇到的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python自動化短視頻生成腳本實現(xiàn)熱門視頻流水線生產(chǎn)

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

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

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

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

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

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

最新評論

年辖:市辖区| 遂昌县| 巴彦县| 阿拉善右旗| 和平县| 集贤县| 沾化县| 蒙山县| 昭通市| 台南县| 普陀区| 阿克苏市| 奉化市| 随州市| 宝应县| 宿迁市| 富蕴县| 嵊州市| 会泽县| 连山| 澄江县| 桐庐县| 镇沅| 正安县| 淄博市| 钦州市| 乌恰县| 兴山县| 林口县| 石台县| 曲阳县| 宁强县| 阜宁县| 项城市| 汝州市| 宣化县| 中牟县| 常山县| 无棣县| 揭西县| 玉树县|