|
文本是怎么生成 Embedding 的? 总体流程:
输入文本→ 用“Embedding模型”处理→ 输出一个向量(embedding)
比如 你输入一句话:“人工智能改变世界”,Embedding 模型会输出一个像这样的向量: [0.432,-0.115,...,0.981]
每个逗号分隔的部分就是一个纬度,这个向量通常是几百维,比如384维、768维),这个向量就代表了这句话在语义空间中的“位置”。
? 常用的通用技术 / 模型有哪些?
通用预训练Embedding模型(你可以直接用):
| | |
|---|
| Sentence-BERT (SBERT) | | | OpenAI Embedding 模型(如text-embedding-3-small) | | | | Cohere embeddings | | | | FastText | | | | Word2Vec / GloVe | | |
? 文本生成向量过程“人为干预”方式
1️⃣ 选择或训练不同模型(模型选择)
2️⃣ 修改输入方式(Prompt 工程)
你可以人为在文本前后加点提示词,引导模型“更好理解文本”: 原文本: “苹果是一种水果。” 改造后: “这是对一个水果的定义:苹果是一种水果。” 得到的Embedding可能更符合你想要的“知识类型”语义。 3️⃣ 微调模型(Fine-tuning)
⚠️微调成本高,通常需要GPU资源和一定技术门槛。 4️⃣ 归一化 / Pooling策略(技术性干预)
句子Embedding的最终向量,通常是由模型输出的多个 token 向量聚合(比如mean pooling)得到的。 你可以选: mean pooling(平均)
CLS token(BERT第一个位置)
max pooling
不同策略影响向量质量,可以做实验调优。
微调(Fine-tuning)Embedding模型可以让你在自己的数据上获得更有针对性的语义表示,尤其适合特定行业(法律、金融、医疗)或专属企业文档(客服聊天记录、产品文档等)等应用场景。 微调Embedding模型的整体流程
准备数据→选择模型→构建训练集(正负样本)→配置训练参数→开始训练→验证→部署
一、准备阶段
准备训练数据,你需要构建这样的语义匹配样本:
数据格式通常是: ? 推荐格式:JSONL(每行为一个训练样本) {"query":"退货流程","positive":"退货请在七天内完成申请","negative":"联系客服电话是400..."}
二、选择模型架构
推荐模型(适合微调的Embedding模型):
| | |
|---|
| Sentence-BERT (SBERT) | | | | MiniLM / BERT base | | | | OpenAI Embedding 模型 | | |
三、构建微调流程(以Sentence-BERT为例)
使用sentence-transformers(HuggingFace旗下)库: 1. 安装必要库pipinstallsentence-transformers 2.构造训练数据加载器 fromsentence_transformersimportSentenceTransformer, InputExample, lossesfromtorch.utils.dataimportDataLoader
# 示例数据train_examples = [ InputExample(texts=["退货流程","退货请在七天内完成申请"], label=1.0), InputExample(texts=["退货流程","联系客服电话是400..."], label=0.0),]
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=8)
3.加载预训练模型 model=SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')4.选择损失函数(多使用CosineSimilarityLoss) train_loss=losses.CosineSimilarityLoss(model=model) 5.微调训练 model.fit(train_objectives=[(train_dataloader,train_loss)],epochs=1,warmup_steps=100) 6.保存模型 model.save('my-custom-embedding-model')之后你就可以用这个模型来生成专属的Embedding向量了: model=SentenceTransformer('my-custom-embedding-model')embedding=model.encode("请问你们的营业时间是几点?")四、调优与验证
可以用以下方式验证微调后的效果:
|