paint-brush
কীভাবে কার্যকরভাবে আপনার RAG + LLM অ্যাপ্লিকেশনগুলিকে মূল্যায়ন করবেনদ্বারা@vndee
1,954 পড়া
1,954 পড়া

কীভাবে কার্যকরভাবে আপনার RAG + LLM অ্যাপ্লিকেশনগুলিকে মূল্যায়ন করবেন

দ্বারা Duy Huynh17m2023/12/27
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

কখনো ভেবেছেন কিভাবে আজকের কিছু অ্যাপ্লিকেশন প্রায় জাদুকরী স্মার্ট মনে হয়? সেই জাদুর একটা বড় অংশ আসে RAG এবং LLM নামক কিছু থেকে।
featured image - কীভাবে কার্যকরভাবে আপনার RAG + LLM অ্যাপ্লিকেশনগুলিকে মূল্যায়ন করবেন
Duy Huynh HackerNoon profile picture
0-item
1-item

এই যে! কখনো ভেবেছেন কিভাবে আজকের কিছু অ্যাপ্লিকেশন প্রায় জাদুকরী স্মার্ট মনে হয়? সেই জাদুর একটা বড় অংশ আসে RAG এবং LLM নামক কিছু থেকে। আরএজি (পুনরুদ্ধার-অগমেন্টেড জেনারেশন) কে এআই বিশ্বের মস্তিষ্কের বইয়ের কীট হিসাবে ভাবুন। আপনার প্রশ্নের জন্য ঠিক কী প্রয়োজন তা খুঁজে বের করতে এটি প্রচুর তথ্যের মাধ্যমে খনন করে। তারপরে, LLM (বড় ভাষা মডেল), বিখ্যাত GPT সিরিজের মতো এর চিত্তাকর্ষক পাঠ্য তৈরির ক্ষমতার উপর ভিত্তি করে একটি মসৃণ উত্তর তৈরি করবে। এই দুটির সাথে একসাথে, আপনি একটি AI পেয়েছেন যা শুধু স্মার্ট নয় বরং অত্যন্ত প্রাসঙ্গিক এবং প্রসঙ্গ-সচেতন। এটি একজন অতি-দ্রুত গবেষণা সহকারীকে একজন মজাদার কথোপকথনের সাথে একত্রিত করার মতো। আশ্চর্যজনকভাবে বাস্তব মনে হয় এমন চ্যাট করার জন্য আপনাকে নির্দিষ্ট তথ্য দ্রুত খুঁজে পেতে সাহায্য করার জন্য এই কম্বোটি দুর্দান্ত।


কিন্তু এখানে ধরা হল: আমরা কীভাবে জানব যে আমাদের AI আসলেই সহায়ক হচ্ছে এবং শুধু অভিনব শব্দচয়ন করছে না? সেখানেই মূল্যায়ন আসে। এটা খুবই গুরুত্বপূর্ণ, শুধু একটি সুন্দর জিনিস নয়। আমাদের নিশ্চিত করতে হবে যে আমাদের AI শুধু সঠিক নয় বরং প্রাসঙ্গিক, দরকারী এবং অদ্ভুত স্পর্শকাতরতার উপর চলে না। সর্বোপরি, একটি স্মার্ট সহকারীর ব্যবহার কী যদি এটি আপনার কী প্রয়োজন তা বুঝতে না পারে বা আপনাকে এমন উত্তর দেয় যা ভিত্তিহীন?


আমাদের RAG + LLM অ্যাপ্লিকেশনের মূল্যায়ন করা একটি বাস্তবতা যাচাইয়ের মতো। এটি আমাদের বলে যে আমরা সত্যিই একটি AI তৈরির পথে আছি যা সত্যিকারের সহায়ক এবং কেবল প্রযুক্তিগতভাবে চিত্তাকর্ষক নয়। সুতরাং, এই পোস্টে, আমরা কীভাবে এটি করতে পারি তা নিয়ে আলোচনা করছি – নিশ্চিত করছি যে আমাদের AI তত্ত্বের মতো অনুশীলনেও দুর্দান্ত!

উন্নয়ন পর্যায়

উন্নয়ন পর্বে, একটি সাধারণ মেশিন লার্নিং মডেল মূল্যায়ন পাইপলাইনের লাইন বরাবর চিন্তা করা অপরিহার্য। একটি স্ট্যান্ডার্ড AI/ML সেটআপে, আমরা সাধারণত ডেভেলপমেন্ট, ট্রেনিং এবং টেস্টিং সেটের মতো বেশ কয়েকটি ডেটাসেটের সাথে কাজ করি এবং মডেলের কার্যকারিতা পরিমাপ করার জন্য পরিমাণগত মেট্রিক্স নিযুক্ত করি। যাইহোক, লার্জ ল্যাঙ্গুয়েজ মডেল (LLMs) মূল্যায়ন করা অনন্য চ্যালেঞ্জ উপস্থাপন করে। প্রথাগত পরিমাণগত মেট্রিক্স এলএলএম থেকে আউটপুটের গুণমান ক্যাপচার করতে লড়াই করে কারণ এই মডেলগুলি বৈচিত্র্যময় এবং সৃজনশীল উভয় ভাষা তৈরিতে পারদর্শী। ফলস্বরূপ, কার্যকরী মূল্যায়নের জন্য লেবেলের একটি বিস্তৃত সেট থাকা কঠিন।


