paint-brush
स्वचालित पाठ निष्कर्षण और विश्लेषण के लिए मिनियो और अपाचे टिका का लाभ उठानाद्वारा@minio
8,089 रीडिंग
8,089 रीडिंग

स्वचालित पाठ निष्कर्षण और विश्लेषण के लिए मिनियो और अपाचे टिका का लाभ उठाना

द्वारा MinIO7m2024/04/11
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

इस पोस्ट में, हम दस्तावेज़ पाठ निष्कर्षण के लिए मिनियो बकेट नोटिफिकेशन और अपाचे टिका का उपयोग करेंगे, जो कि लार्ज लैंग्वेज मॉडल (एलएलएम) प्रशिक्षण और रिट्रीवल ऑगमेंटेड जेनरेशन (आरएजी) जैसे महत्वपूर्ण डाउनस्ट्रीम कार्यों का मूल है।
featured image - स्वचालित पाठ निष्कर्षण और विश्लेषण के लिए मिनियो और अपाचे टिका का लाभ उठाना
MinIO HackerNoon profile picture
0-item
1-item


इस पोस्ट में, हम दस्तावेज़ पाठ निष्कर्षण के लिए मिनियो बकेट नोटिफिकेशन और अपाचे टिका का उपयोग करेंगे, जो कि लार्ज लैंग्वेज मॉडल ( एलएलएम ) प्रशिक्षण और रिट्रीवल ऑग्मेंटेड जेनरेशन ( आरएजी ) जैसे महत्वपूर्ण डाउनस्ट्रीम कार्यों के केंद्र में है।


परिसर

मान लीजिए कि मैं पाठ का एक डेटासेट बनाना चाहता हूं जिसका उपयोग मैं बाद में कर सकता हूं फ़ाइन ट्यून एक एलएलएम। ऐसा करने के लिए, हमें सबसे पहले विभिन्न दस्तावेज़ों (जो उनके स्रोत के कारण अलग-अलग फ़ॉर्म-फ़ैक्टर में हो सकते हैं) को इकट्ठा करना होगा और उनसे टेक्स्ट निकालना होगा। डेटासेट सुरक्षा और ऑडिटेबिलिटी सर्वोपरि है, इसलिए इन असंरचित दस्तावेज़ों को मिलान करने के लिए ऑब्जेक्ट स्टोर में संग्रहीत करने की आवश्यकता है। मिनियो ऑब्जेक्ट स्टोर है जिसे इसके लिए बनाया गया है इन स्थितियों और अधिक दूसरी ओर, अपाचे टिका एक टूलकिट है जो "एक हज़ार से ज़्यादा अलग-अलग फ़ाइल प्रकारों (जैसे कि PPT, XLS और PDF) से मेटाडेटा और टेक्स्ट का पता लगाता है और उसे निकालता है।" साथ मिलकर, वे एक ऐसी प्रणाली बनाते हैं जो हमारे उद्देश्य को प्राप्त कर सकती है।


एक पुरानी पोस्ट में , हमने बॉक्स से बाहर निकलते ही MinIO के साथ एक ऑब्जेक्ट डिटेक्शन इंफरेंस सर्वर बनाया और लगभग 30 लाइन कोड का इस्तेमाल किया। हम एक बार फिर से उस अत्यधिक पोर्टेबल और दोहराए जाने वाले आर्किटेक्चर का लाभ उठाने जा रहे हैं, इस बार टेक्स्ट एक्सट्रैक्शन के कार्य के लिए। नीचे उस सिस्टम का एक मोटा चित्रण है जिसे हम बनाने जा रहे हैं।




अपाचे टिका की स्थापना

अपाचे टिका को चालू करने का सबसे सरल तरीका है आधिकारिक Docker छवि अपने इच्छित टिका छवि संस्करण/टैग के लिए डॉकर हब की जाँच करें।



इस उदाहरण में, मैं इसे डिफ़ॉल्ट पोर्ट, 9998 का उपयोग करने और उसे प्रदर्शित करने की अनुमति देता हूँ।


 docker pull apache/tika:<version> docker run -d -p 127.0.0.1:9998:9998 apache/tika:<version>


