ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 核心概念
    • 1. 什么是句子嵌入?
  • 安装方法
  • 基本使用
    • 1. 加载预训练模型
    • 2. 生成句子嵌入
  • 常用预训练模型
  • 实际应用场景
    • 1. 语义相似度计算
    • 2. 语义搜索
  • 高级功能
    • 1. 自定义训练
    • 2. 多语言支持
  • 性能优化技巧

Sentence-Transformers 是一个用于生成句子和文本段落嵌入(embedding)的 Python 库,它能够将文本转换为高维向量,使计算机能够理解和比较文本的语义。

核心概念 #

1. 什么是句子嵌入? #

句子嵌入是将整个句子或文本段落转换为固定长度的向量(一组数字),这个向量能够捕捉句子的语义信息。相似的句子会有相似的向量表示。

安装方法 #

pip install sentence-transformers
# 如果需要GPU加速
pip install sentence-transformers[gpu]

基本使用 #

1. 加载预训练模型 #

from sentence_transformers import SentenceTransformer

# 加载预训练模型
model = SentenceTransformer('all-MiniLM-L6-v2')

2. 生成句子嵌入 #

sentences = ["这是一个示例句子", "这是另一个相似的句子"]

# 生成嵌入向量
embeddings = model.encode(sentences)
print(embeddings.shape)  # 输出: (2, 384) - 2个句子,每个384维向量

常用预训练模型 #

模型名称 维度 特点
all-MiniLM-L6-v2 384 小型高效模型
paraphrase-multilingual-MiniLM-L12-v2 384 支持多种语言
all-mpnet-base-v2 768 高质量英文模型

实际应用场景 #

1. 语义相似度计算 #

from sentence_transformers import util

# 计算两个句子的相似度
sent1 = "猫咪坐在垫子上"
sent2 = "一只猫在毯子上休息"
emb1 = model.encode(sent1)
emb2 = model.encode(sent2)

cosine_sim = util.cos_sim(emb1, emb2)
print(f"相似度得分: {cosine_sim.item():.4f}")

2. 语义搜索 #

corpus = ["狗是人类最好的朋友",
          "巴黎是法国的首都",
          "Python是一种编程语言"]
corpus_embeddings = model.encode(corpus)

query = "计算机使用的语言"
query_embedding = model.encode(query)

# 找到最相似的句子
hits = util.semantic_search(query_embedding, corpus_embeddings, top_k=1)
print(f"最相关的结果: {corpus[hits[0][0]['corpus_id']}")

高级功能 #

1. 自定义训练 #

from sentence_transformers import SentenceTransformer, InputExample, losses
from torch.utils.data import DataLoader

# 定义训练数据
train_examples = [
    InputExample(texts=['这是正样本1', '这是正样本2'], label=1.0),
    InputExample(texts=['这是负样本1', '不相关的句子'], label=0.0)
]

# 创建数据加载器
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16)

# 定义损失函数
train_loss = losses.CosineSimilarityLoss(model)

# 微调模型
model.fit(train_objectives=[(train_dataloader, train_loss)], epochs=5)

2. 多语言支持 #

# 加载多语言模型
multi_model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 支持多种语言的句子
sentences = ["Hello world", "Bonjour le monde", "你好世界"]
embeddings = multi_model.encode(sentences)

性能优化技巧 #

  1. 批量处理:一次处理多个句子效率更高

    embeddings = model.encode(sentences, batch_size=32)
  2. 量化:减少模型大小,提高速度

    model = SentenceTransformer('all-MiniLM-L6-v2', device='cpu')
    model.quantize()  # 量化模型
  3. GPU加速:

    model = SentenceTransformer('all-MiniLM-L6-v2', device='cuda')

访问验证

请输入访问令牌

Token不正确,请重新输入