একাডেমিক চেনাশোনাগুলিতে, গবেষকরা এলএলএম র‌্যাঙ্ক করার জন্য MMLU-এর মতো বেঞ্চমার্ক এবং স্কোর নিয়োগ করতে পারেন এবং এলএলএম আউটপুটগুলির গুণমান মূল্যায়নের জন্য মানব বিশেষজ্ঞদের তালিকাভুক্ত করা হতে পারে। এই পদ্ধতিগুলি, যাইহোক, নির্বিঘ্নে উত্পাদন পরিবেশে স্থানান্তরিত হয় না, যেখানে বিকাশের গতি দ্রুত হয় এবং ব্যবহারিক প্রয়োগের জন্য অবিলম্বে ফলাফলের প্রয়োজন হয়। এটা শুধুমাত্র এলএলএম কর্মক্ষমতা সম্পর্কে নয়; বাস্তব-বিশ্বের চাহিদাগুলি পুরো প্রক্রিয়াটিকে বিবেচনা করে, যার মধ্যে ডেটা পুনরুদ্ধার, প্রম্পট কম্পোজিশন এবং এলএলএম-এর অবদান অন্তর্ভুক্ত রয়েছে। প্রতিটি নতুন সিস্টেম পুনরাবৃত্তির জন্য বা যখন নথি বা ডোমেনে পরিবর্তন হয় তখন একটি মানব-নিযুক্ত বেঞ্চমার্ক তৈরি করা অবাস্তব। তদ্ব্যতীত, শিল্পে বিকাশের দ্রুত গতি মানব পরীক্ষকদের স্থাপনার আগে প্রতিটি আপডেটের মূল্যায়ন করার জন্য দীর্ঘ অপেক্ষার বিলাসিতা বহন করে না। অতএব, দ্রুত এবং ফলাফল-কেন্দ্রিক উত্পাদন পরিবেশের সাথে সারিবদ্ধ করার জন্য একাডেমিয়াতে কাজ করে এমন মূল্যায়ন কৌশলগুলিকে সামঞ্জস্য করা একটি যথেষ্ট চ্যালেঞ্জ উপস্থাপন করে।


সুতরাং আপনি যদি এই ক্ষেত্রে পড়েন তবে আপনি একটি ছদ্ম স্কোরের মতো কিছু সম্পর্কে ভাবতে পারেন যা একজন মাস্টার এলএলএম দ্বারা সরবরাহ করা হয়। এই স্কোরটি স্বয়ংক্রিয় মূল্যায়ন মেট্রিক্স এবং মানুষের বিচারের একটি পাতিত সারাংশের সংমিশ্রণ প্রতিফলিত করতে পারে। এই ধরনের একটি হাইব্রিড পদ্ধতির লক্ষ্য মানুষের মূল্যায়নকারীদের সংক্ষিপ্ত বোঝাপড়া এবং মেশিন মূল্যায়নের মাপযোগ্য, পদ্ধতিগত বিশ্লেষণের মধ্যে ব্যবধান পূরণ করা।

RAG + LLM চেইন


উদাহরণস্বরূপ, যদি আপনার দল একটি ইন-হাউস LLM তৈরি করে যা আপনার নির্দিষ্ট ডোমেন এবং ডেটাতে প্রশিক্ষিত, প্রক্রিয়াটি সাধারণত ডেভেলপার, প্রম্পট ইঞ্জিনিয়ার এবং ডেটা সায়েন্টিস্টদের থেকে একটি সহযোগিতামূলক প্রচেষ্টাকে জড়িত করবে। প্রতিটি সদস্য একটি গুরুত্বপূর্ণ ভূমিকা পালন করে:

  • বিকাশকারীরা স্থপতি। তারা অ্যাপ্লিকেশনের কাঠামো তৈরি করে, নিশ্চিত করে যে RAG + LLM চেইন নির্বিঘ্নে একত্রিত হয়েছে এবং অনায়াসে বিভিন্ন পরিস্থিতিতে নেভিগেট করতে পারে।

  • প্রম্পট ইঞ্জিনিয়াররা সৃজনশীল। তারা বাস্তব-বিশ্ব ব্যবহারকারীর মিথস্ক্রিয়া অনুকরণ করে এমন পরিস্থিতি এবং প্রম্পট তৈরি করে। তারা "কি যদি" চিন্তা করে এবং বিষয় এবং প্রশ্নের বিস্তৃত বর্ণালী মোকাবেলা করার জন্য সিস্টেমকে চাপ দেয়।

  • ডেটা সায়েন্টিস্টরা হলেন কৌশলবিদ। তারা প্রতিক্রিয়াগুলি বিশ্লেষণ করে, ডেটা অনুসন্ধান করে এবং এআই-এর কর্মক্ষমতা চিহ্ন পূরণ করে কিনা তা মূল্যায়ন করতে তাদের পরিসংখ্যানগত দক্ষতা ব্যবহার করে।