यह सत्यापित करने के लिए कि टिका कंटेनर चल रहा है और पोर्ट 9998 प्रदर्शित है, docker ps या Docker Desktop का उपयोग करें।


टेक्स्ट एक्स्ट्रैक्शन सर्वर का निर्माण

अब जब टिका चल रहा है, तो हमें एक ऐसा सर्वर बनाने की ज़रूरत है जो नए ऑब्जेक्ट के लिए प्रोग्रामेटिक रूप से टिका निष्कर्षण अनुरोध कर सके। इसके बाद, हमें नए ऑब्जेक्ट (दूसरे शब्दों में, बकेट के लिए PUT इवेंट) के आगमन के बारे में इस सर्वर को सचेत करने के लिए एक मिनियो बकेट पर वेबहुक कॉन्फ़िगर करने की ज़रूरत है। आइए इसे चरण-दर-चरण देखें।


चीजों को अपेक्षाकृत सरल रखने और इस दृष्टिकोण की पोर्टेबिलिटी को उजागर करने के लिए, टेक्स्ट एक्सट्रैक्शन सर्वर को लोकप्रिय फ्लास्क फ्रेमवर्क का उपयोग करके पायथन में बनाया जाएगा। सर्वर के लिए कोड यहाँ दिया गया है (मिनियो ब्लॉग रिसोर्स रिपॉजिटरी में भी उपलब्ध है) निष्कर्षण_सर्वर.py ) जो टिका (के माध्यम से) के उपयोग से बकेट में जोड़े गए नए दस्तावेज़ों पर पाठ निष्कर्षण करता है टिका-पायथन ).


 """ This is a simple Flask text extraction server that functions as a webhook service endpoint for PUT events in a MinIO bucket. Apache Tika is used to extract the text from the new objects. """ from flask import Flask, request, abort, make_response import io import logging from tika import parser from minio import Minio # Make sure the following are populated with your MinIO details # (Best practice is to use environment variables!) MINIO_ENDPOINT = '' MINIO_ACCESS_KEY = '' MINIO_SECRET_KEY = '' # This depends on how you are deploying Tika (and this server): TIKA_SERVER_URL = 'http://localhost:9998/tika' client = Minio( MINIO_ENDPOINT, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, ) logger = logging.getLogger(__name__) app = Flask(__name__) @app.route('/', methods=['POST']) async def text_extraction_webhook(): """ This endpoint will be called when a new object is placed in the bucket """ if request.method == 'POST': # Get the request event from the 'POST' call event = request.json bucket = event['Records'][0]['s3']['bucket']['name'] obj_name = event['Records'][0]['s3']['object']['key'] obj_response = client.get_object(bucket, obj_name) obj_bytes = obj_response.read() file_like = io.BytesIO(obj_bytes) parsed_file = parser.from_buffer(file_like.read(), serverEndpoint=TIKA_SERVER_URL) text = parsed_file["content"] metadata = parsed_file["metadata"] logger.info(text) result = { "text": text, "metadata": metadata } resp = make_response(result, 200) return resp else: abort(400) if __name__ == '__main__': app.run()


आइये निष्कर्षण सर्वर शुरू करें:



उस होस्टनाम और पोर्ट को नोट कर लें जिस पर फ्लास्क एप्लिकेशन चल रहा है।


बकेट नोटिफ़िकेशन सेट अप करना

अब, बस इतना ही बाकी है कि मिनियो सर्वर पर बकेट के लिए वेबहुक को कॉन्फ़िगर किया जाए ताकि बकेट में कोई भी PUT इवेंट (उर्फ, जोड़े गए नए ऑब्जेक्ट) एक्सट्रैक्शन एंडपॉइंट पर कॉल को ट्रिगर कर सके। mc टूल के साथ, हम इसे बस कुछ कमांड में कर सकते हैं।


