33 पॉइंट द्वारा GN⁺ 2025-01-16 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • डेटा साइंटिस्ट हर चीज़ को vector में बदल देते हैं। यही AI की भाषा है
  • लेकिन cosine similarity को अंधाधुंध लागू करने से गलत दिशा में ले जाया जा सकता है
  • यह लेख समझाता है कि similarity का अधिक इरादतन उपयोग करके बेहतर परिणाम कैसे पाए जाएँ

Embeddings

  • embeddings, vectorized data representation हैं, जो entities के बीच संबंध दिखाने या समान items खोजने में बहुत उपयोगी हैं
  • उदाहरण के लिए, "brother" और "sister" का raw ID के रूप में कोई संबंध नहीं होता, लेकिन vectorization के बाद उनके semantic relationship को व्यक्त किया जा सकता है
  • vectors को machine learning models की input structure के रूप में इस्तेमाल किया जाता है, या अपने-आप में similarity search के लिए
  • बड़े language model (LLM) आधारित sentence embeddings, आज embeddings के सबसे लोकप्रिय उपयोगों में से एक हैं
    • model को fine-tune किए बिना भी ये text का सार पकड़ने लायक काफ़ी शक्तिशाली हैं
    • संबंधित शोध: Text Embeddings Reveal (Almost) As Much As Text, 2023
  • यह शक्ति data security और जानबूझकर, ज़िम्मेदार उपयोग की माँग करती है

उदाहरण: cosine similarity से वाक्यों की तुलना

  • तीन वाक्यों की तुलना
    • A: "Python can make you rich."
    • B: "Python can make you itch."
    • C: "Mastering Python can fill your pockets."
  • character-आधारित तुलना
    • raw strings की तुलना करने पर A और B में 2 characters का अंतर है, जबकि A और C में 21 characters का अंतर है
    • लेकिन अर्थ के हिसाब से A और C अधिक समान हैं (दोनों पैसे से संबंधित हैं)
  • vector-आधारित तुलना
    • OpenAI text-embedding-3-large का उपयोग करके इस तरह के embedding vectors बनाए गए:
      • A: [-0.003738, -0.033263, -0.017596, 0.029024, -0.015251, ...]
      • B: [-0.066795, -0.052274, -0.015973, 0.077706, 0.044226, ...]
      • C: [-0.011167, 0.017812, -0.018655, 0.006625, 0.018506, ...]
    • vector dimensions की संख्या: 3072 (लंबा है, लेकिन quality घटाए बिना reduce किया जा सकता है)
  • cosine similarity की गणना
    • A और C: 0.750 (semantic रूप से समान)
    • A और B: 0.576 (शाब्दिक रूप से समान)
    • निष्कर्ष: spelling की तुलना में meaning, similarity का अधिक महत्वपूर्ण तत्व है

cosine similarity क्या है?

  • cosine similarity दो vectors के बीच कोण के cosine की गणना करके समानता मापती है
  • vectors high-dimensional space में होते हैं, इसलिए सहज geometric समझ अक्सर काम नहीं करती
  • गणितीय रूप से यह normalized vectors का dot product है
  • मुख्य गुण:
    • एक जैसे vectors का मान 1 होता है
    • random vectors का मान 0 के क़रीब होता है (high dimensions में averaging effect के कारण)
    • परिणाम -1 से 1 के बीच होता है
  • यही सादगी भ्रामक हो सकती है
    • सिर्फ़ इसलिए कि मान 0 से 1 के बीच है, इसे probability या अर्थपूर्ण scale नहीं मान लेना चाहिए
      • उदाहरण: 0.6 का मान ज़रूरी नहीं कि strong similarity दर्शाए
    • negative values कभी-कभी semantic opposition दिखाती हैं
      • लेकिन ज़्यादातर मामलों में वे अर्थहीन या noise के क़रीब होती हैं
  • अगर Glove(glove.6B.300d) का उपयोग करके "dog" से मिलते-जुलते शब्द खोजे जाएँ:
    • पास के शब्द अपेक्षित हो सकते हैं
    • सबसे दूर के शब्द अक्सर अर्थहीन परिणाम देते हैं
  • cosine similarity एक "duct tape" की तरह है, जो सरल और तेज़ तरीके से अलग-अलग vectors की तुलना करने देती है
    • images, text, audio, code आदि की तुलना की जा सकती है
  • लेकिन यह केवल एक अस्थायी जुगाड़ है, जो गहरे मुद्दों को छिपा सकता है
    • जैसे duct tape से plumbing ठीक करना: भरोसेमंद नहीं और स्थायी भी नहीं
  • कभी-कभी cosine similarity प्रभावी लगती है, लेकिन जब यह विफल होती है तो कारण समझना कठिन होता है
    • तब अक्सर ad-hoc समाधान खोजे जाते हैं, जो नए मुद्दे पैदा कर सकते हैं