প্রতিক্রিয়া লুপ এখানে অপরিহার্য. যেহেতু আমাদের AI প্রম্পটে সাড়া দেয়, দল প্রতিটি আউটপুট যাচাই করে। এআই কি প্রশ্ন বুঝতে পেরেছে? প্রতিক্রিয়া সঠিক এবং প্রাসঙ্গিক ছিল? ভাষা কি মসৃণ হতে পারে? এই প্রতিক্রিয়া তারপর উন্নতির জন্য সিস্টেমের মধ্যে লুপ করা হয়.


এটি একটি খাঁজ নিতে, আপনার স্ব-উন্নত এলএলএম মূল্যায়নের জন্য একটি মানদণ্ড হিসাবে OpenAI-এর GPT-4-এর মতো একটি মাস্টার LLM ব্যবহার করার কল্পনা করুন৷ আপনি জিপিটি সিরিজের পারফরম্যান্সের সাথে মিল বা অতিক্রম করার লক্ষ্য রাখেন, যা এর দৃঢ়তা এবং বহুমুখীতার জন্য পরিচিত। আপনি কীভাবে এগিয়ে যেতে পারেন তা এখানে:

  • একটি প্রাসঙ্গিক ডেটাসেট তৈরি করা: একটি ডেটাসেট তৈরি করে শুরু করুন যা আপনার ডোমেনের সূক্ষ্মতাকে প্রতিফলিত করে। এই ডেটাসেটটি বিশেষজ্ঞদের দ্বারা কিউরেট করা যেতে পারে বা সময় বাঁচানোর জন্য GPT-4 এর সাহায্যে সংশ্লেষিত করা যেতে পারে, এটি নিশ্চিত করে যে এটি আপনার সোনার মানের সাথে মেলে।

  • সাফল্যের জন্য মেট্রিক্স সংজ্ঞায়িত করা: আপনার মেট্রিক্স সংজ্ঞায়িত করতে সহায়তা করার জন্য মাস্টার LLM-এর শক্তিগুলি ব্যবহার করুন। মাস্টার LLM আরও জটিল কাজগুলি পরিচালনা করতে পারে তা বিবেচনা করে আপনার লক্ষ্যগুলির সাথে সবচেয়ে উপযুক্ত মেট্রিকগুলি বেছে নেওয়ার স্বাধীনতা রয়েছে৷ কমিউনিটি স্ট্যান্ডার্ডে, আপনি ল্যাংচেইন এবং রাগগুলির মতো অন্যান্য লাইব্রেরি থেকে কিছু কাজ দেখতে চাইতে পারেন। তাদের কিছু মেট্রিক আছে যেমন বিশ্বস্ততা, প্রসঙ্গ স্মরণ, প্রসঙ্গ যথার্থতা, উত্তরের মিল ইত্যাদি।

  • আপনার মূল্যায়ন পাইপলাইন স্বয়ংক্রিয়করণ: দ্রুত উন্নয়ন চক্রের সাথে তাল মিলিয়ে চলতে, একটি স্বয়ংক্রিয় পাইপলাইন স্থাপন করুন। এটি ধারাবাহিকভাবে প্রতিটি আপডেট বা পরিবর্তনের পরে আপনার পূর্বনির্ধারিত মেট্রিক্সের বিপরীতে অ্যাপ্লিকেশনটির কর্মক্ষমতা মূল্যায়ন করবে। প্রক্রিয়াটিকে স্বয়ংক্রিয় করার মাধ্যমে, আপনি নিশ্চিত করেন যে আপনার মূল্যায়ন শুধুমাত্র পুঙ্খানুপুঙ্খ নয় বরং দক্ষতার সাথে পুনরাবৃত্তিমূলক, দ্রুত অপ্টিমাইজেশান এবং পরিমার্জন করার অনুমতি দেয়।


উদাহরণস্বরূপ, নিম্নলিখিত প্রদর্শনীতে, আমি আপনাকে দেখাব কিভাবে OpenAI-এর GPT-4 ব্যবহার করে একটি সাধারণ নথি পুনরুদ্ধার কথোপকথনের কাজে বিভিন্ন ওপেন-সোর্স LLM-গুলিকে স্বয়ংক্রিয়ভাবে মূল্যায়ন করা যায়।