सबसे पहले, हमें आपके MinIO सर्वर को यह संकेत देने के लिए कुछ पर्यावरण चर सेट करने की आवश्यकता है कि आप एक वेबहुक और संबंधित एंडपॉइंट को सक्षम कर रहे हैं जिसे कॉल किया जाना है। <YOURFUNCTIONNAME> को अपनी पसंद के फ़ंक्शन नाम से बदलें। सरलता के लिए, मैंने 'एक्सट्रैक्शन' का विकल्प चुना। साथ ही, सुनिश्चित करें कि एंडपॉइंट पर्यावरण चर आपके इंफ़रेंस सर्वर के लिए सही होस्ट और पोर्ट पर सेट है। इस मामले में, http://localhost:5000 वह जगह है जहाँ हमारा फ़्लैस्क एप्लिकेशन चल रहा है।


 export MINIO_NOTIFY_WEBHOOK_ENABLE_<YOURFUNCTIONNAME>=on export MINIO_NOTIFY_WEBHOOK_ENDPOINT_<YOURFUNCTIONNAME>=http://localhost:5000


एक बार जब आप इन पर्यावरण चर को सेट कर लेते हैं, तो प्रारंभ करें मिनियो सर्वर (या यदि यह पहले से चल रहा था, इसे पुनः आरंभ करें )। निम्नलिखित चरणों में, हमें आपके MinIO सर्वर परिनियोजन के लिए एक 'उपनाम' की आवश्यकता होगी। उपनामों और उन्हें सेट करने के तरीके के बारे में अधिक जानने के लिए, देखें प्रलेखन हम mc , मिनियो क्लाइंट कमांड लाइन टूल का भी उपयोग करेंगे, इसलिए सुनिश्चित करें कि आपके पास यह है इंस्टॉल किया .


इसके बाद, आइए अपनी बकेट के लिए इवेंट नोटिफिकेशन और उस इवेंट के प्रकार को कॉन्फ़िगर करें जिसके बारे में हमें सूचना चाहिए। इस प्रोजेक्ट के उद्देश्यों के लिए, मैंने एक बिलकुल नई बकेट बनाई है जिसका नाम ' एक्सट्रैक्शन ' भी है। आप ऐसा या तो कर सकते हैं मिनियो कंसोल के माध्यम से या mc आदेश चूँकि हम ' एक्सट्रैक्शन' बकेट में नए ऑब्जेक्ट जोड़ने पर वेबहुक को ट्रिगर करना चाहते हैं, इसलिए PUT इवेंट हमारा फोकस हैं। ALIAS को अपने MinIO सर्वर परिनियोजन के उपनाम से और BUCKET को उस सर्वर पर वांछित बकेट से बदलें। पहले की तरह, <YOURFUNCTIONNAME> को उसी मान से बदलना सुनिश्चित करें जिसका आपने पिछले चरण में उपयोग किया था।


 mc event add ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook --event put


अंत में, आप यह जाँच कर सकते हैं कि आपने बकेट नोटिफिकेशन के लिए सही इवेंट प्रकार कॉन्फ़िगर किया है या नहीं, इसके लिए आपको यह सत्यापित करना होगा कि जब आप यह कमांड चलाते हैं s3:ObjectCreated:* आउटपुट होता है या नहीं:


 mc event ls ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook


यदि आप वेबहुक पर बकेट इवेंट प्रकाशित करने के बारे में अधिक जानना चाहते हैं, तो देखें डॉक्टर साथ ही इस पर टिप्पणी ईवेंट नोटिफिकेशन में गहराई से उतरें अब, हम अपने टेक्स्ट एक्सट्रैक्शन सर्वर को आज़माने के लिए तैयार हैं।


कोशिश करके देखो

यहाँ एक दस्तावेज़ है जिससे मैं पाठ निकालना चाहता हूँ। यह एक है कमोडिटीज फ्यूचर मॉडर्नाइजेशन एक्ट 2000 की पीडीएफ संयुक्त राज्य अमेरिका में वित्तीय कानून का एक प्रभावशाली हिस्सा।



मैंने मिनियो कंसोल का उपयोग करके इस पीडीएफ को अपने ' एक्सट्रैक्शन ' बकेट में डाल दिया।



यह PUT इवेंट एक बकेट नोटिफिकेशन को ट्रिगर करता है जो फिर एक्सट्रैक्शन सर्वर एंडपॉइंट पर प्रकाशित हो जाता है। तदनुसार, टेक्स्ट को टिका द्वारा एक्सट्रैक्ट किया जाता है और कंसोल पर प्रिंट किया जाता है।



