mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-04 00:03:59 +00:00
refactor(clip): CLIP 收敛为稠密 MultimodalEmbedder,不污染稀疏 Vectorizer/TF-IDF 语义
文本相似度检索是层次化系统:TF-IDF 高频削弱加权(idf<0.1 丢弃)+ 倒排剪枝(只召回共享特征者)+ cosine。CLIP 512 维稠密向量若以 map[string]float64 稀疏形式实现 vector.Vectorizer 并塞进 vector.Store, 会让 512 维全部成为倒排 key → 候选集≈全库、剪枝失效,且绕过 TF-IDF 高频削弱,与既有文本检索语义错配。 收敛: - vector.MultimodalEmbedder 改为独立稠密接口(VectorizeDense/ EmbedImageDense/Fingerprint/Dim/Loaded/Close),不再继承稀疏 Vectorizer - clip.Embedder 删除稀疏垫片 Vectorize/EmbedImage/denseToVector, 只产出稠密向量;文档/知识/上下文层继续用 TF-IDF/fastText 稀疏路径 - 分层明确:文本→文本走 TF-IDF/fastText;文本↔图像、图像↔图像走 CLIP 稠密 QueryMedia(媒体层独立稠密余弦,原样保留)
This commit is contained in:
@ -4,12 +4,10 @@ package clip
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gitcode.com/JianFeeeee/HomeAgent/internal/memory/vector"
|
||||
)
|
||||
|
||||
// Embedder 在未启用 onnxruntime 时为 no-op 实现。
|
||||
// 构建时不链接 onnxruntime,default 构建保持原有 fastText/TF-IDF 行为不变。
|
||||
// 构建时不链接 onnxruntime,默认构建保持原有 fastText/TF-IDF 行为不变。
|
||||
type Embedder struct {
|
||||
loaded bool
|
||||
}
|
||||
@ -18,17 +16,13 @@ func New(_ string) (*Embedder, error) {
|
||||
return nil, fmt.Errorf("clip embedder requires build tag 'onnxruntime' (go build -tags onnxruntime)")
|
||||
}
|
||||
|
||||
func (e *Embedder) Fingerprint() string { return "" }
|
||||
func (e *Embedder) Dim() int { return 0 }
|
||||
func (e *Embedder) Loaded() bool { return e.loaded }
|
||||
func (e *Embedder) Vectorize(_ string) vector.Vector { return nil }
|
||||
func (e *Embedder) EmbedImage(_ []byte, _ string) (vector.Vector, error) {
|
||||
return nil, fmt.Errorf("clip embedder not available")
|
||||
}
|
||||
func (e *Embedder) Fingerprint() string { return "" }
|
||||
func (e *Embedder) Dim() int { return 0 }
|
||||
func (e *Embedder) Loaded() bool { return e.loaded }
|
||||
func (e *Embedder) Close() {}
|
||||
func (e *Embedder) VectorizeDense(_ string) ([]float64, error) {
|
||||
return nil, fmt.Errorf("clip embedder not available")
|
||||
}
|
||||
func (e *Embedder) EmbedImageDense(_ []byte, _ string) ([]float64, error) {
|
||||
return nil, fmt.Errorf("clip embedder not available")
|
||||
}
|
||||
func (e *Embedder) Close() {}
|
||||
|
||||
Reference in New Issue
Block a user