প্রথমত, আমরা নিচের মতো একটি নথি থেকে প্রাপ্ত একটি সংশ্লেষিত ডেটাসেট তৈরি করতে OpenAI GPT-4 ব্যবহার করি:

 import os import json import pandas as pd from dataclasses import dataclass from langchain.chat_models import ChatOpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import CharacterTextSplitter from langchain.output_parsers import JsonOutputToolsParser, PydanticOutputParser from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate QA_DATASET_GENERATION_PROMPT = PromptTemplate.from_template( "You are an expert on generate question-and-answer dataset based on a given context. You are given a context. " "Your task is to generate a question and answer based on the context. The generated question should be able to" " to answer by leverage the given context. And the generated question-and-answer pair must be grammatically " "and semantically correct. Your response must be in a json format with 2 keys: question, answer. For example," "\n\n" "Context: France, in Western Europe, encompasses medieval cities, alpine villages and Mediterranean beaches. Paris, its capital, is famed for its fashion houses, classical art museums including the Louvre and monuments like the Eiffel Tower." "\n\n" "Response: {{" "\n" " \"question\": \"Where is France and what is it's capital?\"," "\n" " \"answer\": \"France is in Western Europe and it's capital is Paris.\"" "\n" "}}" "\n\n" "Context: The University of California, Berkeley is a public land-grant research university in Berkeley, California. Established in 1868 as the state's first land-grant university, it was the first campus of the University of California system and a founding member of the Association of American Universities." "\n\n" "Response: {{" "\n" " \"question\": \"When was the University of California, Berkeley established?\"," "\n" " \"answer\": \"The University of California, Berkeley was established in 1868.\"" "\n" "}}" "\n\n" "Now your task is to generate a question-and-answer dataset based on the following context:" "\n\n" "Context: {context}" "\n\n" "Response: ", ) OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") if OPENAI_API_KEY is None: raise ValueError("OPENAI_API_KEY is not set") llm = ChatOpenAI( model="gpt-4-1106-preview", api_key=OPENAI_API_KEY, temperature=0.7, response_format={ "type": "json_object" }, ) chain = LLMChain( prompt=QA_DATASET_GENERATION_PROMPT, llm=llm ) file_loader = PyPDFLoader("./data/cidr_lakehouse.pdf") text_splitter = CharacterTextSplitter(chunk_size=1000) chunks = text_splitter.split_documents(file_loader.load()) questions, answers = [], [] for chunk in chunks: for _ in range(2): response = chain.invoke({ "context": chunk }) obj = json.loads(response["text"]) questions.append(obj["question"]) answers.append(obj["answer"]) df = pd.DataFrame({ "question": questions, "answer": answers }) df.to_csv("./data/cidr_lakehouse_qa.csv", index=False)


উপরে উল্লিখিত কোডটি চালানোর পরে, আমরা ফলাফল হিসাবে একটি CSV ফাইল পাই। এই ফাইলটিতে আমরা ইনপুট করা নথির সাথে সম্পর্কিত প্রশ্ন এবং উত্তরগুলির জোড়া রয়েছে, নিম্নরূপ:

"লেকহাউস: এ নিউ জেনারেশন অফ ওপেন প্ল্যাটফর্ম যা ডেটা গুদামজাতকরণ এবং উন্নত বিশ্লেষণকে একীভূত করে" কাগজের জন্য সংশ্লেষিত QA কর্পাস।


তারপরে, আমরা ল্যাংচেইন ব্যবহার করে সাধারণ ডকুমেন্ট রেট্রিভালকিউএ চেইন তৈরি করি এবং ওল্লামার মাধ্যমে স্থানীয়ভাবে কাজ করে এমন কয়েকটি ওপেন-সোর্স এলএলএম-এর বিকল্প করি। আপনি এখানে যে আমার আগের টিউটোরিয়াল খুঁজে পেতে পারেন.

 from tqdm import tqdm from langchain.chains import RetrievalQA from langchain.chat_models import ChatOllama from langchain.vectorstores import FAISS from langchain.embeddings import HuggingFaceEmbeddings vector_store = FAISS.from_documents(chunks, HuggingFaceEmbeddings()) retriever = vector_store.as_retriever() def test_local_retrieval_qa(model: str): chain = RetrievalQA.from_llm( llm=ChatOllama(model=model), retriever=retriever, ) predictions = [] for it, row in tqdm(df.iterrows(), total=len(df)): resp = chain.invoke({ "query": row["question"] }) predictions.append(resp["result"]) df[f"{model}_result"] = predictions test_local_retrieval_qa("mistral") test_local_retrieval_qa("llama2") test_local_retrieval_qa("zephyr") test_local_retrieval_qa("orca-mini") test_local_retrieval_qa("phi") df.to_csv("./data/cidr_lakehouse_qa_retrieval_prediction.csv", index=False)


সংক্ষেপে, উপরের কোডটি একটি সাধারণ নথি পুনরুদ্ধার চেইন স্থাপন করে। আমরা মিস্ট্রাল, লামা 2, জেফির, ওরকা-মিনি এবং ফি-র মতো বেশ কয়েকটি মডেল ব্যবহার করে এই চেইনটি কার্যকর করি। ফলস্বরূপ, প্রতিটি LLM মডেলের ভবিষ্যদ্বাণী ফলাফল সংরক্ষণ করতে আমরা আমাদের বিদ্যমান ডেটাফ্রেমে পাঁচটি অতিরিক্ত কলাম যুক্ত করি।

QA পূর্বাভাসের ফলাফল।