cosine similarity और correlation coefficient का संबंध

  • Pearson correlation coefficient की गणना तीन चरणों में होती है:
    • mean घटाकर data को center करना
    • vectors को unit vectors के रूप में normalize करना
    • दोनों vectors का dot product निकालना
  • जब vectors centered और normalized हों:
    • Pearson correlation coefficient = cosine similarity = dot product
  • व्यावहारिक उपयोग
    • हर pairwise comparison पर vectors को अलग से center या normalize नहीं किया जाता
      • इसके बजाय, पहले से processing करके सिर्फ़ dot product निकाला जाता है
    • जहाँ cosine similarity का उपयोग हो सकता है, वहाँ Pearson correlation coefficient भी उसी तरह उपयोग किया जा सकता है
      • दोनों metrics व्यवहार में काफ़ी हद तक एक ही संदर्भ में काम आते हैं

similarity metric के रूप में cosine similarity इस्तेमाल करने की समस्याएँ

  • cosine similarity को machine learning model के training objective के रूप में इस्तेमाल करना गणितीय रूप से वैध है
  • समस्या cosine similarity की उपयुक्तता से आगे वाले हिस्से में पैदा होती है:
    • जब model को train करने में इस्तेमाल हुई loss function, cosine similarity नहीं हो
    • जब training objective, वास्तविक application की ज़रूरतों से अलग हो
  • आम तौर पर models को unnormalized vectors पर train किया जाता है:
    • उदाहरण: dot product आधारित probability prediction और logistic loss function का उपयोग
    • कुछ models Euclidean distance को minimize करके एक ही class के items को पास लाना सीखते हैं
  • normalization गणितीय गुण देता है (जैसे परिणाम को -1 और 1 के बीच सीमित करना), लेकिन यह एक "जुगाड़" भी हो सकता है
  • केवल वे models सुरक्षित रूप से उपयोग किए जा सकते हैं जिन्हें cosine similarity या उसके direct function पर train किया गया हो
  • भले ही model को स्पष्ट रूप से cosine similarity पर train किया गया हो, similarity की परिभाषा फिर भी अस्पष्ट हो सकती है:
    • साहित्य समीक्षक: साझा themes
    • पुस्तकालयाध्यक्ष: genre classification
    • पाठक: भावनात्मक प्रतिक्रिया
    • typesetter: pages की संख्या और format
  • cosine similarity इन अलग-अलग परिभाषाओं को एक ही संख्या में समेट देती है, जिससे भ्रम पैदा हो सकता है
  • उदाहरण: "espresso" और "cappuccino"
    • word2vec इन दोनों शब्दों को लगभग एक जैसा मानता है (अमेरिकी संदर्भ में)
    • लेकिन इटली में इन्हें एक जैसा नहीं माना जाएगा

