सूत्र: cos(θ) = (A · B) / (||A|| × ||B||), जहां A · B डॉट प्रोडक्ट है और ||A||, ||B|| वेक्टर के परिमाण (लंबाई) हैं। परिमाण से विभाजित करके, cosine similarity केवल दिशा मापता है — एक वेक्टर [1, 2, 3] cosine similarity में [2, 4, 6] के समान है क्योंकि वे एक ही तरफ़ इशारा करते हैं। यह सामान्यीकरण इसलिए है कि cosine embeddings के लिए अच्छा काम करता है: दिशा अर्थ को एन्कोड करती है, जबकि परिमाण टेक्स्ट की लंबाई या मॉडल की विशेषताओं के आधार पर भिन्न हो सकता है।
यदि embeddings पहले से ही इकाई लंबाई (magnitude 1) तक सामान्यीकृत हैं, तो cosine similarity डॉट प्रोडक्ट के बराबर होती है — और डॉट प्रोडक्ट गणना करने में तेज़ है (कोई विभाजन नहीं)। अधिकांश embedding मॉडल ठीक इसी कारण सामान्यीकृत वेक्टर आउटपुट करते हैं। वेक्टर डेटाबेस का उपयोग करते समय, जांचें कि आपके embeddings सामान्यीकृत हैं या नहीं: यदि हां, तो डॉट प्रोडक्ट का उपयोग करें (तेज़)। यदि नहीं, तो cosine similarity का उपयोग करें (सामान्यीकरण की परवाह किए बिना सही)।
Cosine similarity सभी आयामों को समान रूप से मानता है, लेकिन कुछ embedding आयाम दूसरों से अधिक महत्वपूर्ण हो सकते हैं। यह समग्र दिशा समानता भी मापता है, जो सूक्ष्म अंतरों को चूक सकता है। "Python programming" और "Python the snake" के बारे में दो वाक्यों में मध्यम रूप से उच्च cosine similarity हो सकती है क्योंकि वे "Python" अवधारणा साझा करते हैं। अधिक परिष्कृत समानता माप (सीखे गए मीट्रिक, cross-encoder reranking) उच्च कम्प्यूटेशनल लागत पर बारीक भेद पकड़ सकते हैं।