এখন, পূর্বাভাস ফলাফল মূল্যায়ন করতে OpenAI এর GPT-4 ব্যবহার করে একটি মাস্টার চেইন সংজ্ঞায়িত করা যাক। এই সেটআপে, আমরা একটি আনুমানিক F1 স্কোরের অনুরূপ একটি সঠিকতা স্কোর গণনা করব, যেমনটি প্রচলিত AI/ML সমস্যাগুলির ক্ষেত্রে সাধারণ। এটি সম্পন্ন করার জন্য, আমরা ট্রু পজিটিভ (TP), মিথ্যা ইতিবাচক (FP), এবং মিথ্যা নেতিবাচক (FN) এর মতো সমান্তরাল ধারণাগুলি প্রয়োগ করব, যা নিম্নরূপ সংজ্ঞায়িত করা হয়েছে:


  • TP: উত্তর এবং গ্রাউন্ড ট্রুথ উভয়েই উপস্থিত বিবৃতি।
  • FP: উত্তরে উপস্থিত বিবৃতি কিন্তু স্থল সত্যে পাওয়া যায়নি।
  • FN: প্রাসঙ্গিক বিবৃতি গ্রাউন্ড ট্রুথ পাওয়া গেছে কিন্তু উত্তরে বাদ দেওয়া হয়েছে।


এই সংজ্ঞাগুলির সাহায্যে, আমরা নীচের সূত্রগুলি ব্যবহার করে নির্ভুলতা, প্রত্যাহার এবং F1 স্কোর গণনা করতে পারি:

