mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 16:36:21 +02:00
1076 lines
103 KiB
Markdown
1076 lines
103 KiB
Markdown
|
|
---
|
||
|
|
layout: default
|
||
|
|
title: "OntoRAG: ज्ञान निष्कर्षण और क्वेरी के लिए ऑन्टोलॉजी-आधारित तकनीकी विनिर्देश"
|
||
|
|
parent: "Hindi (Beta)"
|
||
|
|
---
|
||
|
|
|
||
|
|
# OntoRAG: ज्ञान निष्कर्षण और क्वेरी के लिए ऑन्टोलॉजी-आधारित तकनीकी विनिर्देश
|
||
|
|
|
||
|
|
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
|
||
|
|
|
||
|
|
## अवलोकन
|
||
|
|
|
||
|
|
OntoRAG एक ऑन्टोलॉजी-संचालित ज्ञान निष्कर्षण और क्वेरी प्रणाली है जो असंरचित पाठ से ज्ञान त्रिक के निष्कर्षण और परिणामी ज्ञान ग्राफ की क्वेरी दोनों के दौरान सख्त सिमेंटिक स्थिरता लागू करती है। GraphRAG के समान, लेकिन औपचारिक ऑन्टोलॉजी बाधाओं के साथ, OntoRAG यह सुनिश्चित करता है कि सभी निकाले गए त्रिक पूर्वनिर्धारित ऑन्टोलॉजिकल संरचनाओं का पालन करते हैं और सिमेंटिक रूप से जागरूक क्वेरी क्षमताओं को प्रदान करता है।
|
||
|
|
|
||
|
|
सिस्टम निष्कर्षण और क्वेरी दोनों कार्यों के लिए प्रासंगिक ऑन्टोलॉजी उपसमुच्चय को गतिशील रूप से चुनने के लिए वेक्टर समानता मिलान का उपयोग करता है, जो केंद्रित और प्रासंगिक प्रसंस्करण को सक्षम करता है जबकि सिमेंटिक वैधता बनाए रखता है।
|
||
|
|
|
||
|
|
**सेवा का नाम**: `kg-extract-ontology`
|
||
|
|
|
||
|
|
## लक्ष्य
|
||
|
|
|
||
|
|
**ऑन्टोलॉजी-अनुरूप निष्कर्षण**: सुनिश्चित करें कि सभी निकाले गए त्रिक लोड की गई ऑन्टोलॉजी का सख्ती से पालन करते हैं।
|
||
|
|
**गतिशील संदर्भ चयन**: प्रत्येक खंड के लिए प्रासंगिक ऑन्टोलॉजी उपसमुच्चय का चयन करने के लिए एम्बेडिंग का उपयोग करें।
|
||
|
|
**सिमेंटिक स्थिरता**: वर्ग पदानुक्रम, संपत्ति डोमेन/रेंज और बाधाओं को बनाए रखें।
|
||
|
|
**कुशल प्रसंस्करण**: तेज़ ऑन्टोलॉजी तत्व मिलान के लिए इन-मेमोरी वेक्टर स्टोर का उपयोग करें।
|
||
|
|
**स्केलेबल आर्किटेक्चर**: विभिन्न डोमेन वाली कई समवर्ती ऑन्टोलॉजी का समर्थन करें।
|
||
|
|
|
||
|
|
## पृष्ठभूमि
|
||
|
|
|
||
|
|
वर्तमान ज्ञान निष्कर्षण सेवाएं (`kg-extract-definitions`, `kg-extract-relationships`) औपचारिक बाधाओं के बिना काम करती हैं, जिससे असंगत या असंगत त्रिक उत्पन्न हो सकते हैं। OntoRAG इस समस्या को हल करता है:
|
||
|
|
|
||
|
|
1. औपचारिक ऑन्टोलॉजी लोड करना जो मान्य वर्ग और गुण परिभाषित करते हैं।
|
||
|
|
2. पाठ सामग्री को प्रासंगिक ऑन्टोलॉजी तत्वों से मिलाने के लिए एम्बेडिंग का उपयोग करना।
|
||
|
|
3. निष्कर्षण को केवल ऑन्टोलॉजी-अनुरूप त्रिक उत्पन्न करने तक सीमित करना।
|
||
|
|
4. निकाले गए ज्ञान का सिमेंटिक सत्यापन प्रदान करना।
|
||
|
|
|
||
|
|
यह दृष्टिकोण औपचारिक ज्ञान प्रतिनिधित्व की कठोरता के साथ तंत्रिका निष्कर्षण की लचीलापन को जोड़ता है।
|
||
|
|
|
||
|
|
## तकनीकी डिजाइन
|
||
|
|
|
||
|
|
### आर्किटेक्चर
|
||
|
|
|
||
|
|
OntoRAG सिस्टम में निम्नलिखित घटक शामिल हैं:
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────┐
|
||
|
|
│ Configuration │
|
||
|
|
│ Service │
|
||
|
|
└────────┬────────┘
|
||
|
|
│ Ontologies
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ kg-extract- │────▶│ Embedding │
|
||
|
|
│ ontology │ │ Service │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│ │
|
||
|
|
▼ ▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ In-Memory │◀────│ Ontology │
|
||
|
|
│ Vector Store │ │ Embedder │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ Sentence │────▶│ Chunker │
|
||
|
|
│ Splitter │ │ Service │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ Ontology │────▶│ Vector │
|
||
|
|
│ Selector │ │ Search │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ Prompt │────▶│ Prompt │
|
||
|
|
│ Constructor │ │ Service │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐
|
||
|
|
│ Triple Output │
|
||
|
|
└─────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
### घटक विवरण
|
||
|
|
|
||
|
|
#### 1. ऑन्टोलॉजी लोडर
|
||
|
|
|
||
|
|
**उद्देश्य**: इवेंट-ड्रिवेन अपडेट का उपयोग करके, कॉन्फ़िगरेशन सेवा से ऑन्टोलॉजी कॉन्फ़िगरेशन प्राप्त करता है और पार्स करता है।
|
||
|
|
|
||
|
|
**कार्यान्वयन**:
|
||
|
|
ऑन्टोलॉजी लोडर, इवेंट-ड्रिवेन ऑन्टोलॉजी कॉन्फ़िगरेशन अपडेट प्राप्त करने के लिए ट्रस्टग्राफ के कॉन्फ़िगपुश क्यू का उपयोग करता है। जब "ऑन्टोलॉजी" प्रकार का कोई कॉन्फ़िगरेशन तत्व जोड़ा या संशोधित किया जाता है, तो लोडर कॉन्फ़िग-अपडेट क्यू के माध्यम से अपडेट प्राप्त करता है और मेटाडेटा, क्लास, ऑब्जेक्ट प्रॉपर्टी और डेटाटाइप प्रॉपर्टी युक्त JSON संरचना को पार्स करता है। इन पार्स किए गए ऑन्टोलॉजी को संरचित ऑब्जेक्ट के रूप में मेमोरी में संग्रहीत किया जाता है, जिन्हें निष्कर्षण प्रक्रिया के दौरान कुशलतापूर्वक एक्सेस किया जा सकता है।
|
||
|
|
|
||
|
|
**मुख्य कार्य**:
|
||
|
|
ऑन्टोलॉजी-प्रकार कॉन्फ़िगरेशन के लिए कॉन्फ़िग-अपडेट क्यू की सदस्यता लें
|
||
|
|
JSON ऑन्टोलॉजी संरचनाओं को ऑन्टोलॉजीक्लास और ऑन्टोलॉजीप्रॉपर्टी ऑब्जेक्ट में पार्स करें
|
||
|
|
ऑन्टोलॉजी संरचना और स्थिरता को मान्य करें
|
||
|
|
तेज़ एक्सेस के लिए पार्स किए गए ऑन्टोलॉजी को मेमोरी में कैश करें
|
||
|
|
फ्लो-विशिष्ट वेक्टर स्टोर के साथ प्रति-फ्लो प्रोसेसिंग को संभालें
|
||
|
|
|
||
|
|
**कार्यान्वयन स्थान**: `trustgraph-flow/trustgraph/extract/kg/ontology/ontology_loader.py`
|
||
|
|
|
||
|
|
#### 2. ऑन्टोलॉजी एम्बेडर
|
||
|
|
|
||
|
|
**उद्देश्य**: सभी ऑन्टोलॉजी तत्वों के लिए वेक्टर एम्बेडिंग बनाता है ताकि सिमेंटिक समानता मिलान को सक्षम किया जा सके।
|
||
|
|
|
||
|
|
**कार्यान्वयन**:
|
||
|
|
ऑन्टोलॉजी एम्बेडर, लोड किए गए ऑन्टोलॉजी (क्लास, ऑब्जेक्ट प्रॉपर्टी और डेटाटाइप प्रॉपर्टी) में प्रत्येक तत्व को संसाधित करता है और एम्बेडिंगक्लाइंटस्पेसिफिकेशन सेवा का उपयोग करके वेक्टर एम्बेडिंग उत्पन्न करता है। प्रत्येक तत्व के लिए, यह तत्व की पहचानकर्ता, लेबल और विवरण (टिप्पणी) को मिलाकर एक टेक्स्ट प्रतिनिधित्व बनाता है। इस टेक्स्ट को तब एक उच्च-आयामी वेक्टर एम्बेडिंग में परिवर्तित किया जाता है जो इसके सिमेंटिक अर्थ को कैप्चर करता है। ये एम्बेडिंग, तत्व प्रकार, स्रोत ऑन्टोलॉजी और पूर्ण परिभाषा के बारे में मेटाडेटा के साथ, प्रति-फ्लो इन-मेमोरी FAISS वेक्टर स्टोर में संग्रहीत किए जाते हैं। एम्बेडर स्वचालित रूप से पहले एम्बेडिंग प्रतिक्रिया से एम्बेडिंग आयाम का पता लगाता है।
|
||
|
|
|
||
|
|
**मुख्य कार्य**:
|
||
|
|
तत्व आईडी, लेबल और टिप्पणियों से टेक्स्ट प्रतिनिधित्व बनाएं
|
||
|
|
बैच प्रोसेसिंग के लिए asyncio.gather का उपयोग करके एम्बेडिंगक्लाइंटस्पेसिफिकेशन के माध्यम से एम्बेडिंग उत्पन्न करें
|
||
|
|
व्यापक मेटाडेटा के साथ FAISS वेक्टर स्टोर में एम्बेडिंग संग्रहीत करें
|
||
|
|
कुशल पुनर्प्राप्ति के लिए ऑन्टोलॉजी, तत्व प्रकार और तत्व आईडी द्वारा अनुक्रमित करें
|
||
|
|
वेक्टर स्टोर इनिशियलाइज़ेशन के लिए एम्बेडिंग आयामों का स्वचालित रूप से पता लगाएं
|
||
|
|
स्वतंत्र वेक्टर स्टोर के साथ प्रति-फ्लो एम्बेडिंग मॉडल को संभालें
|
||
|
|
|
||
|
|
**कार्यान्वयन स्थान**: `trustgraph-flow/trustgraph/extract/kg/ontology/ontology_embedder.py`
|
||
|
|
|
||
|
|
#### 3. टेक्स्ट प्रोसेसर (वाक्य विभाजक)
|
||
|
|
|
||
|
|
**उद्देश्य**: सटीक ऑन्टोलॉजी मिलान के लिए टेक्स्ट चंक्स को बारीक खंडों में विघटित करता है।
|
||
|
|
|
||
|
|
**कार्यान्वयन**:
|
||
|
|
टेक्स्ट प्रोसेसर, वाक्य टोकनाइजेशन और POS टैगिंग के लिए NLTK का उपयोग करता है ताकि आने वाले टेक्स्ट चंक्स को वाक्यों में तोड़ा जा सके। यह NLTK संस्करण अनुकूलता को संभालने के लिए `punkt_tab` और `averaged_perceptron_tagger_eng` डाउनलोड करने का प्रयास करता है, और यदि आवश्यक हो तो पुराने संस्करणों पर वापस आ जाता है। प्रत्येक टेक्स्ट चंक को व्यक्तिगत वाक्यों में विभाजित किया जाता है जिन्हें स्वतंत्र रूप से ऑन्टोलॉजी तत्वों के खिलाफ मिलान किया जा सकता है।
|
||
|
|
|
||
|
|
**मुख्य कार्य**:
|
||
|
|
NLTK वाक्य टोकनाइजेशन का उपयोग करके टेक्स्ट को वाक्यों में विभाजित करें
|
||
|
|
NLTK संस्करण अनुकूलता को संभालें (punkt_tab बनाम punkt)
|
||
|
|
टेक्स्ट और स्थिति जानकारी के साथ TextSegment ऑब्जेक्ट बनाएं
|
||
|
|
पूर्ण वाक्यों और व्यक्तिगत चंक्स दोनों का समर्थन करें
|
||
|
|
|
||
|
|
**कार्यान्वयन स्थान**: `trustgraph-flow/trustgraph/extract/kg/ontology/text_processor.py`
|
||
|
|
|
||
|
|
#### 4. ऑन्टोलॉजी चयनकर्ता
|
||
|
|
|
||
|
|
**उद्देश्य**: वर्तमान टेक्स्ट चंक के लिए सबसे प्रासंगिक ऑन्टोलॉजी तत्वों का सबसे उपयुक्त उपसमुच्चय की पहचान करता है।
|
||
|
|
|
||
|
|
**कार्यान्वयन**:
|
||
|
|
ऑन्टोलॉजी चयनकर्ता, FAISS वेक्टर समानता खोज का उपयोग करके टेक्स्ट सेगमेंट और ऑन्टोलॉजी तत्वों के बीच सिमेंटिक मिलान करता है। प्रत्येक टेक्स्ट चंक से प्रत्येक वाक्य के लिए, यह एक एम्बेडिंग उत्पन्न करता है और कॉन्फ़िगर करने योग्य थ्रेसहोल्ड (डिफ़ॉल्ट 0.3) के साथ कोसाइन समानता का उपयोग करके वेक्टर स्टोर में सबसे समान ऑन्टोलॉजी तत्वों की खोज करता है। सभी प्रासंगिक तत्वों को एकत्र करने के बाद, यह व्यापक निर्भरता संकल्प करता है: यदि कोई क्लास का चयन किया जाता है, तो उसके पैरेंट क्लास शामिल होते हैं; यदि कोई प्रॉपर्टी का चयन किया जाता है, तो उसके डोमेन और रेंज क्लास जोड़े जाते हैं। इसके अतिरिक्त, प्रत्येक चयनित क्लास के लिए, यह स्वचालित रूप से **सभी प्रॉपर्टी को शामिल करता है जो उस क्लास को उनके डोमेन या रेंज में संदर्भित करती हैं**। यह सुनिश्चित करता है कि निष्कर्षण के पास सभी प्रासंगिक संबंध प्रॉपर्टी तक पहुंच है।
|
||
|
|
|
||
|
|
**मुख्य कार्य:**
|
||
|
|
प्रत्येक पाठ खंड के लिए एम्बेडिंग उत्पन्न करें (वाक्य)
|
||
|
|
FAISS वेक्टर स्टोर में k-निकटतम पड़ोसी खोज करें (top_k=10, threshold=0.3)
|
||
|
|
कमजोर मिलानों को फ़िल्टर करने के लिए समानता सीमा लागू करें
|
||
|
|
निर्भरताएँ हल करें (पैरेंट क्लास, डोमेन, रेंज)
|
||
|
|
**चयनित कक्षाओं से संबंधित सभी गुणों को स्वचालित रूप से शामिल करें** (डोमेन/रेंज मिलान)
|
||
|
|
सभी आवश्यक संबंधों के साथ सुसंगत ऑन्टोलॉजी उपसमुच्चय बनाएं
|
||
|
|
ऐसे तत्व डुप्लिकेट करें जो कई बार दिखाई देते हैं
|
||
|
|
|
||
|
|
**कार्यान्वयन स्थान:** `trustgraph-flow/trustgraph/extract/kg/ontology/ontology_selector.py`
|
||
|
|
|
||
|
|
#### 5. प्रॉम्प्ट निर्माण
|
||
|
|
|
||
|
|
**उद्देश्य:** संरचित प्रॉम्प्ट बनाता है जो LLM को केवल ऑन्टोलॉजी-अनुरूप ट्रिपल निकालने के लिए मार्गदर्शन करता है।
|
||
|
|
|
||
|
|
**कार्यान्वयन:**
|
||
|
|
निष्कर्षण सेवा एक Jinja2 टेम्पलेट का उपयोग करती है जिसे `ontology-prompt.md` से लोड किया जाता है जो LLM निष्कर्षण के लिए ऑन्टोलॉजी उपसमुच्चय और पाठ को प्रारूपित करता है। टेम्पलेट गतिशील रूप से Jinja2 सिंटैक्स का उपयोग करके कक्षाओं, ऑब्जेक्ट गुणों और डेटाटाइप गुणों पर पुनरावृति करता है, प्रत्येक को उनके विवरण, डोमेन, रेंज और पदानुक्रमित संबंधों के साथ प्रस्तुत करता है। प्रॉम्प्ट में केवल प्रदान किए गए ऑन्टोलॉजी तत्वों का उपयोग करने के बारे में सख्त नियम शामिल हैं और सुसंगत पार्सिंग के लिए JSON आउटपुट प्रारूप का अनुरोध करता है।
|
||
|
|
|
||
|
|
**मुख्य कार्य:**
|
||
|
|
ऑन्टोलॉजी तत्वों पर लूप के साथ Jinja2 टेम्पलेट का उपयोग करें
|
||
|
|
पैरेंट रिलेशनशिप (subclass_of) और टिप्पणियों के साथ कक्षाओं को प्रारूपित करें
|
||
|
|
डोमेन/रेंज बाधाओं और टिप्पणियों के साथ गुणों को प्रारूपित करें
|
||
|
|
स्पष्ट निष्कर्षण नियमों और आउटपुट प्रारूप आवश्यकताओं को शामिल करें
|
||
|
|
"extract-with-ontologies" टेम्पलेट आईडी के साथ प्रॉम्प्ट सेवा को कॉल करें
|
||
|
|
|
||
|
|
**टेम्पलेट स्थान:** `ontology-prompt.md`
|
||
|
|
**कार्यान्वयन स्थान:** `trustgraph-flow/trustgraph/extract/kg/ontology/extract.py` (build_extraction_variables विधि)
|
||
|
|
|
||
|
|
#### 6. मुख्य निष्कर्षण सेवा
|
||
|
|
|
||
|
|
**उद्देश्य:** एंड-टू-एंड ऑन्टोलॉजी-आधारित ट्रिपल निष्कर्षण करने के लिए सभी घटकों का समन्वय करें।
|
||
|
|
|
||
|
|
**कार्यान्वयन:**
|
||
|
|
मुख्य निष्कर्षण सेवा (KgExtractOntology) ऑर्केस्ट्रेशन परत है जो संपूर्ण निष्कर्षण वर्कफ़्लो का प्रबंधन करती है। यह प्रति-प्रवाह घटक प्रारंभिकरण के साथ TrustGraph के FlowProcessor पैटर्न का उपयोग करता है। जब कोई ऑन्टोलॉजी कॉन्फ़िगरेशन अपडेट प्राप्त होता है, तो यह प्रवाह-विशिष्ट घटकों (ऑन्टोलॉजी लोडर, एम्बेडर, टेक्स्ट प्रोसेसर, सेलेक्टर) को आरंभ या अपडेट करता है। जब प्रसंस्करण के लिए एक पाठ खंड प्राप्त होता है, तो यह पाइपलाइन का समन्वय करता है: पाठ को खंडों में विभाजित करना, वेक्टर खोज के माध्यम से प्रासंगिक ऑन्टोलॉजी तत्वों को खोजना, एक प्रतिबंधित प्रॉम्प्ट का निर्माण करना, प्रॉम्प्ट सेवा को कॉल करना, प्रतिक्रिया को पार्स और मान्य करना, ऑन्टोलॉजी परिभाषा ट्रिपल उत्पन्न करना और सामग्री ट्रिपल और इकाई संदर्भ दोनों का उत्सर्जन करना।
|
||
|
|
|
||
|
|
**निष्कर्षण पाइपलाइन:**
|
||
|
|
1. chunks-input क्यू के माध्यम से पाठ खंड प्राप्त करें
|
||
|
|
2. यदि आवश्यक हो तो प्रवाह घटकों को आरंभ करें (पहले खंड या कॉन्फ़िगरेशन अपडेट पर)
|
||
|
|
3. NLTK का उपयोग करके पाठ को वाक्यों में विभाजित करें
|
||
|
|
4. प्रासंगिक ऑन्टोलॉजी अवधारणाओं को खोजने के लिए FAISS वेक्टर स्टोर खोजें
|
||
|
|
5. स्वचालित संपत्ति समावेश के साथ ऑन्टोलॉजी उपसमुच्चय बनाएं
|
||
|
|
6. Jinja2-टेम्प्लेटेड प्रॉम्प्ट चर बनाएं
|
||
|
|
7. extract-with-ontologies टेम्पलेट के साथ प्रॉम्प्ट सेवा को कॉल करें
|
||
|
|
8. संरचित ट्रिपल में JSON प्रतिक्रिया को पार्स करें
|
||
|
|
9. ट्रिपल को मान्य करें और पूर्ण ऑन्टोलॉजी URIs का उपयोग करके URIs का विस्तार करें
|
||
|
|
10. ऑन्टोलॉजी परिभाषा ट्रिपल (लेबल/टिप्पणी/डोमेन/रेंज के साथ कक्षाएं और गुण) उत्पन्न करें
|
||
|
|
11. सभी ट्रिपल से इकाई संदर्भ बनाएं
|
||
|
|
12. ट्रिपल और इकाई-संदर्भ क्यू पर उत्सर्जित करें
|
||
|
|
|
||
|
|
**मुख्य विशेषताएं:**
|
||
|
|
विभिन्न एम्बेडिंग मॉडल का समर्थन करने वाले प्रति-प्रवाह वेक्टर स्टोर
|
||
|
|
config-update क्यू के माध्यम से घटना-संचालित ऑन्टोलॉजी अपडेट
|
||
|
|
ऑन्टोलॉजी URIs का उपयोग करके स्वचालित URI विस्तार
|
||
|
|
पूर्ण मेटाडेटा के साथ ज्ञान ग्राफ में जोड़े गए ऑन्टोलॉजी तत्व
|
||
|
|
इकाई संदर्भों में सामग्री और ऑन्टोलॉजी तत्व दोनों शामिल हैं
|
||
|
|
|
||
|
|
**कार्यान्वयन स्थान:** `trustgraph-flow/trustgraph/extract/kg/ontology/extract.py`
|
||
|
|
|
||
|
|
### कॉन्फ़िगरेशन
|
||
|
|
|
||
|
|
सेवा कमांड-लाइन तर्कों के साथ TrustGraph के मानक कॉन्फ़िगरेशन दृष्टिकोण का उपयोग करती है:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
kg-extract-ontology \
|
||
|
|
--id kg-extract-ontology \
|
||
|
|
--pulsar-host localhost:6650 \
|
||
|
|
--input-queue chunks \
|
||
|
|
--config-input-queue config-update \
|
||
|
|
--output-queue triples \
|
||
|
|
--entity-contexts-output-queue entity-contexts
|
||
|
|
```
|
||
|
|
|
||
|
|
**मुख्य कॉन्फ़िगरेशन पैरामीटर**:
|
||
|
|
`similarity_threshold`: 0.3 (डिफ़ॉल्ट, कोड में कॉन्फ़िगर करने योग्य)
|
||
|
|
`top_k`: 10 (प्रत्येक खंड के लिए पुनः प्राप्त होने वाले ऑन्टोलॉजी तत्वों की संख्या)
|
||
|
|
`vector_store`: ऑटो-डिटेक्टेड आयामों के साथ प्रति-फ़्लो FAISS IndexFlatIP
|
||
|
|
`text_processor`: NLTK के साथ punt_tab वाक्य टोकनाइजेशन
|
||
|
|
`prompt_template`: "extract-with-ontologies" (Jinja2 टेम्पलेट)
|
||
|
|
|
||
|
|
**ऑन्टोलॉजी कॉन्फ़िगरेशन**:
|
||
|
|
ऑन्टोलॉजी को "ontology" प्रकार के साथ कॉन्फ़िग-अपडेट कतार के माध्यम से गतिशील रूप से लोड किया जाता है।
|
||
|
|
|
||
|
|
### डेटा प्रवाह
|
||
|
|
|
||
|
|
1. **आरंभीकरण चरण** (प्रति-फ़्लो):
|
||
|
|
कॉन्फ़िग-अपडेट कतार के माध्यम से ऑन्टोलॉजी कॉन्फ़िगरेशन प्राप्त करें
|
||
|
|
ऑन्टोलॉजी JSON को OntologyClass और OntologyProperty ऑब्जेक्ट में पार्स करें
|
||
|
|
EmbeddingsClientSpec का उपयोग करके सभी ऑन्टोलॉजी तत्वों के लिए एम्बेडिंग उत्पन्न करें
|
||
|
|
प्रति-फ़्लो FAISS वेक्टर स्टोर में एम्बेडिंग संग्रहीत करें
|
||
|
|
पहले प्रतिक्रिया से एम्बेडिंग आयामों का ऑटो-डिटेक्शन
|
||
|
|
|
||
|
|
2. **निष्कर्षण चरण** (प्रति-खंड):
|
||
|
|
chunks-input कतार से खंड प्राप्त करें
|
||
|
|
NLTK का उपयोग करके खंड को वाक्यों में विभाजित करें
|
||
|
|
प्रत्येक वाक्य के लिए एम्बेडिंग की गणना करें
|
||
|
|
प्रासंगिक ऑन्टोलॉजी तत्वों के लिए FAISS वेक्टर स्टोर खोजें
|
||
|
|
स्वचालित संपत्ति समावेश के साथ ऑन्टोलॉजी उपसमुच्चय बनाएं
|
||
|
|
पाठ और ऑन्टोलॉजी के साथ Jinja2 टेम्पलेट चर बनाएं
|
||
|
|
extract-with-ontologies टेम्पलेट के साथ प्रॉम्प्ट सेवा को कॉल करें
|
||
|
|
JSON प्रतिक्रिया को पार्स करें और ट्रिपल को मान्य करें
|
||
|
|
ऑन्टोलॉजी URIs का उपयोग करके URIs का विस्तार करें
|
||
|
|
ऑन्टोलॉजी परिभाषा ट्रिपल उत्पन्न करें
|
||
|
|
सभी ट्रिपल से इकाई संदर्भ बनाएं
|
||
|
|
ट्रिपल और इकाई-संदर्भ कतारों पर उत्सर्जित करें
|
||
|
|
|
||
|
|
### इन-मेमोरी वेक्टर स्टोर
|
||
|
|
|
||
|
|
**उद्देश्य**: ऑन्टोलॉजी तत्व मिलान के लिए तेज़, मेमोरी-आधारित समानता खोज प्रदान करता है।
|
||
|
|
|
||
|
|
**कार्यान्वयन: FAISS**
|
||
|
|
|
||
|
|
सिस्टम **FAISS (फेसबुक एआई समानता खोज)** का उपयोग सटीक कोसाइन समानता खोज के लिए IndexFlatIP के साथ करता है। मुख्य विशेषताएं:
|
||
|
|
|
||
|
|
**IndexFlatIP**: आंतरिक उत्पाद का उपयोग करके सटीक कोसाइन समानता खोज
|
||
|
|
**ऑटो-डिटेक्शन**: पहले एम्बेडिंग प्रतिक्रिया से आयाम निर्धारित होता है
|
||
|
|
**प्रति-फ़्लो स्टोर**: प्रत्येक फ़्लो में विभिन्न एम्बेडिंग मॉडल के लिए एक स्वतंत्र वेक्टर स्टोर होता है
|
||
|
|
**सामान्यीकरण**: अनुक्रमण से पहले सभी वेक्टर सामान्य होते हैं
|
||
|
|
**बैच ऑपरेशन**: प्रारंभिक ऑन्टोलॉजी लोडिंग के लिए कुशल बैच जोड़
|
||
|
|
|
||
|
|
**कार्यान्वयन स्थान**: `trustgraph-flow/trustgraph/extract/kg/ontology/vector_store.py`
|
||
|
|
|
||
|
|
### ऑन्टोलॉजी उपसमुच्चय चयन एल्गोरिदम
|
||
|
|
|
||
|
|
**उद्देश्य**: प्रत्येक पाठ खंड के लिए ऑन्टोलॉजी के न्यूनतम प्रासंगिक भाग का गतिशील रूप से चयन करता है।
|
||
|
|
|
||
|
|
**विस्तृत एल्गोरिदम चरण**:
|
||
|
|
|
||
|
|
1. **पाठ विभाजन**:
|
||
|
|
NLP वाक्य पहचान का उपयोग करके इनपुट खंड को वाक्यों में विभाजित करें
|
||
|
|
प्रत्येक वाक्य से संज्ञा वाक्यांश, क्रिया वाक्यांश और नामित संस्थाएं निकालें
|
||
|
|
संदर्भ को संरक्षित करते हुए खंडों की एक पदानुक्रमित संरचना बनाएं
|
||
|
|
|
||
|
|
2. **एम्बेडिंग पीढ़ी**:
|
||
|
|
प्रत्येक पाठ खंड (वाक्यों और वाक्यांशों) के लिए वेक्टर एम्बेडिंग उत्पन्न करें
|
||
|
|
ऑन्टोलॉजी तत्वों के लिए उपयोग किए गए समान एम्बेडिंग मॉडल का उपयोग करें
|
||
|
|
प्रदर्शन में सुधार के लिए बार-बार खंडों के लिए एम्बेडिंग कैश करें
|
||
|
|
|
||
|
|
3. **समानता खोज**:
|
||
|
|
प्रत्येक पाठ खंड एम्बेडिंग के लिए, वेक्टर स्टोर खोजें
|
||
|
|
शीर्ष-k (जैसे, 10) सबसे समान ऑन्टोलॉजी तत्वों को पुनः प्राप्त करें
|
||
|
|
कमजोर मिलानों को फ़िल्टर करने के लिए समानता थ्रेसहोल्ड (जैसे, 0.7) लागू करें
|
||
|
|
सभी खंडों में परिणामों को एकत्रित करें, मिलान आवृत्तियों को ट्रैक करें
|
||
|
|
|
||
|
|
4. **निर्भरता संकल्प**:
|
||
|
|
प्रत्येक चयनित वर्ग के लिए, रूट तक सभी मूल वर्गों को पुनरावर्ती रूप से शामिल करें
|
||
|
|
प्रत्येक चयनित संपत्ति के लिए, इसके डोमेन और रेंज कक्षाओं को शामिल करें
|
||
|
|
उलटे गुणों के लिए, सुनिश्चित करें कि दोनों दिशाएं शामिल हैं
|
||
|
|
यदि ऑन्टोलॉजी में मौजूद हैं तो समकक्ष कक्षाओं को जोड़ें
|
||
|
|
|
||
|
|
5. **उपसमुच्चय निर्माण**:
|
||
|
|
संबंधों को संरक्षित करते हुए एकत्र किए गए तत्वों को डुप्लिकेट करें
|
||
|
|
कक्षाओं, ऑब्जेक्ट गुणों और डेटा प्रकार गुणों में व्यवस्थित करें
|
||
|
|
सुनिश्चित करें कि सभी बाधाएं और संबंध संरक्षित हैं
|
||
|
|
एक स्व-निहित मिनी-ऑन्टोलॉजी बनाएं जो मान्य और पूर्ण हो
|
||
|
|
|
||
|
|
**उदाहरण वॉकथ्रू**:
|
||
|
|
पाठ: "भूरे रंग का कुत्ता सफेद बिल्ली को पेड़ पर दौड़ाता है।"
|
||
|
|
खंड: ["भूरा कुत्ता", "सफेद बिल्ली", "पेड़", "दौड़ाता है"]
|
||
|
|
मिलान किए गए तत्व: [कुत्ता (वर्ग), बिल्ली (वर्ग), जानवर (मूल), पीछा करता है (संपत्ति)]
|
||
|
|
निर्भरता: [जानवर (कुत्ते और बिल्ली का मूल), जीवनरूप (जानवर का मूल)]
|
||
|
|
अंतिम उपसमुच्चय: जानवर पदानुक्रम और पीछा संबंध के साथ पूर्ण मिनी-ऑन्टोलॉजी
|
||
|
|
|
||
|
|
### ट्रिपल सत्यापन
|
||
|
|
|
||
|
|
**उद्देश्य**: सुनिश्चित करता है कि सभी निकाले गए ट्रिपल सख्ती से ऑन्टोलॉजी बाधाओं का पालन करते हैं।
|
||
|
|
|
||
|
|
**सत्यापन एल्गोरिदम**:
|
||
|
|
|
||
|
|
1. **वर्ग सत्यापन**:
|
||
|
|
सत्यापित करें कि विषय, शब्दावली उपसमुच्चय में परिभाषित वर्गों के उदाहरण हैं।
|
||
|
|
ऑब्जेक्ट गुणों के लिए, सत्यापित करें कि ऑब्जेक्ट भी मान्य वर्ग उदाहरण हैं।
|
||
|
|
वर्ग नामों की तुलना शब्दावली के वर्ग शब्दकोश से करें।
|
||
|
|
वर्ग पदानुक्रमों को संभालें - उपवर्गों के उदाहरण मूल वर्ग बाधाओं के लिए मान्य हैं।
|
||
|
|
|
||
|
|
2. **गुण सत्यापन**:
|
||
|
|
पुष्टि करें कि विधेय शब्दावली उपसमुच्चय में गुणों से मेल खाते हैं।
|
||
|
|
ऑब्जेक्ट गुणों (इकाई-से-इकाई) और डेटा प्रकार गुणों (इकाई-से-लिटरल) के बीच अंतर करें।
|
||
|
|
सत्यापित करें कि संपत्ति नाम बिल्कुल मेल खाते हैं (यदि मौजूद है तो नामस्थान पर विचार करते हुए)।
|
||
|
|
|
||
|
|
3. **डोमेन/रेंज जाँच**:
|
||
|
|
प्रत्येक संपत्ति के लिए जिसका उपयोग विधेय के रूप में किया जाता है, उसका डोमेन और रेंज प्राप्त करें।
|
||
|
|
सत्यापित करें कि विषय का प्रकार संपत्ति के डोमेन से मेल खाता है या उससे विरासत में मिला है।
|
||
|
|
सत्यापित करें कि ऑब्जेक्ट का प्रकार संपत्ति के रेंज से मेल खाता है या उससे विरासत में मिला है।
|
||
|
|
डेटा प्रकार गुणों के लिए, सत्यापित करें कि ऑब्जेक्ट सही XSD प्रकार का एक लिटरल है।
|
||
|
|
|
||
|
|
4. **कार्डिनैलिटी सत्यापन**:
|
||
|
|
प्रति विषय संपत्ति उपयोग गणनाओं को ट्रैक करें।
|
||
|
|
न्यूनतम कार्डिनैलिटी की जाँच करें - सुनिश्चित करें कि आवश्यक गुण मौजूद हैं।
|
||
|
|
अधिकतम कार्डिनैलिटी की जाँच करें - सुनिश्चित करें कि संपत्ति का उपयोग बहुत अधिक बार नहीं किया गया है।
|
||
|
|
कार्यात्मक गुणों के लिए, सुनिश्चित करें कि प्रति विषय अधिकतम एक मान है।
|
||
|
|
|
||
|
|
5. **डेटा प्रकार सत्यापन**:
|
||
|
|
उनके घोषित XSD प्रकारों के अनुसार लिटरल मानों को पार्स करें।
|
||
|
|
सत्यापित करें कि पूर्णांक मान्य संख्याएँ हैं, तिथियाँ ठीक से स्वरूपित हैं, आदि।
|
||
|
|
यदि regex बाधाएँ परिभाषित हैं तो स्ट्रिंग पैटर्न की जाँच करें।
|
||
|
|
सुनिश्चित करें कि URIs xsd:anyURI प्रकारों के लिए अच्छी तरह से स्वरूपित हैं।
|
||
|
|
|
||
|
|
**सत्यापन उदाहरण**:
|
||
|
|
ट्रिपल: ("बडी", "has-owner", "जॉन")
|
||
|
|
जाँचें कि "बडी" को एक ऐसे वर्ग के रूप में टाइप किया गया है जिसके पास "has-owner" संपत्ति हो सकती है।
|
||
|
|
जाँचें कि "has-owner" शब्दावली में मौजूद है।
|
||
|
|
डोमेन बाधा का सत्यापन: विषय को "पालतू" प्रकार या उपवर्ग का होना चाहिए।
|
||
|
|
रेंज बाधा का सत्यापन: ऑब्जेक्ट को "व्यक्ति" प्रकार या उपवर्ग का होना चाहिए।
|
||
|
|
यदि मान्य है, तो आउटपुट में जोड़ें; यदि अमान्य है, तो उल्लंघन को लॉग करें और छोड़ दें।
|
||
|
|
|
||
|
|
## प्रदर्शन संबंधी विचार
|
||
|
|
|
||
|
|
### अनुकूलन रणनीतियाँ
|
||
|
|
|
||
|
|
1. **एम्बेडिंग कैशिंग**: बार-बार उपयोग किए जाने वाले पाठ खंडों के लिए एम्बेडिंग कैश करें।
|
||
|
|
2. **बैच प्रोसेसिंग**: कई खंडों को समानांतर में संसाधित करें।
|
||
|
|
3. **वेक्टर स्टोर इंडेक्सिंग**: बड़े शब्दावली के लिए अनुमानित निकटतम पड़ोसी एल्गोरिदम का उपयोग करें।
|
||
|
|
4. **प्रॉम्प्ट अनुकूलन**: केवल आवश्यक शब्दावली तत्वों को शामिल करके प्रॉम्प्ट आकार को कम करें।
|
||
|
|
5. **परिणाम कैशिंग**: समान टुकड़ों के लिए निष्कर्षण परिणामों को कैश करें।
|
||
|
|
|
||
|
|
### मापनीयता
|
||
|
|
|
||
|
|
**क्षैतिज स्केलिंग**: साझा शब्दावली कैश के साथ कई एक्सट्रैक्टर उदाहरण।
|
||
|
|
**शब्दावली विभाजन**: बड़े शब्दावली को डोमेन द्वारा विभाजित करें।
|
||
|
|
**स्ट्रीमिंग प्रोसेसिंग**: बैचिंग के बिना आने वाले टुकड़ों को संसाधित करें।
|
||
|
|
**मेमोरी प्रबंधन**: अप्रयुक्त एम्बेडिंग की आवधिक सफाई।
|
||
|
|
|
||
|
|
## त्रुटि प्रबंधन
|
||
|
|
|
||
|
|
### विफलता परिदृश्य
|
||
|
|
|
||
|
|
1. **गायब शब्दावली**: बिना बाधा वाले निष्कर्षण पर वापस जाएँ।
|
||
|
|
2. **एम्बेडिंग सेवा विफलता**: कैश किए गए एम्बेडिंग का उपयोग करें या सिमेंटिक मिलान छोड़ दें।
|
||
|
|
3. **प्रॉम्प्ट सेवा टाइमआउट**: घातीय बैकऑफ़ के साथ पुनः प्रयास करें।
|
||
|
|
4. **अमान्य ट्रिपल प्रारूप**: लॉग करें और खराब ट्रिपल छोड़ दें।
|
||
|
|
5. **शब्दावली असंगतताएँ**: संघर्षों की रिपोर्ट करें और सबसे विशिष्ट मान्य तत्वों का उपयोग करें।
|
||
|
|
|
||
|
|
### निगरानी
|
||
|
|
|
||
|
|
ट्रैक करने के लिए प्रमुख मेट्रिक्स:
|
||
|
|
|
||
|
|
शब्दावली लोड समय और मेमोरी उपयोग
|
||
|
|
एम्बेडिंग पीढ़ी विलंबता
|
||
|
|
वेक्टर खोज प्रदर्शन
|
||
|
|
प्रॉम्प्ट सेवा प्रतिक्रिया समय
|
||
|
|
ट्रिपल निष्कर्षण सटीकता
|
||
|
|
शब्दावली अनुरूपता दर
|
||
|
|
|
||
|
|
## माइग्रेशन पथ
|
||
|
|
|
||
|
|
### मौजूदा निष्कर्षक से
|
||
|
|
|
||
|
|
1. **समानांतर संचालन**: शुरू में मौजूदा निष्कर्षक के साथ समानांतर में चलाएँ।
|
||
|
|
2. **धीरे-धीरे रोलआउट**: विशिष्ट दस्तावेज़ प्रकारों के साथ प्रारंभ करें।
|
||
|
|
3. **गुणवत्ता तुलना**: मौजूदा निष्कर्षक के साथ आउटपुट गुणवत्ता की तुलना करें।
|
||
|
|
4. **पूर्ण माइग्रेशन**: गुणवत्ता सत्यापित होने के बाद मौजूदा निष्कर्षक को बदलें।
|
||
|
|
|
||
|
|
### शब्दावली विकास
|
||
|
|
|
||
|
|
1. **मौजूदा से बूटस्ट्रैप करें**: मौजूदा ज्ञान से प्रारंभिक शब्दावली उत्पन्न करें।
|
||
|
|
2. **पुनरावृत्त परिशोधन**: निष्कर्षण पैटर्न के आधार पर परिष्कृत करें।
|
||
|
|
3. **डोमेन विशेषज्ञ समीक्षा**: विषय वस्तु विशेषज्ञों के साथ मान्य करें।
|
||
|
|
4. **लगातार सुधार**: निष्कर्षण प्रतिक्रिया के आधार पर अपडेट करें।
|
||
|
|
|
||
|
|
## शब्दावली-संवेदनशील क्वेरी सेवा
|
||
|
|
|
||
|
|
### अवलोकन
|
||
|
|
|
||
|
|
शब्दावली-संवेदनशील क्वेरी सेवा विभिन्न बैकएंड ग्राफ स्टोर का समर्थन करने के लिए कई क्वेरी पथ प्रदान करती है। यह सटीक, सिमेंटिक रूप से-जागरूक प्रश्न उत्तर के लिए कैसेंड्रा (SPARQL के माध्यम से) और साइफर-आधारित ग्राफ स्टोर (Neo4j, Memgraph, FalkorDB) दोनों में शब्दावली ज्ञान का लाभ उठाता है।
|
||
|
|
|
||
|
|
**सेवा घटक**:
|
||
|
|
`onto-query-sparql`: कैसेंड्रा के लिए प्राकृतिक भाषा को SPARQL में परिवर्तित करता है।
|
||
|
|
`sparql-cassandra`: कैसेंड्रा के लिए SPARQL क्वेरी परत rdflib का उपयोग करके।
|
||
|
|
`onto-query-cypher`: ग्राफ डेटाबेस के लिए प्राकृतिक भाषा को साइफर में परिवर्तित करता है।
|
||
|
|
`cypher-executor`: Neo4j/Memgraph/FalkorDB के लिए साइफर क्वेरी निष्पादन।
|
||
|
|
|
||
|
|
### आर्किटेक्चर
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────┐
|
||
|
|
│ User Query │
|
||
|
|
└────────┬────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ Question │────▶│ Sentence │
|
||
|
|
│ Analyser │ │ Splitter │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ Ontology │────▶│ Vector │
|
||
|
|
│ Matcher │ │ Store │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐
|
||
|
|
│ Backend Router │
|
||
|
|
└────────┬────────┘
|
||
|
|
│
|
||
|
|
┌───────────┴───────────┐
|
||
|
|
│ │
|
||
|
|
▼ ▼
|
||
|
|
┌─────────────────┐ ┌─────────────────┐
|
||
|
|
│ onto-query- │ │ onto-query- │
|
||
|
|
│ sparql │ │ cypher │
|
||
|
|
└────────┬────────┘ └────────┬────────┘
|
||
|
|
│ │
|
||
|
|
▼ ▼
|
||
|
|
┌─────────────────┐ ┌─────────────────┐
|
||
|
|
│ SPARQL │ │ Cypher │
|
||
|
|
│ Generator │ │ Generator │
|
||
|
|
└────────┬────────┘ └────────┬────────┘
|
||
|
|
│ │
|
||
|
|
▼ ▼
|
||
|
|
┌─────────────────┐ ┌─────────────────┐
|
||
|
|
│ sparql- │ │ cypher- │
|
||
|
|
│ cassandra │ │ executor │
|
||
|
|
└────────┬────────┘ └────────┬────────┘
|
||
|
|
│ │
|
||
|
|
▼ ▼
|
||
|
|
┌─────────────────┐ ┌─────────────────┐
|
||
|
|
│ Cassandra │ │ Neo4j/Memgraph/ │
|
||
|
|
│ │ │ FalkorDB │
|
||
|
|
└────────┬────────┘ └────────┬────────┘
|
||
|
|
│ │
|
||
|
|
└────────────┬───────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌──────────────┐
|
||
|
|
│ Answer │────▶│ Prompt │
|
||
|
|
│ Generator │ │ Service │
|
||
|
|
└────────┬────────┘ └──────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐
|
||
|
|
│ Final Answer │
|
||
|
|
└─────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
### क्वेरी प्रोसेसिंग पाइपलाइन
|
||
|
|
|
||
|
|
#### 1. प्रश्न विश्लेषक
|
||
|
|
|
||
|
|
**उद्देश्य**: उपयोगकर्ता के प्रश्नों को अर्थ संबंधी घटकों में विघटित करता है ताकि ऑन्टोलॉजी मिलान किया जा सके।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
प्रश्न विश्लेषक, आने वाले प्राकृतिक भाषा प्रश्न को लेता है और इसे सार्थक खंडों में तोड़ता है, निष्कर्षण पाइपलाइन के समान वाक्य विभाजन दृष्टिकोण का उपयोग करके। यह प्रश्न में उल्लिखित प्रमुख संस्थाओं, संबंधों और बाधाओं की पहचान करता है। प्रत्येक खंड का विश्लेषण प्रश्न के प्रकार (तथ्यात्मक, एकत्रीकरण, तुलना, आदि) और अपेक्षित उत्तर प्रारूप के लिए किया जाता है। यह विघटन यह पहचानने में मदद करता है कि ऑन्टोलॉजी का कौन सा भाग प्रश्न का उत्तर देने के लिए सबसे अधिक प्रासंगिक है।
|
||
|
|
|
||
|
|
**मुख्य कार्य**:
|
||
|
|
प्रश्न को वाक्यों और वाक्यांशों में विभाजित करें
|
||
|
|
प्रश्न के प्रकार और इरादे की पहचान करें
|
||
|
|
उल्लिखित संस्थाओं और संबंधों को निकालें
|
||
|
|
प्रश्न में बाधाओं और फ़िल्टरों का पता लगाएं
|
||
|
|
अपेक्षित उत्तर प्रारूप निर्धारित करें
|
||
|
|
|
||
|
|
#### 2. प्रश्नों के लिए ऑन्टोलॉजी मिलानकर्ता
|
||
|
|
|
||
|
|
**उद्देश्य**: प्रश्न का उत्तर देने के लिए आवश्यक प्रासंगिक ऑन्टोलॉजी उपसमुच्चय की पहचान करता है।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
निष्कर्षण पाइपलाइन के ऑन्टोलॉजी चयनकर्ता के समान, लेकिन प्रश्न उत्तर देने के लिए अनुकूलित। मिलानकर्ता प्रश्न खंडों के लिए एम्बेडिंग उत्पन्न करता है और प्रासंगिक ऑन्टोलॉजी तत्वों को खोजने के लिए वेक्टर स्टोर में खोज करता है। हालांकि, यह निष्कर्षण के बजाय प्रश्न निर्माण के लिए उपयोगी होने वाले अवधारणाओं को खोजने पर ध्यान केंद्रित करता है। यह चयन को संबंधित गुणों को शामिल करने के लिए विस्तारित करता है जो ग्राफ अन्वेषण के दौरान पारगमन योग्य हो सकते हैं, भले ही उन्हें प्रश्न में स्पष्ट रूप से उल्लेख न किया गया हो। उदाहरण के लिए, यदि "कर्मचारियों" के बारे में पूछा जाता है, तो यह "काम करता है," "प्रबंधित करता है," और "रिपोर्ट करता है" जैसे गुणों को शामिल कर सकता है जो कर्मचारी जानकारी खोजने के लिए प्रासंगिक हो सकते हैं।
|
||
|
|
|
||
|
|
**मिलान रणनीति**:
|
||
|
|
प्रश्न खंडों को एम्बेड करें
|
||
|
|
सीधे उल्लिखित ऑन्टोलॉजी अवधारणाओं को खोजें
|
||
|
|
उल्लिखित वर्गों को जोड़ने वाले गुणों को शामिल करें
|
||
|
|
पारगमन के लिए व्युत्क्रम और संबंधित गुणों को जोड़ें
|
||
|
|
पदानुक्रमित प्रश्नों के लिए मूल/चाइल्ड कक्षाओं को शामिल करें
|
||
|
|
प्रश्न-केंद्रित ऑन्टोलॉजी विभाजन बनाएं
|
||
|
|
|
||
|
|
#### 3. बैकएंड राउटर
|
||
|
|
|
||
|
|
**उद्देश्य**: कॉन्फ़िगरेशन के आधार पर प्रश्नों को उपयुक्त बैकएंड-विशिष्ट क्वेरी पथ पर रूट करता है।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
बैकएंड राउटर यह निर्धारित करने के लिए सिस्टम कॉन्फ़िगरेशन की जांच करता है कि कौन सा ग्राफ बैकएंड सक्रिय है (कैसेंड्रा या साइफर-आधारित)। यह प्रश्न और ऑन्टोलॉजी विभाजन को उपयुक्त क्वेरी पीढ़ी सेवा पर रूट करता है। राउटर कई बैकएंड में लोड संतुलन का भी समर्थन कर सकता है या यदि प्राथमिक बैकएंड अनुपलब्ध है तो बैकअप तंत्र प्रदान कर सकता है।
|
||
|
|
|
||
|
|
**राउटिंग तर्क**:
|
||
|
|
सिस्टम सेटिंग्स से कॉन्फ़िगर किए गए बैकएंड प्रकार की जांच करें
|
||
|
|
कैसेंड्रा बैकएंड के लिए `onto-query-sparql` पर रूट करें
|
||
|
|
Neo4j/Memgraph/FalkorDB के लिए `onto-query-cypher` पर रूट करें
|
||
|
|
क्वेरी वितरण के साथ मल्टी-बैकएंड कॉन्फ़िगरेशन का समर्थन करें
|
||
|
|
विफल-ओवर और लोड संतुलन परिदृश्यों को संभालें
|
||
|
|
|
||
|
|
#### 4. SPARQL क्वेरी पीढ़ी (`onto-query-sparql`)
|
||
|
|
|
||
|
|
**उद्देश्य**: कैसेंड्रा निष्पादन के लिए प्राकृतिक भाषा प्रश्नों को SPARQL प्रश्नों में परिवर्तित करता है।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
SPARQL क्वेरी जनरेटर प्रश्न और ऑन्टोलॉजी विभाजन लेता है और कैसेंड्रा बैकएंड के खिलाफ निष्पादन के लिए अनुकूलित एक SPARQL क्वेरी बनाता है। यह RDF/OWL सिमेंटिक्स को शामिल करने वाले एक SPARQL-विशिष्ट टेम्पलेट के साथ प्रॉम्प्ट सेवा का उपयोग करता है। जनरेटर SPARQL पैटर्न को समझता है जैसे कि प्रॉपर्टी पथ, वैकल्पिक खंड और फ़िल्टर जो कैसेंड्रा ऑपरेशनों में कुशलता से अनुवाद कर सकते हैं।
|
||
|
|
|
||
|
|
**SPARQL पीढ़ी प्रॉम्प्ट टेम्पलेट**:
|
||
|
|
```
|
||
|
|
Generate a SPARQL query for the following question using the provided ontology.
|
||
|
|
|
||
|
|
ONTOLOGY CLASSES:
|
||
|
|
{classes}
|
||
|
|
|
||
|
|
ONTOLOGY PROPERTIES:
|
||
|
|
{properties}
|
||
|
|
|
||
|
|
RULES:
|
||
|
|
- Use proper RDF/OWL semantics
|
||
|
|
- Include relevant prefixes
|
||
|
|
- Use property paths for hierarchical queries
|
||
|
|
- Add FILTER clauses for constraints
|
||
|
|
- Optimise for Cassandra backend
|
||
|
|
|
||
|
|
QUESTION: {question}
|
||
|
|
|
||
|
|
SPARQL QUERY:
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 5. सिफर क्वेरी जनरेशन (`onto-query-cypher`)
|
||
|
|
|
||
|
|
**उद्देश्य**: प्राकृतिक भाषा के प्रश्नों को ग्राफ डेटाबेस के लिए सिफर क्वेरी में परिवर्तित करता है।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
सिफर क्वेरी जनरेटर, Neo4j, Memgraph और FalkorDB के लिए अनुकूलित मूल सिफर क्वेरी बनाता है। यह ऑन्टोलॉजी कक्षाओं को नोड लेबल और गुणों को संबंधों में मैप करता है, और सिफर के पैटर्न मिलान सिंटैक्स का उपयोग करता है। जनरेटर में सिफर-विशिष्ट अनुकूलन शामिल हैं, जैसे कि संबंध दिशा संकेत, इंडेक्स का उपयोग और क्वेरी प्लानिंग संकेत।
|
||
|
|
|
||
|
|
**सिफर जनरेशन प्रॉम्प्ट टेम्पलेट**:
|
||
|
|
```
|
||
|
|
Generate a Cypher query for the following question using the provided ontology.
|
||
|
|
|
||
|
|
NODE LABELS (from classes):
|
||
|
|
{classes}
|
||
|
|
|
||
|
|
RELATIONSHIP TYPES (from properties):
|
||
|
|
{properties}
|
||
|
|
|
||
|
|
RULES:
|
||
|
|
- Use MATCH patterns for graph traversal
|
||
|
|
- Include WHERE clauses for filters
|
||
|
|
- Use aggregation functions when needed
|
||
|
|
- Optimise for graph database performance
|
||
|
|
- Consider index hints for large datasets
|
||
|
|
|
||
|
|
QUESTION: {question}
|
||
|
|
|
||
|
|
CYPHER QUERY:
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 6. SPARQL-कैसेंड्रा क्वेरी इंजन (`sparql-cassandra`)
|
||
|
|
|
||
|
|
**उद्देश्य**: यह पाइथन rdflib का उपयोग करके कैसेंड्रा के विरुद्ध SPARQL क्वेरी निष्पादित करता है।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
SPARQL-कैसेंड्रा इंजन, पाइथन की rdflib लाइब्रेरी का उपयोग करके एक SPARQL प्रोसेसर को लागू करता है, जिसमें एक कस्टम कैसेंड्रा बैकएंड स्टोर होता है। यह SPARQL ग्राफ पैटर्न को उपयुक्त कैसेंड्रा CQL क्वेरी में अनुवाद करता है, जिसमें जॉइन, फ़िल्टर और एग्रीगेशन शामिल हैं। इंजन एक RDF-से-कैसेंड्रा मैपिंग बनाए रखता है जो सिमेंटिक संरचना को संरक्षित करता है, साथ ही कैसेंड्रा के कॉलम-फैमिली स्टोरेज मॉडल के लिए अनुकूलन करता है।
|
||
|
|
|
||
|
|
**कार्यान्वयन विशेषताएं**:
|
||
|
|
कैसेंड्रा के लिए rdflib स्टोर इंटरफ़ेस कार्यान्वयन
|
||
|
|
सामान्य पैटर्न के साथ SPARQL 1.1 क्वेरी समर्थन
|
||
|
|
ट्रिपल पैटर्न का CQL में कुशल अनुवाद
|
||
|
|
प्रॉपर्टी पाथ और पदानुक्रमित क्वेरी के लिए समर्थन
|
||
|
|
बड़े डेटासेट के लिए परिणाम स्ट्रीमिंग
|
||
|
|
कनेक्शन पूलिंग और क्वेरी कैशिंग
|
||
|
|
|
||
|
|
**उदाहरण अनुवाद**:
|
||
|
|
```sparql
|
||
|
|
SELECT ?animal WHERE {
|
||
|
|
?animal rdf:type :Animal .
|
||
|
|
?animal :hasOwner "John" .
|
||
|
|
}
|
||
|
|
```
|
||
|
|
अनुकूलित कैसेंड्रा प्रश्नों का अनुवाद, जो इंडेक्स और विभाजन कुंजियों का उपयोग करते हैं।
|
||
|
|
|
||
|
|
#### 7. साइफर क्वेरी एग्जीक्यूटर (`cypher-executor`)
|
||
|
|
|
||
|
|
**उद्देश्य**: नियो4जे, मेमग्राफ और फाल्कोर्डबी के खिलाफ साइफर प्रश्नों को निष्पादित करता है।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
साइफर एग्जीक्यूटर विभिन्न ग्राफ डेटाबेस में साइफर प्रश्नों को निष्पादित करने के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है। यह डेटाबेस-विशिष्ट कनेक्शन प्रोटोकॉल, क्वेरी अनुकूलन संकेतों और परिणाम प्रारूप सामान्यीकरण को संभालता है। एग्जीक्यूटर में प्रत्येक डेटाबेस प्रकार के लिए उपयुक्त पुन: प्रयास तर्क, कनेक्शन पूलिंग और लेनदेन प्रबंधन शामिल हैं।
|
||
|
|
|
||
|
|
**मल्टी-डेटाबेस समर्थन**:
|
||
|
|
**नियो4जे**: बोल्ट प्रोटोकॉल, लेनदेन फ़ंक्शन, इंडेक्स संकेत
|
||
|
|
**मेमग्राफ**: कस्टम प्रोटोकॉल, स्ट्रीमिंग परिणाम, विश्लेषणात्मक प्रश्न
|
||
|
|
**फाल्कोर्डबी**: रेडिस प्रोटोकॉल अनुकूलन, इन-मेमोरी अनुकूलन
|
||
|
|
|
||
|
|
**निष्पादन विशेषताएं**:
|
||
|
|
डेटाबेस-अज्ञेय कनेक्शन प्रबंधन
|
||
|
|
क्वेरी सत्यापन और सिंटैक्स जांच
|
||
|
|
टाइमआउट और संसाधन सीमा प्रवर्तन
|
||
|
|
परिणाम पेजिंग और स्ट्रीमिंग
|
||
|
|
प्रत्येक डेटाबेस प्रकार के लिए प्रदर्शन निगरानी
|
||
|
|
डेटाबेस उदाहरणों के बीच स्वचालित फेलओवर
|
||
|
|
|
||
|
|
#### 8. उत्तर जनरेटर
|
||
|
|
|
||
|
|
**उद्देश्य**: क्वेरी परिणामों से एक प्राकृतिक भाषा उत्तर का संश्लेषण करता है।
|
||
|
|
|
||
|
|
**एल्गोरिदम विवरण**:
|
||
|
|
उत्तर जनरेटर संरचित क्वेरी परिणामों और मूल प्रश्न को लेता है, और फिर एक व्यापक उत्तर उत्पन्न करने के लिए प्रॉम्प्ट सेवा का उपयोग करता है। साधारण टेम्पलेट-आधारित प्रतिक्रियाओं के विपरीत, यह ग्राफ डेटा को प्रश्न के संदर्भ में व्याख्या करने के लिए एक एलएलएम का उपयोग करता है, जटिल संबंधों, एग्रीगेशन और अनुमानों को संभालता है। जनरेटर ज्ञानकोश संरचना और ग्राफ से प्राप्त विशिष्ट ट्रिपल को संदर्भित करके अपनी तर्कसंगतता को समझा सकता है।
|
||
|
|
|
||
|
|
**उत्तर पीढ़ी प्रक्रिया**:
|
||
|
|
क्वेरी परिणामों को संरचित संदर्भ में प्रारूपित करें
|
||
|
|
स्पष्टता के लिए प्रासंगिक ज्ञानकोश परिभाषाएँ शामिल करें
|
||
|
|
प्रश्न और परिणामों के साथ प्रॉम्प्ट बनाएं
|
||
|
|
एलएलएम के माध्यम से प्राकृतिक भाषा उत्तर उत्पन्न करें
|
||
|
|
क्वेरी इरादे के खिलाफ उत्तर को मान्य करें
|
||
|
|
यदि आवश्यक हो तो विशिष्ट ग्राफ संस्थाओं के लिए उद्धरण जोड़ें
|
||
|
|
|
||
|
|
### मौजूदा सेवाओं के साथ एकीकरण
|
||
|
|
|
||
|
|
#### ग्राफआरएजी के साथ संबंध
|
||
|
|
|
||
|
|
**पूरक**: onto-query सिमेंटिक परिशुद्धता प्रदान करता है जबकि GraphRAG व्यापक कवरेज प्रदान करता है
|
||
|
|
**साझा बुनियादी ढांचा**: दोनों समान ज्ञानकोश और प्रॉम्प्ट सेवाओं का उपयोग करते हैं
|
||
|
|
**क्वेरी रूटिंग**: सिस्टम प्रश्न के प्रकार के आधार पर सबसे उपयुक्त सेवा में प्रश्नों को रूट कर सकता है
|
||
|
|
**हाइब्रिड मोड**: व्यापक उत्तरों के लिए दोनों दृष्टिकोणों को जोड़ सकता है
|
||
|
|
|
||
|
|
#### ऑन्टोरैग निष्कर्षण के साथ संबंध
|
||
|
|
|
||
|
|
**साझा ज्ञानकोश**: kg-extract-ontology द्वारा लोड किए गए समान ज्ञानकोश कॉन्फ़िगरेशन का उपयोग करता है
|
||
|
|
**साझा वेक्टर स्टोर**: निष्कर्षण सेवा से इन-मेमोरी एम्बेडिंग का पुन: उपयोग करता है
|
||
|
|
**संगत सिमेंटिक्स**: क्वेरी समान ऑन्टोलॉजिकल बाधाओं के साथ बनाए गए ग्राफ पर संचालित होती हैं
|
||
|
|
|
||
|
|
### क्वेरी उदाहरण
|
||
|
|
|
||
|
|
#### उदाहरण 1: साधारण इकाई क्वेरी
|
||
|
|
**प्रश्न**: "कौन से जानवर स्तनधारी हैं?"
|
||
|
|
**ज्ञानकोश मिलान**: [जानवर, स्तनधारी, उपवर्ग]
|
||
|
|
**उत्पन्न क्वेरी**:
|
||
|
|
```cypher
|
||
|
|
MATCH (a:animal)-[:subClassOf*]->(m:mammal)
|
||
|
|
RETURN a.name
|
||
|
|
```
|
||
|
|
|
||
|
|
#### उदाहरण 2: संबंध क्वेरी
|
||
|
|
**प्रश्न**: "जॉन स्मिथ द्वारा लिखित कौन से दस्तावेज़ हैं?"
|
||
|
|
**ऑन्टोलॉजी मिलान**: [दस्तावेज़, व्यक्ति, लेखक-है]
|
||
|
|
**उत्पन्न क्वेरी**:
|
||
|
|
```cypher
|
||
|
|
MATCH (d:document)-[:has-author]->(p:person {name: "John Smith"})
|
||
|
|
RETURN d.title, d.date
|
||
|
|
```
|
||
|
|
|
||
|
|
#### उदाहरण 3: एकत्रीकरण क्वेरी
|
||
|
|
**प्रश्न**: "बिल्लियों के कितने पैर होते हैं?"
|
||
|
|
**ऑन्टोलॉजी मिलान**: [बिल्ली, पैरों की संख्या (डेटा प्रकार गुण)]
|
||
|
|
**उत्पन्न क्वेरी**:
|
||
|
|
```cypher
|
||
|
|
MATCH (c:cat)
|
||
|
|
RETURN c.name, c.number_of_legs
|
||
|
|
```
|
||
|
|
|
||
|
|
### कॉन्फ़िगरेशन
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
onto-query:
|
||
|
|
embedding_model: "text-embedding-3-small"
|
||
|
|
vector_store:
|
||
|
|
shared_with_extractor: true # Reuse kg-extract-ontology's store
|
||
|
|
query_builder:
|
||
|
|
model: "gpt-4"
|
||
|
|
temperature: 0.1
|
||
|
|
max_query_length: 1000
|
||
|
|
graph_executor:
|
||
|
|
timeout: 30000 # ms
|
||
|
|
max_results: 1000
|
||
|
|
answer_generator:
|
||
|
|
model: "gpt-4"
|
||
|
|
temperature: 0.3
|
||
|
|
max_tokens: 500
|
||
|
|
```
|
||
|
|
|
||
|
|
### प्रदर्शन अनुकूलन
|
||
|
|
|
||
|
|
#### क्वेरी अनुकूलन
|
||
|
|
|
||
|
|
**ऑन्टोलॉजी छंटाई (Ontology Pruning)**: केवल आवश्यक ऑन्टोलॉजी तत्वों को प्रॉम्प्ट में शामिल करें।
|
||
|
|
**क्वेरी कैशिंग (Query Caching)**: बार-बार पूछे जाने वाले प्रश्नों और उनकी क्वेरी को कैश करें।
|
||
|
|
**परिणाम कैशिंग (Result Caching)**: समान प्रश्नों के लिए परिणामों को एक निश्चित समय अवधि के लिए संग्रहीत करें।
|
||
|
|
**बैच प्रोसेसिंग (Batch Processing)**: एक ही ग्राफ ट्रैवर्सल में कई संबंधित प्रश्नों को संभालें।
|
||
|
|
|
||
|
|
#### स्केलेबिलिटी विचार
|
||
|
|
|
||
|
|
**वितरित निष्पादन (Distributed Execution)**: उप-क्वेरी को ग्राफ विभाजनों में समानांतर करें।
|
||
|
|
**क्रमिक परिणाम (Incremental Results)**: बड़े डेटासेट के लिए परिणामों को स्ट्रीम करें।
|
||
|
|
**लोड बैलेंसिंग (Load Balancing)**: क्वेरी लोड को कई सेवा उदाहरणों में वितरित करें।
|
||
|
|
**संसाधन पूल (Resource Pools)**: ग्राफ डेटाबेस के लिए कनेक्शन पूल का प्रबंधन करें।
|
||
|
|
|
||
|
|
### त्रुटि प्रबंधन
|
||
|
|
|
||
|
|
#### विफलता परिदृश्य
|
||
|
|
|
||
|
|
1. **अमान्य क्वेरी पीढ़ी (Invalid Query Generation)**: GraphRAG या सरल कीवर्ड खोज पर वापस जाएँ।
|
||
|
|
2. **ऑन्टोलॉजी बेमेल (Ontology Mismatch)**: व्यापक ऑन्टोलॉजी उपसमुच्चय में खोज का विस्तार करें।
|
||
|
|
3. **क्वेरी टाइमआउट (Query Timeout)**: क्वेरी को सरल बनाएं या टाइमआउट बढ़ाएं।
|
||
|
|
4. **खाली परिणाम (Empty Results)**: क्वेरी को फिर से तैयार करने या संबंधित प्रश्नों का सुझाव दें।
|
||
|
|
5. **एलएलएम सेवा विफलता (LLM Service Failure)**: कैश किए गए प्रश्नों या टेम्पलेट-आधारित प्रतिक्रियाओं का उपयोग करें।
|
||
|
|
|
||
|
|
### निगरानी मेट्रिक्स
|
||
|
|
|
||
|
|
प्रश्न जटिलता वितरण
|
||
|
|
ऑन्टोलॉजी विभाजन आकार
|
||
|
|
क्वेरी पीढ़ी सफलता दर
|
||
|
|
ग्राफ क्वेरी निष्पादन समय
|
||
|
|
उत्तर गुणवत्ता स्कोर
|
||
|
|
कैश हिट दर
|
||
|
|
त्रुटि आवृत्तियाँ (प्रकार द्वारा)
|
||
|
|
|
||
|
|
## भविष्य के सुधार
|
||
|
|
|
||
|
|
1. **ऑन्टोलॉजी सीखना (Ontology Learning)**: निष्कर्षण पैटर्न के आधार पर स्वचालित रूप से ऑन्टोलॉजी का विस्तार करें।
|
||
|
|
2. **आत्मविश्वास स्कोरिंग (Confidence Scoring)**: निकाले गए त्रिगुटों को आत्मविश्वास स्कोर असाइन करें।
|
||
|
|
3. **स्पष्टीकरण पीढ़ी (Explanation Generation)**: ट्रिपल निष्कर्षण के लिए तर्क प्रदान करें।
|
||
|
|
4. **सक्रिय शिक्षण (Active Learning)**: अनिश्चित निष्कर्षण के लिए मानव सत्यापन का अनुरोध करें।
|
||
|
|
|
||
|
|
## सुरक्षा विचार
|
||
|
|
|
||
|
|
1. **प्रॉम्प्ट इंजेक्शन रोकथाम (Prompt Injection Prevention)**: प्रॉम्प्ट निर्माण से पहले चंक टेक्स्ट को सैनिटाइज करें।
|
||
|
|
2. **संसाधन सीमाएँ (Resource Limits)**: वेक्टर स्टोर के लिए मेमोरी उपयोग को सीमित करें।
|
||
|
|
3. **दर सीमित करना (Rate Limiting)**: प्रति क्लाइंट निष्कर्षण अनुरोधों को सीमित करें।
|
||
|
|
4. **ऑडिट लॉगिंग (Audit Logging)**: सभी निष्कर्षण अनुरोधों और परिणामों को ट्रैक करें।
|
||
|
|
|
||
|
|
## परीक्षण रणनीति
|
||
|
|
|
||
|
|
### यूनिट परीक्षण
|
||
|
|
|
||
|
|
विभिन्न प्रारूपों के साथ ऑन्टोलॉजी लोडर
|
||
|
|
एम्बेडिंग पीढ़ी और भंडारण
|
||
|
|
वाक्य विभाजन एल्गोरिदम
|
||
|
|
वेक्टर समानता गणना
|
||
|
|
ट्रिपल पार्सिंग और सत्यापन
|
||
|
|
|
||
|
|
### एकीकरण परीक्षण
|
||
|
|
|
||
|
|
एंड-टू-एंड निष्कर्षण पाइपलाइन
|
||
|
|
कॉन्फ़िगरेशन सेवा एकीकरण
|
||
|
|
प्रॉम्प्ट सेवा इंटरैक्शन
|
||
|
|
समवर्ती निष्कर्षण हैंडलिंग
|
||
|
|
|
||
|
|
### प्रदर्शन परीक्षण
|
||
|
|
|
||
|
|
बड़े ऑन्टोलॉजी हैंडलिंग (1000+ कक्षाएं)
|
||
|
|
उच्च-मात्रा चंक प्रसंस्करण
|
||
|
|
लोड के तहत मेमोरी उपयोग
|
||
|
|
विलंबता बेंचमार्क
|
||
|
|
|
||
|
|
## वितरण योजना
|
||
|
|
|
||
|
|
### अवलोकन
|
||
|
|
|
||
|
|
OntoRAG सिस्टम को चार प्रमुख चरणों में वितरित किया जाएगा, जिसमें प्रत्येक चरण क्रमिक मूल्य प्रदान करेगा, जबकि पूर्ण सिस्टम की ओर निर्माण करेगा। योजना का ध्यान पहले मुख्य निष्कर्षण क्षमताओं को स्थापित करने पर है, फिर क्वेरी कार्यक्षमता जोड़ने, इसके बाद अनुकूलन और उन्नत सुविधाओं पर।
|
||
|
|
|
||
|
|
### चरण 1: नींव और मुख्य निष्कर्षण
|
||
|
|
|
||
|
|
**लक्ष्य**: सरल वेक्टर मिलान के साथ बुनियादी ऑन्टोलॉजी-संचालित निष्कर्षण पाइपलाइन स्थापित करें।
|
||
|
|
|
||
|
|
#### चरण 1.1: ऑन्टोलॉजी प्रबंधन नींव
|
||
|
|
ऑन्टोलॉजी कॉन्फ़िगरेशन लोडर (`OntologyLoader`) लागू करें
|
||
|
|
ऑन्टोलॉजी JSON संरचनाओं को पार्स और मान्य करें
|
||
|
|
इन-मेमोरी ऑन्टोलॉजी भंडारण और एक्सेस पैटर्न बनाएं
|
||
|
|
ऑन्टोलॉजी रिफ्रेश तंत्र लागू करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
ऑन्टोलॉजी कॉन्फ़िगरेशन को सफलतापूर्वक लोड और पार्स करें
|
||
|
|
ऑन्टोलॉजी संरचना और स्थिरता को मान्य करें
|
||
|
|
कई समवर्ती ऑन्टोलॉजी को संभालें
|
||
|
|
|
||
|
|
#### चरण 1.2: वेक्टर स्टोर कार्यान्वयन
|
||
|
|
प्रारंभिक प्रोटोटाइप के रूप में सरल NumPy-आधारित वेक्टर स्टोर लागू करें
|
||
|
|
FAISS वेक्टर स्टोर कार्यान्वयन जोड़ें
|
||
|
|
वेक्टर स्टोर इंटरफ़ेस एब्स्ट्रैक्शन बनाएं
|
||
|
|
कॉन्फ़िगर करने योग्य थ्रेसहोल्ड के साथ समानता खोज लागू करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
एम्बेडिंग को कुशलतापूर्वक स्टोर और पुनर्प्राप्त करें
|
||
|
|
<100ms विलंबता के साथ समानता खोज करें
|
||
|
|
NumPy और FAISS दोनों बैकएंड का समर्थन करें
|
||
|
|
|
||
|
|
#### चरण 1.3: ऑन्टोलॉजी एम्बेडिंग पाइपलाइन
|
||
|
|
एम्बेडिंग सेवा के साथ एकीकृत करें
|
||
|
|
`OntologyEmbedder` घटक को लागू करें
|
||
|
|
सभी ऑन्टोलॉजी तत्वों के लिए एम्बेडिंग उत्पन्न करें
|
||
|
|
वेक्टर स्टोर में मेटाडेटा के साथ एम्बेडिंग स्टोर करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
कक्षाओं और गुणों के लिए एम्बेडिंग उत्पन्न करें
|
||
|
|
उचित मेटाडेटा के साथ एम्बेडिंग स्टोर करें
|
||
|
|
ऑन्टोलॉजी अपडेट पर एम्बेडिंग को फिर से बनाएं
|
||
|
|
|
||
|
|
#### चरण 1.4: टेक्स्ट प्रोसेसिंग घटक
|
||
|
|
NLTK/spaCy का उपयोग करके वाक्य विभाजक को लागू करें
|
||
|
|
वाक्यांश और नामित संस्थाएं निकालें
|
||
|
|
टेक्स्ट सेगमेंट पदानुक्रम बनाएं
|
||
|
|
टेक्स्ट सेगमेंट के लिए एम्बेडिंग उत्पन्न करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
पाठ को सटीक रूप से वाक्यों में विभाजित करें
|
||
|
|
सार्थक वाक्यांश निकालें
|
||
|
|
संदर्भ संबंधों को बनाए रखें
|
||
|
|
|
||
|
|
#### चरण 1.5: ऑन्टोलॉजी चयन एल्गोरिदम
|
||
|
|
पाठ और ऑन्टोलॉजी के बीच समानता मिलान को लागू करें
|
||
|
|
ऑन्टोलॉजी तत्वों के लिए निर्भरता रिज़ॉल्यूशन बनाएं
|
||
|
|
न्यूनतम सुसंगत ऑन्टोलॉजी उपसमुच्चय बनाएं
|
||
|
|
उपसमुच्चय पीढ़ी प्रदर्शन को अनुकूलित करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
>80% परिशुद्धता के साथ प्रासंगिक ऑन्टोलॉजी तत्वों का चयन करें
|
||
|
|
सभी आवश्यक निर्भरताओं को शामिल करें
|
||
|
|
<500ms में उपसमुच्चय उत्पन्न करें
|
||
|
|
|
||
|
|
#### चरण 1.6: बुनियादी निष्कर्षण सेवा
|
||
|
|
निष्कर्षण के लिए प्रॉम्प्ट निर्माण को लागू करें
|
||
|
|
प्रॉम्प्ट सेवा के साथ एकीकृत करें
|
||
|
|
ट्रिपल प्रतिक्रियाओं को पार्स और मान्य करें
|
||
|
|
`kg-extract-ontology` सेवा एंडपॉइंट बनाएं
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
ऑन्टोलॉजी-अनुरूप ट्रिपल निकालें
|
||
|
|
सभी ट्रिपल को ऑन्टोलॉजी के विरुद्ध मान्य करें
|
||
|
|
निष्कर्षण त्रुटियों को सुचारू रूप से संभालें
|
||
|
|
|
||
|
|
### चरण 2: क्वेरी सिस्टम कार्यान्वयन
|
||
|
|
|
||
|
|
**लक्ष्य**: कई बैकएंड के लिए समर्थन के साथ ऑन्टोलॉजी-जागरूक क्वेरी क्षमताओं को जोड़ें।
|
||
|
|
|
||
|
|
#### चरण 2.1: क्वेरी फाउंडेशन घटक
|
||
|
|
प्रश्न विश्लेषक को लागू करें
|
||
|
|
प्रश्नों के लिए ऑन्टोलॉजी मिलान बनाएं
|
||
|
|
क्वेरी संदर्भ के लिए वेक्टर खोज को अनुकूलित करें
|
||
|
|
बैकएंड राउटर घटक बनाएं
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
प्रश्नों का विश्लेषण करके सिमेंटिक घटकों में बदलें
|
||
|
|
प्रश्नों का मिलान प्रासंगिक ऑन्टोलॉजी तत्वों से करें
|
||
|
|
प्रश्नों को उपयुक्त बैकएंड पर रूट करें
|
||
|
|
|
||
|
|
#### चरण 2.2: SPARQL पथ कार्यान्वयन
|
||
|
|
`onto-query-sparql` सेवा लागू करें
|
||
|
|
LLM का उपयोग करके SPARQL क्वेरी जनरेटर बनाएं
|
||
|
|
SPARQL पीढ़ी के लिए प्रॉम्प्ट टेम्पलेट विकसित करें
|
||
|
|
उत्पन्न SPARQL सिंटैक्स को मान्य करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
मान्य SPARQL क्वेरी उत्पन्न करें
|
||
|
|
उपयुक्त SPARQL पैटर्न का उपयोग करें
|
||
|
|
जटिल क्वेरी प्रकारों को संभालें
|
||
|
|
|
||
|
|
#### चरण 2.3: SPARQL-Cassandra इंजन
|
||
|
|
Cassandra के लिए rdflib Store इंटरफ़ेस लागू करें
|
||
|
|
CQL क्वेरी ट्रांसलेटर बनाएं
|
||
|
|
ट्रिपल पैटर्न मिलान को अनुकूलित करें
|
||
|
|
SPARQL परिणाम स्वरूपण को संभालें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
Cassandra पर SPARQL क्वेरी निष्पादित करें
|
||
|
|
सामान्य SPARQL पैटर्न का समर्थन करें
|
||
|
|
परिणामों को मानक प्रारूप में लौटाएं
|
||
|
|
|
||
|
|
#### चरण 2.4: Cypher पथ कार्यान्वयन
|
||
|
|
`onto-query-cypher` सेवा लागू करें
|
||
|
|
LLM का उपयोग करके Cypher क्वेरी जनरेटर बनाएं
|
||
|
|
Cypher पीढ़ी के लिए प्रॉम्प्ट टेम्पलेट विकसित करें
|
||
|
|
उत्पन्न Cypher सिंटैक्स को मान्य करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
मान्य Cypher क्वेरी उत्पन्न करें
|
||
|
|
उपयुक्त ग्राफ पैटर्न का उपयोग करें
|
||
|
|
Neo4j, Memgraph, FalkorDB का समर्थन करें
|
||
|
|
|
||
|
|
#### चरण 2.5: Cypher निष्पादक
|
||
|
|
मल्टी-डेटाबेस साइफर एग्जीक्यूटर को लागू करें
|
||
|
|
बॉल्ट प्रोटोकॉल (Neo4j/Memgraph) का समर्थन करें
|
||
|
|
रेडिस प्रोटोकॉल (FalkorDB) का समर्थन करें
|
||
|
|
परिणाम सामान्यीकरण को संभालें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
सभी लक्षित डेटाबेस पर साइफर को निष्पादित करें
|
||
|
|
डेटाबेस-विशिष्ट अंतरों को संभालें
|
||
|
|
कनेक्शन पूल को कुशलतापूर्वक बनाए रखें
|
||
|
|
|
||
|
|
#### चरण 2.6: उत्तर पीढ़ी
|
||
|
|
उत्तर जनरेटर घटक को लागू करें
|
||
|
|
उत्तर संश्लेषण के लिए संकेत बनाएं
|
||
|
|
एलएलएम (LLM) के उपयोग के लिए क्वेरी परिणामों को प्रारूपित करें
|
||
|
|
प्राकृतिक भाषा में उत्तर उत्पन्न करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
क्वेरी परिणामों से सटीक उत्तर उत्पन्न करें
|
||
|
|
मूल प्रश्न से संदर्भ बनाए रखें
|
||
|
|
स्पष्ट, संक्षिप्त प्रतिक्रियाएं प्रदान करें
|
||
|
|
|
||
|
|
### चरण 3: अनुकूलन और मजबूती
|
||
|
|
|
||
|
|
**लक्ष्य**: प्रदर्शन को अनुकूलित करें, कैशिंग जोड़ें, त्रुटि प्रबंधन में सुधार करें और विश्वसनीयता बढ़ाएं।
|
||
|
|
|
||
|
|
#### चरण 3.1: प्रदर्शन अनुकूलन
|
||
|
|
एम्बेडिंग कैशिंग को लागू करें
|
||
|
|
क्वेरी परिणाम कैशिंग जोड़ें
|
||
|
|
FAISS IVF इंडेक्स के साथ वेक्टर खोज को अनुकूलित करें
|
||
|
|
एम्बेडिंग के लिए बैच प्रोसेसिंग को लागू करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
औसत क्वेरी विलंबता को 50% तक कम करें
|
||
|
|
10 गुना अधिक समवर्ती अनुरोधों का समर्थन करें
|
||
|
|
उप-सेकंड प्रतिक्रिया समय बनाए रखें
|
||
|
|
|
||
|
|
#### चरण 3.2: उन्नत त्रुटि प्रबंधन
|
||
|
|
व्यापक त्रुटि रिकवरी को लागू करें
|
||
|
|
क्वेरी पथों के बीच फॉलबैक तंत्र जोड़ें
|
||
|
|
घातीय बैकऑफ़ के साथ रीट्राय लॉजिक बनाएं
|
||
|
|
त्रुटि लॉगिंग और निदान में सुधार करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
सभी विफलता परिदृश्यों को सुचारू रूप से संभालें
|
||
|
|
बैकएंड के बीच स्वचालित फेलओवर
|
||
|
|
डिबगिंग के लिए विस्तृत त्रुटि रिपोर्टिंग
|
||
|
|
|
||
|
|
#### चरण 3.3: निगरानी और अवलोकनशीलता
|
||
|
|
प्रदर्शन मेट्रिक्स संग्रह जोड़ें
|
||
|
|
क्वेरी ट्रेसिंग को लागू करें
|
||
|
|
स्वास्थ्य जांच एंडपॉइंट बनाएं
|
||
|
|
संसाधन उपयोग निगरानी जोड़ें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
सभी प्रमुख प्रदर्शन संकेतकों को ट्रैक करें
|
||
|
|
बाधाओं की पहचान जल्दी करें
|
||
|
|
सिस्टम स्वास्थ्य की वास्तविक समय में निगरानी करें
|
||
|
|
|
||
|
|
#### चरण 3.4: कॉन्फ़िगरेशन प्रबंधन
|
||
|
|
गतिशील कॉन्फ़िगरेशन अपडेट को लागू करें
|
||
|
|
कॉन्फ़िगरेशन सत्यापन जोड़ें
|
||
|
|
कॉन्फ़िगरेशन टेम्प्लेट बनाएं
|
||
|
|
पर्यावरण-विशिष्ट सेटिंग्स का समर्थन करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
पुनरारंभ किए बिना कॉन्फ़िगरेशन अपडेट करें
|
||
|
|
सभी कॉन्फ़िगरेशन परिवर्तनों को मान्य करें
|
||
|
|
कई परिनियोजन वातावरण का समर्थन करें
|
||
|
|
|
||
|
|
### चरण 4: उन्नत सुविधाएँ
|
||
|
|
|
||
|
|
**लक्ष्य**: उत्पादन परिनियोजन और बेहतर कार्यक्षमता के लिए परिष्कृत क्षमताएं जोड़ें।
|
||
|
|
|
||
|
|
#### चरण 4.1: मल्टी-ऑन्टोलॉजी समर्थन
|
||
|
|
ऑन्टोलॉजी चयन तर्क को लागू करें
|
||
|
|
क्रॉस-ऑन्टोलॉजी क्वेरी का समर्थन करें
|
||
|
|
ऑन्टोलॉजी संस्करण नियंत्रण को संभालें
|
||
|
|
ऑन्टोलॉजी मर्ज क्षमताएं बनाएं
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
कई ऑन्टोलॉजी पर क्वेरी करें
|
||
|
|
ऑन्टोलॉजी संघर्षों को संभालें
|
||
|
|
ऑन्टोलॉजी विकास का समर्थन करें
|
||
|
|
|
||
|
|
#### चरण 4.2: इंटेलिजेंट क्वेरी रूटिंग
|
||
|
|
प्रदर्शन-आधारित रूटिंग को लागू करें
|
||
|
|
क्वेरी जटिलता विश्लेषण जोड़ें
|
||
|
|
अनुकूली रूटिंग एल्गोरिदम बनाएं
|
||
|
|
रास्तों के लिए A/B परीक्षण का समर्थन करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
क्वेरी को इष्टतम रूप से रूट करें
|
||
|
|
क्वेरी प्रदर्शन से सीखें
|
||
|
|
समय के साथ रूटिंग में सुधार करें
|
||
|
|
|
||
|
|
#### चरण 4.3: उन्नत निष्कर्षण विशेषताएं
|
||
|
|
त्रिपुंजों के लिए आत्मविश्वास स्कोरिंग जोड़ें
|
||
|
|
स्पष्टीकरण पीढ़ी को लागू करें
|
||
|
|
सुधार के लिए प्रतिक्रिया लूप बनाएं
|
||
|
|
वृद्धिशील सीखने का समर्थन करें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
आत्मविश्वास स्कोर प्रदान करें
|
||
|
|
निष्कर्षण निर्णयों की व्याख्या करें
|
||
|
|
सटीकता में लगातार सुधार करें
|
||
|
|
|
||
|
|
#### चरण 4.4: उत्पादन कठोरता
|
||
|
|
दर सीमित करना जोड़ें
|
||
|
|
प्रमाणीकरण/प्राधिकरण लागू करें
|
||
|
|
परिनियोजन स्वचालन बनाएं
|
||
|
|
बैकअप और रिकवरी जोड़ें
|
||
|
|
|
||
|
|
**सफलता मानदंड**:
|
||
|
|
उत्पादन-तैयार सुरक्षा
|
||
|
|
स्वचालित परिनियोजन पाइपलाइन
|
||
|
|
आपदा रिकवरी क्षमता
|
||
|
|
|
||
|
|
### वितरण मील के पत्थर
|
||
|
|
|
||
|
|
1. **मील का पत्थर 1** (चरण 1 का अंत): बुनियादी ऑन्टोलॉजी-संचालित निष्कर्षण परिचालन
|
||
|
|
2. **मील का पत्थर 2** (चरण 2 का अंत): SPARQL और Cypher दोनों पथों के साथ पूर्ण क्वेरी सिस्टम
|
||
|
|
3. **मील का पत्थर 3** (चरण 3 का अंत): अनुकूलित, मजबूत सिस्टम जो स्टेजिंग के लिए तैयार है
|
||
|
|
4. **मील का पत्थर 4** (चरण 4 का अंत): उन्नत सुविधाओं के साथ उत्पादन-तैयार सिस्टम
|
||
|
|
|
||
|
|
### जोखिम शमन
|
||
|
|
|
||
|
|
#### तकनीकी जोखिम
|
||
|
|
**वेक्टर स्टोर स्केलेबिलिटी**: NumPy के साथ शुरू करें, धीरे-धीरे FAISS में माइग्रेट करें
|
||
|
|
**क्वेरी पीढ़ी सटीकता**: सत्यापन और बैकअप तंत्र लागू करें
|
||
|
|
**बैकएंड संगतता**: प्रत्येक डेटाबेस प्रकार के साथ व्यापक रूप से परीक्षण करें
|
||
|
|
**प्रदर्शन बाधाएं**: जल्दी और अक्सर प्रोफाइल करें, पुनरावृत्त रूप से अनुकूलित करें
|
||
|
|
|
||
|
|
#### परिचालन जोखिम
|
||
|
|
**ऑन्टोलॉजी गुणवत्ता**: सत्यापन और स्थिरता जांच लागू करें
|
||
|
|
**सेवा निर्भरताएँ**: सर्किट ब्रेकर और बैकअप जोड़ें
|
||
|
|
**संसाधन बाधाएँ**: मॉनिटर करें और उचित सीमाएँ निर्धारित करें
|
||
|
|
**डेटा स्थिरता**: उचित लेनदेन हैंडलिंग लागू करें
|
||
|
|
|
||
|
|
### सफलता मेट्रिक्स
|
||
|
|
|
||
|
|
#### चरण 1 सफलता मेट्रिक्स
|
||
|
|
निष्कर्षण सटीकता: >90% ऑन्टोलॉजी अनुरूपता
|
||
|
|
प्रसंस्करण गति: <1 सेकंड प्रति टुकड़ा
|
||
|
|
ऑन्टोलॉजी लोड समय: <10 सेकंड
|
||
|
|
वेक्टर खोज विलंबता: <100ms
|
||
|
|
|
||
|
|
#### चरण 2 सफलता मेट्रिक्स
|
||
|
|
क्वेरी सफलता दर: >95%
|
||
|
|
क्वेरी विलंबता: <2 सेकंड एंड-टू-एंड
|
||
|
|
बैकएंड संगतता: लक्षित डेटाबेस के लिए 100%
|
||
|
|
उत्तर सटीकता: उपलब्ध डेटा के आधार पर >85%
|
||
|
|
|
||
|
|
#### चरण 3 सफलता मेट्रिक्स
|
||
|
|
सिस्टम अपटाइम: >99.9%
|
||
|
|
त्रुटि रिकवरी दर: >95%
|
||
|
|
कैश हिट दर: >60%
|
||
|
|
समवर्ती उपयोगकर्ता: >100
|
||
|
|
|
||
|
|
#### चरण 4 सफलता मेट्रिक्स
|
||
|
|
मल्टी-ऑन्टोलॉजी क्वेरी: पूरी तरह से समर्थित
|
||
|
|
रूटिंग अनुकूलन: 30% विलंबता में कमी
|
||
|
|
आत्मविश्वास स्कोरिंग सटीकता: >90%
|
||
|
|
उत्पादन परिनियोजन: शून्य-डाउनटाइम अपडेट
|
||
|
|
|
||
|
|
## संदर्भ
|
||
|
|
|
||
|
|
[OWL 2 वेब ऑन्टोलॉजी भाषा](https://www.w3.org/TR/owl2-overview/)
|
||
|
|
[GraphRAG आर्किटेक्चर](https://github.com/microsoft/graphrag)
|
||
|
|
[वाक्य ट्रांसफॉर्मर](https://www.sbert.net/)
|
||
|
|
[FAISS वेक्टर खोज](https://github.com/facebookresearch/faiss)
|
||
|
|
[spaCy एनएलपी लाइब्रेरी](https://spacy.io/)
|
||
|
|
[rdflib प्रलेखन](https://rdflib.readthedocs.io/)
|
||
|
|
[Neo4j बोल्ट प्रोटोकॉल](https://neo4j.com/docs/bolt/current/)
|