जब cosine similarity विफल होती है

  • एक सरल उदाहरण: चाबियाँ खोजने वाला सवाल
    • सवाल: "What did I do with my keys?"
    • तुलना के लिए वाक्य:
      • "I left them in my pocket"
      • "They are on the table"
      • "What did I put my wallet?"
      • "What I did to my life?"
  • समस्या
    • cosine similarity से मिले परिणाम में:
      • सबसे नज़दीकी वाक्य उचित उत्तर की जगह एक और सवाल निकला ("What I did to my life?")
      • यानी यह semantic relevance के बजाय सिर्फ़ sentence structure की समानता पर निर्भर रहा
    • Python से संबंधित वाक्यों का similarity score लगभग 0 के क़रीब आता है, जिससे उनकी असंबद्धता सही तरह दिखती है
  • वास्तविक दुनिया की सीमाएँ
    • वास्तविक अनुप्रयोगों में हज़ारों documents से काम करना पड़ता है
      • context window से बड़े datasets में यह noise के प्रति और अधिक संवेदनशील हो जाता है
    • dataset जितना बड़ा होगा, similarity score उतना ही high-dimensional roulette game जैसा व्यवहार कर सकता है

cosine similarity की जगह कौन-से विकल्प इस्तेमाल किए जा सकते हैं?

सबसे शक्तिशाली तरीका

  • LLM query का उपयोग:
    • दो items की तुलना के लिए एक शक्तिशाली language model का उपयोग
    • उदाहरण: "Is {sentence_a} a plausible answer to {sentence_b}?"
    • LLM meaningful comparison कर सकता है:
      • साधारण प्रश्न और उत्तर में अंतर
      • परिणाम को JSON जैसे structured format में देना
    • लेकिन dataset बड़ा हो तो यह inefficient और महँगा है

embeddings का optimization

  • task-specific embeddings बनाना:
    • मौजूदा model weights को समायोजित करने वाला fine-tuning
    • model के ज्ञान का उपयोग कर नए, केंद्रित embeddings बनाने वाला transfer learning
  • symmetric similarity:
    • "क्या A और B समान हैं?" जैसे सवाल को vector space में व्यक्त करना
    • अनावश्यक dimensions घटाकर सिर्फ़ relevant features रखना
  • asymmetric similarity:
    • उदाहरण: "क्या document B, question A का सही उत्तर है?" को probability के रूप में व्यक्त करना
    • query और key, दोनों के लिए अलग specialized spaces में बदलना

prompt engineering

  • context सेट करने के लिए prompt जोड़ना:
    • उदाहरण: "Nationality of {person}" से nationality-संबंधित context को उभारना
    • साधारण prompt के बजाय अधिक विशिष्ट वाक्य इस्तेमाल करना:
      • "This is a country that has produced many influential historical figures, including {person}"
    • इससे result quality काफ़ी बेहतर होती है, लेकिन यह पूर्ण समाधान नहीं है

text rewriting और context extraction

  • embedding से पहले text preprocessing:
    • "निम्न text को standard English में 200 शब्दों से कम में summarize करें" जैसे सरल prompt से सतही समानताओं को हटाया जा सकता है
    • typos, formatting जैसी अनावश्यक औपचारिक चीज़ों को नज़रअंदाज़ कर content पर फ़ोकस
  • structured context बनाना:
    • customer conversations को summarize करके स्पष्ट requirements और issues निकालना:
      • "इस बातचीत को summarize करके अधिकतम 10 Markdown points में लिखें"
    • pages को भी उसी format में बदलकर अधिक सटीक matching संभव बनती है

निष्कर्ष

  • ये अलग-अलग वैकल्पिक तरीके cosine similarity की कमियों की भरपाई करते हैं और अधिक भरोसेमंद परिणाम देते हैं
  • अपने project की स्थिति के अनुसार उपयुक्त तरीका चुनकर लागू करना चाहिए

