এই পোস্টে, আমরা ডকুমেন্ট টেক্সট এক্সট্র্যাকশনের জন্য MinIO বাকেট নোটিফিকেশন এবং অ্যাপাচি টিকা ব্যবহার করব, যা লার্জ ল্যাঙ্গুয়েজ মডেল ( এলএলএম ) ট্রেনিং এবং রিট্রিভাল অগমেন্টেড জেনারেশন ( আরএজি ) এর মতো গুরুত্বপূর্ণ ডাউনস্ট্রিম কাজের কেন্দ্রবিন্দুতে।
ধরা যাক যে আমি পাঠ্যের একটি ডেটাসেট তৈরি করতে চাই যা আমি তখন ব্যবহার করতে পারি
অ্যাপাচি টিকা চালু করার সবচেয়ে সহজ উপায় হল এর সাথে
এই উদাহরণে, আমি এটিকে ডিফল্ট পোর্ট, 9998 ব্যবহার এবং প্রকাশ করার অনুমতি দিই।
docker pull apache/tika:<version> docker run -d -p 127.0.0.1:9998:9998 apache/tika:<version>
টিকা কন্টেইনার চলছে এবং পোর্ট 9998 প্রকাশ করেছে তা যাচাই করতে docker ps
বা ডকার ডেস্কটপ ব্যবহার করুন।
এখন যেহেতু টিকা চলছে, আমাদের এমন একটি সার্ভার তৈরি করতে হবে যা প্রোগ্রামেটিকভাবে নতুন বস্তুর জন্য টিকা নিষ্কাশনের অনুরোধ করতে পারে। এর পরে, আমাদের একটি MinIO বালতিতে ওয়েবহুকগুলি কনফিগার করতে হবে যাতে এই সার্ভারটিকে নতুন বস্তুর আগমন সম্পর্কে সতর্ক করা যায় (অন্য কথায়, একটি বালতির জন্য ইভেন্টগুলি রাখুন)৷ এর মধ্যে দিয়ে ধাপে ধাপে হাঁটা যাক।
জিনিসগুলি তুলনামূলকভাবে সহজ রাখতে এবং এই পদ্ধতির বহনযোগ্যতা হাইলাইট করার জন্য, জনপ্রিয় ফ্লাস্ক ফ্রেমওয়ার্ক ব্যবহার করে পাইথনে পাঠ্য নিষ্কাশন সার্ভার তৈরি করা হবে। এখানে সার্ভারের জন্য কোড রয়েছে (এর অধীনে MinIO ব্লগ রিসোর্সেস রিপোজিটরিতেও উপলব্ধ
""" 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()
এক্সট্রাকশন সার্ভার শুরু করা যাক:
ফ্লাস্ক অ্যাপ্লিকেশনটি যে হোস্টনেম এবং পোর্টে চলছে তা নোট করুন।
এখন, যা বাকি আছে তা হল MinIO সার্ভারে বালতির জন্য ওয়েবহুক কনফিগার করা যাতে বালতিতে থাকা যেকোনো PUT ইভেন্ট (ওরফে, নতুন বস্তু যোগ করা) নিষ্কাশনের শেষ পয়েন্টে একটি কল ট্রিগার করে। mc
টুলের সাহায্যে, আমরা মাত্র কয়েকটি কমান্ডে এটি করতে পারি।
প্রথমে, আপনার MinIO সার্ভারে সংকেত দেওয়ার জন্য আমাদের কয়েকটি পরিবেশের ভেরিয়েবল সেট করতে হবে যে আপনি একটি ওয়েবহুক সক্ষম করছেন এবং সংশ্লিষ্ট এন্ডপয়েন্ট কল করা হবে। আপনার পছন্দের একটি ফাংশন নাম দিয়ে <YOURFUNCTIONNAME> প্রতিস্থাপন করুন। সরলতার জন্য, আমি 'নিষ্কাশন' দিয়ে গিয়েছিলাম। এছাড়াও, নিশ্চিত করুন যে এন্ডপয়েন্ট এনভায়রনমেন্ট ভেরিয়েবল আপনার ইনফারেন্স সার্ভারের জন্য সঠিক হোস্ট এবং পোর্টে সেট করা আছে। এই ক্ষেত্রে, http://localhost:5000 যেখানে আমাদের ফ্লাস্ক অ্যাপ্লিকেশন চলছে।
export MINIO_NOTIFY_WEBHOOK_ENABLE_<YOURFUNCTIONNAME>=on export MINIO_NOTIFY_WEBHOOK_ENDPOINT_<YOURFUNCTIONNAME>=http://localhost:5000
একবার আপনি এই এনভায়রনমেন্ট ভেরিয়েবল সেট করার পরে, শুরু করুনmc
, MinIO ক্লায়েন্ট কমান্ড লাইন টুল ব্যবহার করব, তাই আপনার কাছে এটি আছে তা নিশ্চিত করুন
এর পরে, আসুন আমাদের বালতির জন্য ইভেন্ট বিজ্ঞপ্তি কনফিগার করি এবং আমরা যে ধরনের ইভেন্ট সম্পর্কে অবহিত হতে চাই। এই প্রকল্পের উদ্দেশ্যে, আমি একটি নতুন বালতি তৈরি করেছি যার নাম ' নিষ্কাশন '। আপনি এটিও করতে পারেনmc
mc event add ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook --event put
অবশেষে, আপনি এই কমান্ডটি চালানোর সময় s3:ObjectCreated:*
আউটপুট হয়েছে কিনা তা যাচাই করে আপনি বালতি বিজ্ঞপ্তিগুলির জন্য সঠিক ইভেন্টের ধরনটি কনফিগার করেছেন কিনা তা পরীক্ষা করতে পারেন:
mc event ls ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook
আপনি যদি ওয়েবহুকে বালতি ইভেন্ট প্রকাশ করার বিষয়ে আরও জানতে চান, তাহলে দেখুন
এখানে একটি নথি যা থেকে আমি পাঠ্য বের করতে চাই। এটা একটা
আমি MinIO কনসোল ব্যবহার করে এই পিডিএফটি আমার ' এক্সট্রাকশন ' বালতিতে রেখেছি।
এই PUT ইভেন্টটি একটি বালতি বিজ্ঞপ্তি ট্রিগার করে যা তারপর এক্সট্রাকশন সার্ভার এন্ডপয়েন্টে প্রকাশিত হয়। তদনুসারে, পাঠ্যটি টিকা দ্বারা নিষ্কাশন করা হয় এবং কনসোলে প্রিন্ট করা হয়।
যদিও আমরা আপাতত এক্সট্রাক্ট করা টেক্সট মুদ্রণ করছি, এই টেক্সটটি অনেক ডাউনস্ট্রিম কাজের জন্য ব্যবহার করা যেত, যেমন The Premise-এ ইঙ্গিত দেওয়া হয়েছে। উদাহরণ স্বরূপ:
এলএলএম ফাইন-টিউনিংয়ের জন্য ডেটাসেট তৈরি : কল্পনা করুন যে আপনি বিভিন্ন ধরনের ফাইল ফরম্যাটে (যেমন, পিডিএফ, ডিওসিএক্স, পিপিটিএক্স, মার্কডাউন, ইত্যাদি) বিদ্যমান কর্পোরেট নথির সংগ্রহে একটি বৃহৎ ভাষার মডেল ফাইন-টিউন করতে চান। এই কাজের জন্য LLM-বান্ধব, পাঠ্য ডেটাসেট তৈরি করতে, আপনি এই সমস্ত নথিগুলিকে একটি অনুরূপ ওয়েবহুকের সাথে কনফিগার করা একটি MinIO বালতিতে সংগ্রহ করতে পারেন এবং প্রতিটি নথির জন্য নিষ্কাশিত পাঠ্যকে ফাইন-টিউনিং/প্রশিক্ষণ সেটের একটি ডেটাফ্রেমে পাস করতে পারেন৷ উপরন্তু, MinIO-তে আপনার ডেটাসেটের সোর্স ফাইলগুলি থাকার মাধ্যমে, আপনার ডেটাসেটগুলির গঠন পরিচালনা, নিরীক্ষণ এবং ট্র্যাক করা আরও সহজ হয়ে যায়।
পুনরুদ্ধার অগমেন্টেড জেনারেশন : আরএজি হল এমন একটি উপায় যা এলএলএম অ্যাপ্লিকেশনগুলি সুনির্দিষ্ট প্রসঙ্গ ব্যবহার করতে পারে এবং হ্যালুসিনেশন এড়াতে পারে। এই পদ্ধতির একটি কেন্দ্রীয় দিক নিশ্চিত করা হচ্ছে আপনার নথির পাঠ্য বের করা যাবে এবং তারপরে ভেক্টরগুলিতে এম্বেড করা যাবে, যার ফলে শব্দার্থিক অনুসন্ধান সক্ষম হবে। উপরন্তু, এই ভেক্টরগুলির প্রকৃত উৎস নথিগুলিকে একটি বস্তুর দোকানে (যেমন MinIO!) সংরক্ষণ করা সাধারণত একটি সর্বোত্তম অনুশীলন। এই পোস্টে বর্ণিত পদ্ধতির সাথে, আপনি সহজেই উভয়ই অর্জন করতে পারেন। আপনি যদি RAG এবং এর সুবিধাগুলি সম্পর্কে আরও জানতে চান তবে এটি দেখুন
এলএলএম অ্যাপ্লিকেশন : একটি নতুন সংরক্ষিত নথি থেকে তাত্ক্ষণিকভাবে পাঠ্যটি বের করার একটি প্রোগ্রাম্যাটিক উপায়ে, সম্ভাবনাগুলি অফুরন্ত, বিশেষ করে যদি আপনি একটি এলএলএম ব্যবহার করতে পারেন। ভাবুন কীওয়ার্ড সনাক্তকরণ (অর্থাৎ, প্রম্পট: "কোন স্টক টিকারগুলি উল্লেখ করা হয়েছে?"), বিষয়বস্তু মূল্যায়ন (অর্থাৎ, প্রম্পট: "রুব্রিক অনুসারে, এই রচনাটি জমা দেওয়ার কী স্কোর পাওয়া উচিত?), বা প্রায় কোনও ধরণের পাঠ্য-ভিত্তিক বিশ্লেষণ। (অর্থাৎ, প্রম্পট: "এই লগ আউটপুটের উপর ভিত্তি করে, প্রথম ত্রুটি কখন ঘটেছে?")।
এই কাজের জন্য বাকেট নোটিফিকেশনের ইউটিলিটির বাইরেও, MinIO যেকোন ধরনের এবং বস্তুর সংখ্যার জন্য বিশ্ব-মানের ত্রুটি সহনশীলতা এবং কর্মক্ষমতা বহন করার জন্য তৈরি করা হয়েছে- তা পাওয়ারপয়েন্ট, ছবি বা কোড স্নিপেট হোক না কেন।
যদি আপনার কোন প্রশ্ন থাকে আমাদের যোগদান