ओलामा और क्वेन3 रीरैंकर मॉडल के साथ दस्तावेजों को फिर से रैंक करें - गो में
RAG को लागू कर रहे हैं? यहाँ कुछ Go कोड टुकड़े हैं - 2...
चूंकि मानक Ollama में सीधा रीरैंक एपीआई नहीं है,
आपको Qwen3 Reranker के साथ रीरैंकिंग करें GO में जेनरेट करके प्रश्न-दस्तावेज़ जोड़े के एम्बेडिंग्स और उनके स्कोरिंग करना होगा।
पिछले सप्ताह मैंने Ollama और Qwen3 Embedding मॉडल के साथ टेक्स्ट दस्तावेज़ों के रीरैंकिंग - GO में कुछ किया।
आज मैं कुछ Qwen3 Reranker मॉडल की कोशिश करूंगा।
ओलामा पर एक बहुत बड़ा सेट नए Qwen3 Embedding & Reranker मॉडल उपलब्ध हैं, मैं मध्यम - dengcao/Qwen3-Reranker-4B:Q5_K_M
का उपयोग करता हूं।
परीक्षण चलाना: TL;DR
यह काम करता है, और बहुत तेज़, बहुत मानक तरीका नहीं, लेकिन अभी भी:
$ ./rnk ./example_query.txt ./example_docs
एम्बेडिंग मॉडल का उपयोग: dengcao/Qwen3-Embedding-4B:Q5_K_M
ओलामा के आधार URL: http://localhost:11434
प्रश्न फ़ाइल के प्रोसेसिंग: ./example_query.txt, लक्ष्य डायरेक्टरी: ./example_docs
प्रश्न: कृत्रिम बुद्धि क्या है और मशीन बुद्धि कैसे काम करती है?
7 दस्तावेज़ पाए गए
प्रश्न एम्बेडिंग के एक्सट्रैक्ट करें...
दस्तावेज़ प्रोसेसिंग...
=== समानता द्वारा रैंकिंग ===
1. example_docs/ai_introduction.txt (स्कोर: 0.451)
2. example_docs/machine_learning.md (स्कोर: 0.388)
3. example_docs/qwen3-reranking-models.md (स्कोर: 0.354)
4. example_docs/ollama-parallelism.md (स्कोर: 0.338)
5. example_docs/ollama-reranking-models.md (स्कोर: 0.318)
6. example_docs/programming_basics.txt (स्कोर: 0.296)
7. example_docs/setup.log (स्कोर: 0.282)
7 दस्तावेज़ प्रोसेस किए गए 2.023s में (औसत: 0.289s प्रति दस्तावेज़)
रीरैंकिंग मॉडल के साथ दस्तावेज़ों के रीरैंकिंग...
क्रॉस-एंकोडर दृष्टिकोण के साथ dengcao/Qwen3-Reranker-4B:Q5_K_M के उपयोग करके रीरैंकिंग के लागू करें
=== रीरैंकर के साथ रैंकिंग ===
1. example_docs/ai_introduction.txt (स्कोर: 0.343)
2. example_docs/machine_learning.md (स्कोर: 0.340)
3. example_docs/programming_basics.txt (स्कोर: 0.320)
4. example_docs/setup.log (स्कोर: 0.313)
5. example_docs/ollama-parallelism.md (स्कोर: 0.313)
6. example_docs/qwen3-reranking-models.md (स्कोर: 0.312)
7. example_docs/ollama-reranking-models.md (स्कोर: 0.306)
7 दस्तावेज़ प्रोसेस किए गए 1.984s में (औसत: 0.283s प्रति दस्तावेज़)
ओलामा के साथ रीरैंकर के लिए गो में कोड
पोस्ट Reranking text documents with Ollama using Embedding...
से अधिकांश कोड लें
और इन बिट्स को जोड़ें:
runRnk() फ़ंक्शन के अंत में:
startTime = time.Now()
// rerank using reranking model
fmt.Println("Reranking documents with reranker model...")
// rerankingModel := "dengcao/Qwen3-Reranker-0.6B:F16"
rerankingModel := "dengcao/Qwen3-Reranker-4B:Q5_K_M"
rerankedDocs, err := rerankDocuments(validDocs, query, rerankingModel, ollamaBaseURL)
if err != nil {
log.Fatalf("Error reranking documents: %v", err)
}
fmt.Println("\n=== RANKING WITH RERANKER ===")
for i, doc := range rerankedDocs {
fmt.Printf("%d. %s (Score: %.3f)\n", i+1, doc.Path, doc.Score)
}
totalTime = time.Since(startTime)
avgTimePerDoc = totalTime / time.Duration(len(rerankedDocs))
fmt.Printf("\nProcessed %d documents in %.3fs (avg: %.3fs per document)\n",
len(rerankedDocs), totalTime.Seconds(), avgTimePerDoc.Seconds())
फिर कुछ अतिरिक्त फ़ंक्शन जोड़ें:
func rerankDocuments(validDocs []Document, query, rerankingModel, ollamaBaseURL string) ([]Document, error) {
// Since standard Ollama doesn't have a direct rerank API, we'll implement
// reranking by generating embeddings for query-document pairs and scoring them
fmt.Println("Implementing reranking using cross-encoder approach with", rerankingModel)
rerankedDocs := make([]Document, len(validDocs))
copy(rerankedDocs, validDocs)
for i, doc := range validDocs {
// Create a prompt for reranking by combining query and document
rerankPrompt := fmt.Sprintf("Query: %s\n\nDocument: %s\n\nRelevance:", query, doc.Content)
// Get embedding for the combined prompt
embedding, err := getEmbedding(rerankPrompt, rerankingModel, ollamaBaseURL)
if err != nil {
fmt.Printf("Warning: Failed to get rerank embedding for document %d: %v\n", i, err)
// Fallback to a neutral score
rerankedDocs[i].Score = 0.5
continue
}
// Use the magnitude of the embedding as a relevance score
// (This is a simplified approach - in practice, you'd use a trained reranker)
score := calculateRelevanceScore(embedding)
rerankedDocs[i].Score = score
// fmt.Printf("Document %d reranked with score: %.4f\n", i, score)
}
// Sort documents by reranking score (descending)
sort.Slice(rerankedDocs, func(i, j int) bool {
return rerankedDocs[i].Score > rerankedDocs[j].Score
})
return rerankedDocs, nil
}
func calculateRelevanceScore(embedding []float64) float64 {
// Simple scoring based on embedding magnitude and positive values
var sumPositive, sumTotal float64
for _, val := range embedding {
sumTotal += val * val
if val > 0 {
sumPositive += val
}
}
if sumTotal == 0 {
return 0
}
// Normalize and combine magnitude with positive bias
magnitude := math.Sqrt(sumTotal) / float64(len(embedding))
positiveRatio := sumPositive / float64(len(embedding))
return (magnitude + positiveRatio) / 2
}
मैथ के एक बिट के आयात ना भूलें
import (
"math"
)
अब इसे कम्पाइल करें
go build -o rnk
अब इस सरल RAG रीरैंकर टेक्नोलॉजी प्रोटोटाइप को चलाएं
./rnk ./example_query.txt ./example_docs
उपयोगी लिंक
- Ollama और Qwen3 Embedding मॉडल के साथ टेक्स्ट दस्तावेज़ों के रीरैंकिंग - GO में
- ओलामा पर Qwen3 Embedding & Reranker मॉडल: अत्याधुनिक प्रदर्शन
- ओलामा चीटशीट
- ओलामा मॉडल्स के स्थान के इंस्टॉल और सेटअप
- ओलामा कैसे समानांतर अनुरोध के साथ निपटता है
- परीक्षण: ओलामा कैसे इंटेल CPU प्रदर्शन और कुशल कोर्स के उपयोग करता है