सारांश

  • cosine similarity की सीमाएँ:
    • cosine similarity -1 से 1 के बीच मान देती है, लेकिन इसे probability नहीं माना जाना चाहिए
    • अधिकांश models को cosine similarity को लक्ष्य बनाकर train नहीं किया जाता, इसलिए परिणाम सिर्फ़ एक अप्रमाणित correlation हो सकता है
    • भले ही model ने cosine similarity सीखी हो, यह समझना ज़रूरी है कि उसकी similarity की परिभाषा हमारी ज़रूरतों से मेल खाती है या नहीं
  • vector similarity का प्रभावी उपयोग कैसे करें:
    • अपने data के लिए विशेष embeddings को train करें
    • relevant पहलुओं पर केंद्रित prompts डिज़ाइन करें
    • embeddings से पहले text को साफ़ और standardize करें

2 टिप्पणियां

 
mhj5730 2025-01-20

वाकई शानदार सामग्री का संकलन है।

 
GN⁺ 2025-01-16
Hacker News राय
  • cosine similarity का उपयोग करने वाले RAG applications में परिणामों को फिर से रैंक करने के लिए "semantic re-ranker" या "L2 re-ranking model" का उपयोग करना बेहतर है

    • pgvector-python के उदाहरण में re-ranking के लिए cross-encoder model का उपयोग किया जाता है
    • language model का उपयोग करके भी re-ranking किया जा सकता है, लेकिन re-ranking के लिए विशेष रूप से बने model की तुलना में इसकी performance कम हो सकती है
    • Azure RAG approach में Bing द्वारा search results को फिर से रैंक करने के लिए उपयोग किए जाने वाले AI Search semantic ranker का उपयोग किया जाता है
  • word vectors उस समस्या को हल करते हैं जिसमें दो शब्द एक ही context में दिखाई न देने पर भी मज़बूती से संबंधित हो सकते हैं

    • "Python" और "Ruby" एक ही context में दिखाई नहीं दे सकते, लेकिन "scripting" दोनों के context में मिल सकता है
    • हालांकि, curse of dimensionality की वजह से यह अक्सर अच्छी तरह काम नहीं करता
    • word embeddings को vector की जगह vertices के रूप में व्यक्त किया जा सकता है या नहीं, इस बारे में एक विचार प्रस्तुत किया गया
  • अमेरिका में word2vec espresso और cappuccino को लगभग समान मान सकता है, लेकिन इटली में ऐसा नहीं है

    • LLM query का सीधे उपयोग करके दो items की तुलना करना सबसे अच्छा approach है
    • LLM "मैंने बटुआ कहाँ रखा?" और "मैंने चाबी कहाँ रखी?" को बहुत समान मान सकता है
  • cosine similarity का उपयोग अधिकांश deep learning आधारित semantic search में किया जाता है

    • SentenceTransformers जैसे models को cosine similarity का उपयोग करने के लिए train किया जाता है
    • image की vector representation के लिए CLIP जैसे models भी cosine similarity का उपयोग करते हैं
  • LLM query का सीधे उपयोग करके दो items की तुलना करना सबसे शक्तिशाली approach है

    • Cross encoder बेहतरीन performance वाला और तेज़ solution है
  • HyDE एक ऐसा तरीका है जिसमें प्रश्न के लिए एक hypothetical answer बनाया जाता है और similarity की तुलना की जाती है

    • chunks के format को standardize करना और उसी format में hypothetical answer बनाना बेहतर तरीका है
  • cosine similarity और top-k RAG अब पुराने लगते हैं

    • cosine similarity सिर्फ डेटा का एक आकस्मिक गुण है
    • नए embedding models को similarity measure के रूप में cosine similarity का उपयोग करने के लिए train किया जाता है
  • RAG approach आज़माने के बाद निराशा महसूस हुई, और ऐसा लगता है कि model को training के दौरान RAG करने में सक्षम बनाने के लिए उसे संरचित किया जाना चाहिए

    • training data modeling को इस तरह बेहतर किया जा सकता है कि model embedding, format, और retrieval process को परिभाषित करे
  • 3D graphics और physics में importance और accuracy स्पष्ट होते हैं, लेकिन machine learning में vector space बहुत ज़्यादा चीज़ों का प्रतिनिधित्व करता है, इसलिए dot product का उपयोग अस्पष्ट लगता है