अगले कदम


हालाँकि हम अभी निकाले गए पाठ को ही प्रिंट कर रहे हैं, लेकिन इस पाठ का उपयोग कई डाउनस्ट्रीम कार्यों के लिए किया जा सकता था, जैसा कि प्रीमाइस में संकेत दिया गया है। उदाहरण के लिए:


  1. LLM फ़ाइन-ट्यूनिंग के लिए डेटासेट निर्माण : कल्पना करें कि आप कॉर्पोरेट दस्तावेज़ों के संग्रह पर एक बड़े भाषा मॉडल को फ़ाइन-ट्यून करना चाहते हैं जो विभिन्न फ़ाइल स्वरूपों (जैसे, PDF, DOCX, PPTX, Markdown, आदि) में मौजूद हैं। इस कार्य के लिए LLM-अनुकूल, टेक्स्ट डेटासेट बनाने के लिए, आप इन सभी दस्तावेज़ों को एक समान वेबहुक के साथ कॉन्फ़िगर किए गए MinIO बकेट में एकत्र कर सकते हैं और प्रत्येक दस्तावेज़ के लिए निकाले गए टेक्स्ट को फ़ाइन-ट्यूनिंग/ट्रेनिंग सेट के डेटाफ़्रेम में पास कर सकते हैं। इसके अलावा, अपने डेटासेट की स्रोत फ़ाइलों को MinIO पर रखने से, आपके डेटासेट की संरचना को प्रबंधित करना, ऑडिट करना और ट्रैक करना बहुत आसान हो जाता है।


  2. रिट्रीवल ऑगमेंटेड जेनरेशन : RAG एक ऐसा तरीका है जिससे LLM एप्लिकेशन सटीक संदर्भ का उपयोग कर सकते हैं और भ्रम से बच सकते हैं। इस दृष्टिकोण का एक केंद्रीय पहलू यह सुनिश्चित करना है कि आपके दस्तावेज़ों का टेक्स्ट निकाला जा सकता है और फिर वेक्टर में एम्बेड किया जा सकता है, जिससे सिमेंटिक खोज सक्षम हो सके। इसके अलावा, इन वेक्टरों के वास्तविक स्रोत दस्तावेज़ों को ऑब्जेक्ट स्टोर (जैसे मिनियो!) में संग्रहीत करना आम तौर पर एक सर्वोत्तम अभ्यास है। इस पोस्ट में उल्लिखित दृष्टिकोण के साथ, आप दोनों को आसानी से प्राप्त कर सकते हैं। यदि आप RAG और इसके लाभों के बारे में अधिक जानना चाहते हैं, तो इसे देखें पहले की पोस्ट .


  3. एलएलएम एप्लीकेशन : नए स्टोर किए गए दस्तावेज़ से टेक्स्ट को तुरंत निकालने के लिए प्रोग्रामेटिक तरीके से, संभावनाएं अनंत हैं, खासकर यदि आप एलएलएम का उपयोग कर सकते हैं। कीवर्ड डिटेक्शन (यानी, प्रॉम्प्ट: “कौन से स्टॉक टिकर का उल्लेख किया गया है?”), कंटेंट असेसमेंट (यानी, प्रॉम्प्ट: “रूब्रिक के अनुसार, इस निबंध सबमिशन को क्या स्कोर मिलना चाहिए?), या लगभग किसी भी तरह का टेक्स्ट-आधारित विश्लेषण (यानी, प्रॉम्प्ट: “इस लॉग आउटपुट के आधार पर, पहली त्रुटि कब हुई?”) के बारे में सोचें।


इन कार्यों के लिए बकेट नोटिफिकेशन की उपयोगिता के अलावा, मिनियो को किसी भी प्रकार और संख्या में ऑब्जेक्ट्स के लिए विश्व स्तरीय दोष सहिष्णुता और प्रदर्शन प्रदान करने के लिए बनाया गया है - चाहे वे पावरपॉइंट, छवियां या कोड स्निपेट हों।


यदि आपके कोई प्रश्न हों तो हमसे जुड़ें स्लैक चैनल या हमें एक नोट भेजें [email protected] । हम यहां आपकी सहायता के लिए उपलब्ध हैं।