সূত্র ব্যবহার করে F1 স্কোর


 import os import numpy as np import pandas as pd from tqdm import tqdm from langchain.chains import LLMChain from langchain.chat_models import ChatOpenAI from langchain.prompts import PromptTemplate OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") if OPENAI_API_KEY is None: raise ValueError("OPENAI_API_KEY is not set") CORRECTNESS_PROMPT = PromptTemplate.from_template( """ Extract following from given question and ground truth. Your response must be in a json format with 3 keys and does not need to be in any specific order: - statements that are present in both the answer and the ground truth - statements present in the answer but not found in the ground truth - relevant statements found in the ground truth but omitted in the answer Please be concise and do not include any unnecessary information. You should classify the statements as claims, facts, or opinions with semantic matching, no need exact word-by-word matching. Question:What powers the sun and what is its primary function? Answer: The sun is powered by nuclear fission, similar to nuclear reactors on Earth, and its primary function is to provide light to the solar system. Ground truth: The sun is actually powered by nuclear fusion, not fission. In its core, hydrogen atoms fuse to form helium, releasing a tremendous amount of energy. This energy is what lights up the sun and provides heat and light, essential for life on Earth. The sun's light also plays a critical role in Earth's climate system and helps to drive the weather and ocean currents. Extracted statements: [ {{ "statements that are present in both the answer and the ground truth": ["The sun's primary function is to provide light"], "statements present in the answer but not found in the ground truth": ["The sun is powered by nuclear fission", "similar to nuclear reactors on Earth"], "relevant statements found in the ground truth but omitted in the answer": ["The sun is powered by nuclear fusion, not fission", "In its core, hydrogen atoms fuse to form helium, releasing a tremendous amount of energy", "This energy provides heat and light, essential for life on Earth", "The sun's light plays a critical role in Earth's climate system", "The sun helps to drive the weather and ocean currents"] }} ] Question: What is the boiling point of water? Answer: The boiling point of water is 100 degrees Celsius at sea level. Ground truth: The boiling point of water is 100 degrees Celsius (212 degrees Fahrenheit) at sea level, but it can change with altitude. Extracted statements: [ {{ "statements that are present in both the answer and the ground truth": ["The boiling point of water is 100 degrees Celsius at sea level"], "statements present in the answer but not found in the ground truth": [], "relevant statements found in the ground truth but omitted in the answer": ["The boiling point can change with altitude", "The boiling point of water is 212 degrees Fahrenheit at sea level"] }} ] Question: {question} Answer: {answer} Ground truth: {ground_truth} Extracted statements:""", ) judy_llm = ChatOpenAI( model="gpt-4-1106-preview", api_key=OPENAI_API_KEY, temperature=0.0, response_format={ "type": "json_object" }, ) judy_chain = LLMChain( prompt=CORRECTNESS_PROMPT, llm=judy_llm ) def evaluate_correctness(column_name: str): chain = LLMChain( prompt=CORRECTNESS_PROMPT, llm=ChatOpenAI( model="gpt-4-1106-preview", api_key=OPENAI_API_KEY, temperature=0.0, response_format={ "type": "json_object" }, ) ) key_map = { "TP": "statements that are present in both the answer and the ground truth", "FP": "statements present in the answer but not found in the ground truth", "FN": "relevant statements found in the ground truth but omitted in the answer", # noqa: E501 } TP, FP, FN = [], [], [] for it, row in tqdm(df.iterrows(), total=len(df)): resp = chain.invoke({ "question": row["question"], "answer": row[column_name], "ground_truth": row["answer"] }) obj = json.loads(resp["text"]) TP.append(len(obj[key_map["TP"]])) FP.append(len(obj[key_map["FP"]])) FN.append(len(obj[key_map["FN"]])) # convert to numpy array TP = np.array(TP) FP = np.array(FP) FN = np.array(FN) df[f"{column_name}_recall"] = TP / (TP + FN) df[f"{column_name}_precision"] = TP / (TP + FP) df[f"{column_name}_correctness"] = 2 * df[f"{column_name}_recall"] * df[f"{column_name}_precision"] / (df[f"{column_name}_recall"] + df[f"{column_name}_precision"]) evaluate_correctness("mistral_result") evaluate_correctness("llama2_result") evaluate_correctness("zephyr_result") evaluate_correctness("orca-mini_result") evaluate_correctness("phi_result") print("|====Model====|=== Recall ===|== Precision ==|== Correctness ==|") print(f"|mistral | {df['mistral_result_recall'].mean():.4f} | {df['mistral_result_precision'].mean():.4f} | {df['mistral_result_correctness'].mean():.4f} |") print(f"|llama2 | {df['llama2_result_recall'].mean():.4f} | {df['llama2_result_precision'].mean():.4f} | {df['llama2_result_correctness'].mean():.4f} |") print(f"|zephyr | {df['zephyr_result_recall'].mean():.4f} | {df['zephyr_result_precision'].mean():.4f} | {df['zephyr_result_correctness'].mean():.4f} |") print(f"|orca-mini | {df['orca-mini_result_recall'].mean():.4f} | {df['orca-mini_result_precision'].mean():.4f} | {df['orca-mini_result_correctness'].mean():.4f} |") print(f"|phi | {df['phi_result_recall'].mean():.4f} | {df['phi_result_precision'].mean():.4f} | {df['phi_result_correctness'].mean():.4f} |") print("|==============================================================|") df.to_csv("./data/cidr_lakehouse_qa_retrieval_prediction_correctness.csv", index=False) 


ফলাফল


ঠিক আছে, এখন আমরা বেশ কয়েকটি মডেলের জন্য একটি সাধারণ বেঞ্চমার্ক পেয়েছি। প্রতিটি মডেল নথি পুনরুদ্ধারের কাজটি কীভাবে পরিচালনা করে তার প্রাথমিক সূচক হিসাবে এটি বিবেচনা করা যেতে পারে। যদিও এই পরিসংখ্যানগুলি একটি স্ন্যাপশট অফার করে, তারা কেবল গল্পের শুরু। প্রদত্ত কর্পাস থেকে সঠিক এবং প্রাসঙ্গিক তথ্য পুনরুদ্ধার করতে কোন মডেলগুলি ভাল তা বোঝার জন্য তারা একটি বেসলাইন হিসাবে কাজ করে। আপনি এখানে সোর্স কোড খুঁজে পেতে পারেন.

হিউম্যান-ইন-লুপ-ফিডব্যাক

হিউম্যান-ইন-লুপ ফিডব্যাকের মাধ্যমে আমাদের AI টিউন করার ক্ষেত্রে, মানব পরীক্ষক এবং মাস্টার LLM-এর মধ্যে সমন্বয় গুরুত্বপূর্ণ। এই সম্পর্কটি কেবল প্রতিক্রিয়া সংগ্রহের জন্য নয় বরং একটি প্রতিক্রিয়াশীল AI সিস্টেম তৈরি করা যা মানব ইনপুট থেকে মানিয়ে নেয় এবং শেখে।

ইন্টারেক্টিভ প্রক্রিয়া

  • পরীক্ষকের ইনপুট: পরীক্ষকরা RAG + LLM চেইনের সাথে জড়িত, একটি মানবিক দৃষ্টিকোণ থেকে এর ফলাফলগুলি মূল্যায়ন করে। তারা AI এর প্রতিক্রিয়াগুলির প্রাসঙ্গিকতা, নির্ভুলতা এবং স্বাভাবিকতার মতো দিকগুলির উপর প্রতিক্রিয়া প্রদান করে।
  • মাস্টার এলএলএম-এর প্রতি প্রতিক্রিয়া: এখানেই যাদুটি ঘটে। মানব পরীক্ষকদের প্রতিক্রিয়া সরাসরি মাস্টার LLM-এর সাথে যোগাযোগ করা হয়। স্ট্যান্ডার্ড মডেলের বিপরীতে, মাস্টার LLM এর পরবর্তী আউটপুটগুলিকে পরিমার্জিত করার জন্য এই প্রতিক্রিয়া বোঝা এবং ব্যাখ্যা করার জন্য ডিজাইন করা হয়েছে।
  • মাস্টার এলএলএম দ্বারা প্রম্পট টিউনিং: এই প্রতিক্রিয়ার সাথে সজ্জিত, মাস্টার এলএলএম আমাদের উন্নয়নমূলক এলএলএমের জন্য প্রম্পট সামঞ্জস্য করে। এই প্রক্রিয়াটি একজন ছাত্রকে নির্দেশ দেওয়ার মতো একজন পরামর্শদাতার অনুরূপ। মাস্টার LLM সাবধানতার সাথে সংশোধন করে কিভাবে উন্নয়নমূলক LLM ব্যাখ্যা করে এবং প্রম্পটগুলিতে প্রতিক্রিয়া দেখায়, আরও কার্যকর এবং প্রাসঙ্গিকভাবে সচেতন প্রতিক্রিয়া প্রক্রিয়া নিশ্চিত করে।

মাস্টার এলএলএম এর দ্বৈত ভূমিকা

মাস্টার এলএলএম ইন-হাউস ডেভেলপড এলএলএম-এর মাপকাঠি হিসেবে এবং ফিডব্যাক লুপে সক্রিয় অংশগ্রহণকারী হিসেবে কাজ করে। এটি প্রতিক্রিয়া মূল্যায়ন করে, প্রম্পট বা মডেল প্যারামিটারগুলিকে সুর করে এবং মূলত মানুষের মিথস্ক্রিয়া থেকে 'শিখে'।

রিয়েল-টাইম অ্যাডাপ্টেশনের সুবিধা

এই প্রক্রিয়াটি রূপান্তরকারী। এটি AI কে রিয়েল-টাইমে মানিয়ে নিতে দেয়, এটিকে আরও চটপটে করে তোলে এবং মানুষের ভাষা এবং চিন্তা প্রক্রিয়ার জটিলতার সাথে সারিবদ্ধ করে। এই ধরনের রিয়েল-টাইম অভিযোজন নিশ্চিত করে যে AI এর শেখার বক্ররেখা খাড়া এবং অবিচ্ছিন্ন।

উন্নতির চক্র

মিথস্ক্রিয়া, প্রতিক্রিয়া এবং অভিযোজনের এই চক্রের মাধ্যমে, আমাদের AI শুধুমাত্র একটি হাতিয়ারের চেয়ে বেশি হয়ে ওঠে; এটি একটি শেখার সত্তা হয়ে ওঠে, যা একজন মানব পরীক্ষকের সাথে প্রতিটি মিথস্ক্রিয়া দ্বারা উন্নতি করতে সক্ষম। এই হিউম্যান-ইন-দ্য-লুপ মডেলটি নিশ্চিত করে যে আমাদের AI স্থবির হয়ে পড়ে না বরং আরও দক্ষ এবং স্বজ্ঞাত সহকারী হয়ে বিকশিত হয়।


সংক্ষেপে, হিউম্যান-ইন-লুপ ফিডব্যাক শুধুমাত্র মানুষের অন্তর্দৃষ্টি সংগ্রহের বিষয়ে নয়—এটি একটি গতিশীল এবং অভিযোজনযোগ্য AI তৈরির বিষয়ে যা ব্যবহারকারীদের আরও ভাল পরিবেশন করার জন্য তার আচরণকে সূক্ষ্ম-সুর করতে পারে। এই পুনরাবৃত্ত প্রক্রিয়াটি নিশ্চিত করে যে আমাদের RAG + LLM অ্যাপ্লিকেশনগুলি কাটতি প্রান্তে থাকবে, কেবল উত্তরই নয় বরং প্রাসঙ্গিকভাবে সচেতন, সূক্ষ্ম প্রতিক্রিয়া যা ব্যবহারকারীর প্রয়োজনের প্রকৃত বোঝার প্রতিফলন করে।


একটি সাধারণ ডেমোর জন্য, আপনি এই ভিডিওতে প্রম্পটিমাইজারকে উন্নত করতে ক্লিয়ারএমএল এই ধারণাটি কীভাবে ব্যবহার করে তা দেখতে পারেন।

অপারেশন ফেজ

অপারেশন পর্বে স্থানান্তর করাটা ড্রেস রিহার্সাল থেকে শুরুর রাতে যাওয়ার মতো। এখানে, আমাদের RAG + LLM অ্যাপ্লিকেশনগুলি আর অনুমানমূলক সত্তা নয়; তারা প্রকৃত ব্যবহারকারীদের দৈনন্দিন কর্মপ্রবাহে সক্রিয় অংশগ্রহণকারী হয়ে ওঠে। এই পর্যায়টি উন্নয়ন পর্বে করা সমস্ত প্রস্তুতি এবং সূক্ষ্ম টিউনিংয়ের জন্য লিটমাস পরীক্ষা।


এই পর্যায়ে, আমাদের দলগুলি - অপারেশন, পণ্য এবং বিশ্লেষক - অ্যাপ্লিকেশনগুলি স্থাপন এবং পরিচালনা করার জন্য সারিবদ্ধ করে, নিশ্চিত করে যে আমরা যা তৈরি করেছি তা কেবল কার্যকর নয় বরং একটি লাইভ পরিবেশে সমৃদ্ধ হচ্ছে৷ এখানেই আমরা নিয়ন্ত্রিত পদ্ধতিতে আমাদের অ্যাপ্লিকেশনের কার্যকারিতা পরিমাপ করার জন্য A/B পরীক্ষার কৌশল বাস্তবায়নের কথা বিবেচনা করতে পারি।


  • A/B টেস্টিং ফ্রেমওয়ার্ক: আমরা আমাদের ব্যবহারকারীর ভিত্তিকে দুটি বিভাগে বিভক্ত করেছি - নিয়ন্ত্রণ বিভাগ, যা অ্যাপ্লিকেশনটির প্রতিষ্ঠিত সংস্করণ (সংস্করণ 1) ব্যবহার করে চলেছে এবং পরীক্ষা বিভাগ, যা সংস্করণ 2-এ নতুন বৈশিষ্ট্যগুলি চেষ্টা করে (আসলে আপনি একই সময়ে একাধিক A/B পরীক্ষা চালাতে পারেন)। এটি আমাদের ব্যবহারকারীর অভিজ্ঞতা, বৈশিষ্ট্য গ্রহণযোগ্যতা এবং সামগ্রিক কর্মক্ষমতা সম্পর্কে তুলনামূলক ডেটা সংগ্রহ করতে দেয়।

  • অপারেশনাল রোলআউট: অপারেশন টিমকে উভয় সংস্করণের মসৃণ রোলআউটের দায়িত্ব দেওয়া হয়, এটি নিশ্চিত করে যে পরিকাঠামো শক্তিশালী এবং যে কোনও সংস্করণ পরিবর্তন ব্যবহারকারীর জন্য বিরামহীন।

  • পণ্যের বিবর্তন: পণ্য দল, ব্যবহারকারীর প্রতিক্রিয়ার নাড়ির উপর আঙুল দিয়ে, পণ্যটিকে পুনরাবৃত্তি করতে কাজ করে। এই দলটি নিশ্চিত করে যে নতুন বৈশিষ্ট্যগুলি ব্যবহারকারীর চাহিদা এবং সামগ্রিক পণ্যের দৃষ্টিভঙ্গির সাথে সামঞ্জস্যপূর্ণ।

  • বিশ্লেষণাত্মক অন্তর্দৃষ্টি: বিশ্লেষক দল A/B পরীক্ষা থেকে সংগৃহীত ডেটা কঠোরভাবে পরীক্ষা করে। নতুন সংস্করণটি পুরানোকে ছাড়িয়ে যায় কিনা এবং এটি একটি বিস্তৃত প্রকাশের জন্য প্রস্তুত কিনা তা নির্ধারণে তাদের অন্তর্দৃষ্টিগুলি গুরুত্বপূর্ণ।

  • পারফরম্যান্স মেট্রিক্স: প্রতিটি সংস্করণের সাফল্য পরিমাপের জন্য মূল কর্মক্ষমতা সূচক (KPIs) পর্যবেক্ষণ করা হয়। এর মধ্যে রয়েছে ব্যবহারকারীর ব্যস্ততার মেট্রিক্স, সন্তুষ্টির স্কোর এবং অ্যাপ্লিকেশনের আউটপুটগুলির যথার্থতা।


অপারেশন পর্যায়টি গতিশীল, ক্রমাগত ফিডব্যাক লুপ দ্বারা অবহিত যা শুধুমাত্র অ্যাপ্লিকেশনগুলিকে উন্নত করে না বরং ব্যবহারকারীর ব্যস্ততা এবং সন্তুষ্টিকেও উন্নত করে। এটি একটি পর্যায় যা পর্যবেক্ষণ, বিশ্লেষণ, পুনরাবৃত্তি এবং সর্বোপরি লাইভ ডেটা থেকে শেখার দ্বারা চিহ্নিত করা হয়।


যখন আমরা এই ধাপে নেভিগেট করি, আমাদের লক্ষ্য হল শুধুমাত্র উন্নয়ন পর্বের দ্বারা নির্ধারিত উচ্চ মান বজায় রাখা নয় বরং সেগুলিকে অতিক্রম করা, নিশ্চিত করা যে আমাদের RAG + LLM অ্যাপ্লিকেশনটি উদ্ভাবন এবং ব্যবহারযোগ্যতার অগ্রভাগে থাকে।

উপসংহার

সংক্ষেপে, পুনরুদ্ধার-অগমেন্টেড জেনারেশন (RAG) এবং লার্জ ল্যাঙ্গুয়েজ মডেল (LLMs) এর একীকরণ AI-তে একটি উল্লেখযোগ্য অগ্রগতি চিহ্নিত করে, অত্যাধুনিক পাঠ্য প্রজন্মের সাথে গভীর ডেটা পুনরুদ্ধারকে মিশ্রিত করে। যাইহোক, আমাদের মূল্যায়নের জন্য একটি সঠিক এবং কার্যকর পদ্ধতি এবং একটি পুনরাবৃত্তিমূলক উন্নয়ন কৌশল প্রয়োজন। ডেভেলপমেন্ট ফেজ এআই মূল্যায়নকে কাস্টমাইজ করার এবং হিউম্যান-ইন-দ্য-লুপ ফিডব্যাকের সাথে এটিকে উন্নত করার উপর জোর দেয়, নিশ্চিত করে যে এই সিস্টেমগুলি সহানুভূতিশীল এবং বাস্তব-বিশ্বের পরিস্থিতির সাথে মানিয়ে নেওয়া যায়। এই পদ্ধতিটি AI এর বিবর্তনকে একটি নিছক টুল থেকে একটি সহযোগী অংশীদারে তুলে ধরে। কার্যকারিতা এবং ব্যবহারকারীর ইন্টারঅ্যাকশনের উপর ভিত্তি করে চলমান বিবর্তন নিশ্চিত করতে A/B টেস্টিং এবং ক্রমাগত ফিডব্যাক লুপের মতো কৌশল ব্যবহার করে অপারেশনাল ফেজ এই অ্যাপ্লিকেশনগুলিকে বাস্তব-বিশ্বের পরিস্থিতিতে পরীক্ষা করে।