YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Gemma-Embed Stage 1:自建中文向量編碼器
📋 專案概覽
Gemma-Embed 是基於 Google Gemma-3-1B 的自建向量編碼器,專為支援「向量反推文字」任務而設計。透過 LoRA 微調技術,我們構建了一個完全可控的潛在語義空間,為後續的向量逆向工程奠定基礎。
🔧 技術規格
- 基礎模型:
google/gemma-3-1b-pt - 微調架構:LoRA(Low-Rank Adaptation)
- Rank = 8
- 目標層:
q_proj和v_proj
- 輸出維度:1152 維向量(L2 正規化)
- 當前階段:✅ Phase 1 完成(無監督 SimCSE)
- 規劃階段:🔄 Phase 2 & 3 開發中
🎯 專案動機與技術背景
核心挑戰
在 Query Fan-Out 應用場景中,我們需要實現「向量到文字的反向推導」。然而,現有的商業嵌入模型(如 mxbai-embed、GTR-T5 等)存在以下限制:
- 黑盒潛在空間:無法透視內部語義結構
- 不可逆映射:難以從向量重構原始語義
- 語言特化不足:對中文語境優化有限
解決方案
採用 Gemma-3-1B 作為編碼器骨幹,通過階段性微調構建可控的語義向量空間:
- 完全透明:掌控模型內部機制
- 可逆設計:為向量反推提供技術基礎
- 中文優化:針對中文語料深度調優
🚀 Phase 1:無監督 SimCSE 實現
訓練配置
| 配置項目 | 詳細說明 |
|---|---|
| 語料來源 | text.txt |
| 語料構成 | 金融新聞標題、維基百科句子、技術 FAQ、常見問答 |
| 文本預處理 | UTF-8 編碼,單行單句,長度限制 ≤ 128 tokens |
| 損失函數 | InfoNCE Contrastive Loss |
| 溫度參數 | τ = 0.05(控制對比學習敏感度) |
| 批次大小 | 12 samples/batch |
| 訓練輪數 | 1 epoch |
| 學習率 | 1e-5(Adam 優化器) |
| 硬體需求 | 0.5 × NVIDIA H100 80GB |
| 訓練時長 | 約 40 分鐘 |
性能表現
評測基準:自建金融領域 STS(Semantic Textual Similarity)驗收資料集
| 評測指標 | 微調前 | 微調後 | 提升幅度 |
|---|---|---|---|
| 平均 Cosine 相似度 | - | - | +4~6 pts |
| 語義匹配準確度 | - | - | 顯著提升 |
💻 快速部署指南
環境要求
pip install transformers torch peft
模型載入與使用
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
import torch.nn.functional as F
# 模型配置
BASE_MODEL = "unsloth/gemma-3-1b-pt"
ADAPTER_MODEL = "ywchiu/gemma-embed-peft" # 替換為實際 repo 路徑
# 載入模型組件
tokenizer = AutoTokenizer.from_pretrained(ADAPTER_MODEL)
base_model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL,
device_map="auto",
torch_dtype=torch.float16 # 節省顯存
)
model = PeftModel.from_pretrained(
base_model,
ADAPTER_MODEL,
device_map="auto"
).eval()
def encode_sentences(sentences):
batch = tok(sentences, padding=True, truncation=True, return_tensors="pt").to(model.device)
with torch.no_grad():
out = model(base_model_output=False, **batch, output_hidden_states=True)
vec = out.hidden_states[-1][:, 0]
return F.normalize(vec, p=2, dim=-1)
# 使用範例
test_sentences = [
"台積電法說會重點摘要",
"TSMC earnings call highlights",
"S&P 500 指數收高",
"美股標普 500 上漲"
]
embeddings = encode_sentences(test_sentences)
print(f"輸出向量形狀: {embeddings.shape}") # torch.Size([4, 1152])
🗺 後續開發路線圖
Phase 2:監督式對比學習
- 目標:整合標註資料,提升特定領域性能
- 數據:金融問答對、語義相似度標註資料
- 預期效果:領域專用語義理解能力提升
Phase 3:多任務聯合訓練
- 目標:同時優化嵌入品質與可逆性
- 技術:結合重構損失與對比學習
- 應用:為 Query Fan-Out 提供完整技術支撐
📊 技術亮點
✅ 輕量化架構:1152 維向量,平衡性能與計算效率
✅ 中文優化:針對中文語義特性深度調優
✅ 完全可控:自主掌控模型與潛在空間
✅ 快速部署:支援 GPU/CPU 推理,易於集成
✅ 可擴展性:為後續階段開發預留接口
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support