এলএলএম বিপ্লবের আকার নিতে শুরু করার সাথে সাথে হাইপটি বাণিজ্যিক বিকাশের পথ দিয়েছে। উত্তেজনার প্রাথমিক তরঙ্গ কমে যাওয়ায়, জেনারেটিভ এআইকে আর একটি সর্বজ্ঞ ব্ল্যাক বক্স হিসাবে দেখা হয় না, বরং একটি উপাদান হিসাবে, যদি অত্যন্ত শক্তিশালী হয়, একজন প্রকৌশলীর অস্ত্রাগারে হাতিয়ার হিসেবে দেখা হয়। ফলস্বরূপ, উদ্যোক্তা এবং প্রযুক্তিবিদদের কাছে এখন LLM অ্যাপ্লিকেশন বিকাশের জন্য ক্রমবর্ধমান পরিপক্ক সরঞ্জাম এবং কৌশল রয়েছে।
এলএলএম-এর জন্য সবচেয়ে আকর্ষণীয় ব্যবহারের ক্ষেত্রে একটি হল জ্ঞান ব্যবস্থাপনার ক্ষেত্রে। ওপেনএআই-এর জিপিটি প্রযুক্তি বা LLaMa 2 এবং Flan-T5-এর মতো ওপেন-সোর্স মডেলের উপর ভিত্তি করে বিশেষায়িত এলএলএমগুলি প্রচুর পরিমাণে ডেটা পরিচালনা করার জন্য চতুর উপায়ে ব্যবহার করা হচ্ছে। যেখানে আগে বৃহৎ টেক্সট ডেটাসেট সহ সংস্থাগুলিকে অস্পষ্ট ম্যাচিং বা ফুল-টেক্সট ইন্ডেক্সিংয়ের মতো পাঠ্য অনুসন্ধানের কৌশলগুলির উপর নির্ভর করতে হত, সেখানে তাদের এখন একটি শক্তিশালী সিস্টেমের অ্যাক্সেস রয়েছে যা কেবল তথ্য খুঁজে পেতে পারে না তবে এটিকে একটি সময়-দক্ষ এবং পাঠক-বান্ধবভাবে সংক্ষিপ্ত করতে পারে। ফ্যাশন
এই ব্যবহারের ক্ষেত্রে, পুনরুদ্ধার-বর্ধিত প্রজন্মের আর্কিটেকচার , বা RAG, বিশাল নমনীয়তা এবং কর্মক্ষমতা সহ একটি স্ট্যান্ডআউট আর্কিটেকচার হিসাবে আবির্ভূত হয়েছে। এই আর্কিটেকচারের সাহায্যে, সংস্থাগুলি দ্রুত কাজের একটি অংশকে সূচী করতে পারে, এটিতে শব্দার্থিক প্রশ্নগুলি সম্পাদন করতে পারে এবং কর্পাসের উপর ভিত্তি করে ব্যবহারকারী-সংজ্ঞায়িত প্রশ্নের তথ্যমূলক এবং সঙ্গত উত্তর তৈরি করতে পারে। RAG আর্কিটেকচারের বাস্তবায়নকে সমর্থন করার জন্য বেশ কিছু কোম্পানি এবং পরিষেবা উত্থিত হয়েছে, যা এর স্থায়ী শক্তিকে তুলে ধরেছে।
RAG যতটা কার্যকর হতে পারে, এই আর্কিটেকচারেরও বেশ কিছু বাস্তব সীমাবদ্ধতা রয়েছে। এই নিবন্ধে, আমরা RAG আর্কিটেকচার অন্বেষণ করব, এর সীমাবদ্ধতাগুলি চিহ্নিত করব এবং এই সীমাবদ্ধতাগুলি সমাধান করার জন্য একটি উন্নত স্থাপত্যের প্রস্তাব করব।
অন্যান্য সমস্ত নিবন্ধের মতো, আমি অন্যান্য প্রযুক্তিবিদ এবং এআই উত্সাহীদের সাথে সংযোগ করতে চাইছি। এই স্থাপত্যকে কীভাবে উন্নত করা যায় সে সম্পর্কে আপনার যদি চিন্তা থাকে, বা AI সম্পর্কে ধারণা থাকে যা আপনি আলোচনা করতে চান, অনুগ্রহ করে যোগাযোগ করতে দ্বিধা করবেন না ! আপনি আমাকে Github বা LinkedIn-এ খুঁজে পেতে পারেন, লিঙ্কগুলি আমার প্রোফাইলের পাশাপাশি এই নিবন্ধের নীচে রয়েছে।
RAG, Flan, এবং LLaMa-এর মতো নামগুলির সাথে, AI সম্প্রদায় সম্ভবত শীঘ্রই যে কোনও সময় ভবিষ্যতবাদী এবং আড়ম্বরপূর্ণ নামের জন্য পুরস্কার জিতবে না। যাইহোক, RAG আর্কিটেকচার অবশ্যই LLM-এর বিকাশের দ্বারা উপলব্ধ দুটি অত্যন্ত শক্তিশালী কৌশলগুলির সমন্বয়ের জন্য একটি পুরস্কারের দাবি রাখে - প্রাসঙ্গিক ডকুমেন্ট এম্বেডিং এবং প্রম্পট ইঞ্জিনিয়ারিং।
এর সহজতম ক্ষেত্রে, RAG আর্কিটেকচার হল এমন একটি সিস্টেম যা একটি প্রশ্নের সাথে সবচেয়ে প্রাসঙ্গিক কর্পাসের অংশ(গুলি) খুঁজে বের করতে এমবেডিং ভেক্টর অনুসন্ধান ব্যবহার করে, একটি প্রম্পটে অংশ(গুলি) সন্নিবেশ করান এবং তারপর প্রম্পট ইঞ্জিনিয়ারিং ব্যবহার করে তা নিশ্চিত করতে উত্তর প্রম্পটে দেওয়া উদ্ধৃতির উপর ভিত্তি করে। যদি এই সব একটু বিভ্রান্তিকর শোনায়, অনুগ্রহ করে পড়ুন কারণ আমি প্রতিটি উপাদানকে পালাক্রমে ব্যাখ্যা করব। আমি উদাহরণ কোড অন্তর্ভুক্ত করব যাতে আপনি অনুসরণ করতে পারেন।
প্রথম এবং সর্বাগ্রে, একটি কার্যকর RAG সিস্টেমের জন্য একটি শক্তিশালী এমবেডিং মডেল প্রয়োজন। এমবেডিং মডেল একটি প্রাকৃতিক পাঠ্য নথিকে সংখ্যার একটি সিরিজে রূপান্তরিত করে, বা একটি "ভেক্টর", যা মোটামুটিভাবে নথির শব্দার্থিক বিষয়বস্তুকে উপস্থাপন করে। এম্বেডিং মডেলটি একটি ভাল একটি অনুমান, আপনি দুটি ভিন্ন নথির শব্দার্থিক মান তুলনা করতে সক্ষম হবেন এবং ভেক্টর পাটিগণিত ব্যবহার করে দুটি নথি শব্দার্থগতভাবে একই রকম কিনা তা নির্ধারণ করতে সক্ষম হবেন।
এটি কার্যকরভাবে দেখতে, একটি পাইথন ফাইলে নিম্নলিখিত কোডটি পেস্ট করুন এবং এটি চালান:
import openai from openai.embeddings_utils import cosine_similarity openai.api_key = [YOUR KEY] EMBEDDING_MODEL = "text-embedding-ada-002" def get_cos_sim(input_1, input_2): embeds = openai.Embedding.create(model=EMBEDDING_MODEL, input=[input_1, input_2]) return cosine_similarity(embeds['data'][0]['embedding'], embeds['data'][1]['embedding']) print(get_cos_sim('Driving a car', 'William Shakespeare')) print(get_cos_sim('Driving a car', 'Riding a horse'))
উপরের কোডটি কোসাইন সাদৃশ্য অ্যালগরিদম ব্যবহার করে একে অপরের সাথে তুলনা করার আগে "গাড়ি চালানো", "উইলিয়াম শেক্সপিয়ার" এবং "ঘোড়ায় চড়া" শব্দগুলির জন্য এমবেডিং তৈরি করে। শব্দগুচ্ছ একই রকম হলে আমরা কোসাইন সাদৃশ্য আশা করব, তাই "গাড়ি চালানো" এবং "ঘোড়া চালানো" অনেক কাছাকাছি হওয়া উচিত, যেখানে "গাড়ি চালানো" এবং "উইলিয়াম শেক্সপিয়ার" ভিন্ন হওয়া উচিত।
আপনার দেখা উচিত যে, OpenAI-এর এমবেডিং মডেল, ada-002 অনুযায়ী, "গাড়ি চালানো" বাক্যাংশটি 88% "ঘোড়ায় চড়া" এবং 76% "উইলিয়াম শেক্সপিয়র" বাক্যাংশের মতো। এর মানে হল এমবেডিং মডেল আমাদের প্রত্যাশা অনুযায়ী পারফর্ম করছে। শব্দার্থগত সাদৃশ্যের এই সংকল্পটি হল RAG সিস্টেমের ভিত্তি।
কোসাইন সাদৃশ্য ধারণাটি উল্লেখযোগ্যভাবে শক্তিশালী হয় যখন আপনি এটিকে অনেক বড় নথির তুলনায় প্রসারিত করেন। উদাহরণ স্বরূপ, শেক্সপিয়রের ম্যাকবেথের শক্তিশালী মনোলোগটি নিন, “ আগামীকাল, এবং আগামীকাল এবং আগামীকাল ”:
monologue = '''Tomorrow, and tomorrow, and tomorrow, Creeps in this petty pace from day to day, To the last syllable of recorded time; And all our yesterdays have lighted fools The way to dusty death. Out, out, brief candle! Life's but a walking shadow, a poor player, That struts and frets his hour upon the stage, And then is heard no more. It is a tale Told by an idiot, full of sound and fury, Signifying nothing.''' print(get_cos_sim(monologue, 'Riding a car')) print(get_cos_sim(monologue, 'The contemplation of mortality'))
আপনার দেখা উচিত যে একাকীত্ব "গাড়ি চালানো" ধারণার সাথে মাত্র 75% মিল এবং "মৃত্যুর চিন্তাভাবনা" ধারণার সাথে 82% মিল।
কিন্তু আমাদের শুধু ধারনার সাথে একাকীত্বের তুলনা করতে হবে না, আমরা আসলে প্রশ্নের সাথে একাকীত্বের তুলনা করতে পারি। উদাহরণ স্বরূপ:
get_cos_sim('''Tomorrow, and tomorrow, and tomorrow, Creeps in this petty pace from day to day, To the last syllable of recorded time; And all our yesterdays have lighted fools The way to dusty death. Out, out, brief candle! Life's but a walking shadow, a poor player, That struts and frets his hour upon the stage, And then is heard no more. It is a tale Told by an idiot, full of sound and fury, Signifying nothing.''', 'Which Shakespearean monologue contemplates mortality?') get_cos_sim('''Full of vexation come I, with complaint Against my child, my daughter Hermia. Stand forth, Demetrius. My noble lord, This man hath my consent to marry her. Stand forth, Lysander. And my gracious Duke, This man hath bewitch'd the bosom of my child. Thou, thou, Lysander, thou hast given her rhymes, And interchanged love-tokens with my child: Thou hast by moonlight at her window sung With feigning voice verses of feigning love, And stol'n the impression of her fantasy With bracelets of thy hair, rings, gauds, conceits, Knacks, trifles, nosegays, sweetmeats (messengers Of strong prevailment in unharden'd youth): With cunning hast thou filch'd my daughter's heart, Turn'd her obedience, which is due to me, To stubborn harshness. And, my gracious Duke, Be it so she will not here, before your Grace, Consent to marry with Demetrius, I beg the ancient privilege of Athens: As she is mine, I may dispose of her; Which shall be either to this gentleman, Or to her death, according to our law Immediately provided in that case.''', 'Which Shakespearean monologue contemplates mortality?')
আপনার দেখা উচিত যে এমবেডিংটি দেখায় যে ম্যাকবেথ মনোলোগটি প্রাসঙ্গিকভাবে "কোন শেক্সপিয়রীয় মনোলোগটি মৃত্যুকে বিবেচনা করে?" প্রশ্নের অনেক কাছাকাছি। Egeus মনোলোগের চেয়ে, যা মৃত্যুর কথা উল্লেখ করে কিন্তু মৃত্যুর ধারণার সাথে সরাসরি জড়িত নয়।
এখন যেহেতু আমাদের এম্বেডিং আছে, আমরা কীভাবে এটি আমাদের RAG সিস্টেমে ব্যবহার করব? ঠিক আছে, ধরুন আমরা আমাদের RAG সিস্টেমকে শেক্সপিয়ারের সমস্ত মনোলোগের জ্ঞান দিতে চেয়েছিলাম যাতে এটি শেক্সপিয়র সম্পর্কে প্রশ্নের উত্তর দিতে পারে। এই ক্ষেত্রে, আমরা শেক্সপিয়রের সমস্ত মনোলোগ ডাউনলোড করব এবং তাদের জন্য এমবেডিং তৈরি করব। আপনি যদি অনুসরণ করেন তবে আপনি এইভাবে এমবেডিং তৈরি করতে পারেন:
embedding = openai.Embedding.create(model=EMBEDDING_MODEL, input=[monologue])['data'][0]['embedding']
একবার আমাদের এম্বেডিং হয়ে গেলে, আমরা সেগুলিকে এমনভাবে সংরক্ষণ করতে চাই যা আমাদেরকে একটি নতুন এম্বেডিংয়ের সাথে অনুসন্ধান করতে এবং তুলনা করতে দেয়৷ সাধারণত আমরা সেগুলিকে ভেক্টর ডেটাবেসে রাখতাম, যা একটি বিশেষ ডেটা স্টোর যা দুটি ভেক্টরের দ্রুত তুলনা করার অনুমতি দেয়। যাইহোক, যতক্ষণ না আপনার কর্পাস অত্যন্ত বড় হয়, ব্রুট-ফোর্স তুলনা আশ্চর্যজনকভাবে সহনীয় হয় বেশিরভাগ অ-উৎপাদন, পরীক্ষামূলক ব্যবহারের ক্ষেত্রে যেখানে কর্মক্ষমতা সমালোচনামূলক নয়।
আপনি একটি ডাটাবেস ব্যবহার করতে চান বা না করেন, আপনি এমন একটি সিস্টেম তৈরি করতে চান যা আপনার কর্পাসে আইটেম(গুলি) খুঁজে পেতে পারে যা প্রশ্নের সাথে সবচেয়ে উপযুক্ত। আমাদের উদাহরণে, আমরা ব্যবহারকারীর প্রশ্নের সাথে সবচেয়ে প্রাসঙ্গিক একক শব্দ খুঁজে বের করার ক্ষমতা রাখতে চাই। আপনি কিছু করতে চাইতে পারেন:
monologues_embeddings = [ ['Tomorrow, and tomorrow, and tomorrow...', [...]], # text in the left position, embedding in the right position ['Full of vexation come I...', [...]], … # More monologues and their embeddings as you see fit. ] def lookup_most_relevant(question): embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=[question])['data'][0]['embedding'] top_monologue = sorted(monologues_embeddings, key=lambda x: cosine_similarity(embed, x[1]), reverse=True)[0] return top_monologue lookup_most_relevant(“How does Macbeth evaluate his life when he is confronted with his mortality?“)
আপনি যদি এই উদাহরণটি চালান, আপনি ম্যাকবেথ মনোলোগটি নির্বাচন করা দেখতে পাবেন, প্রশ্নের সাথে প্রায় 82% মিল রয়েছে।
RAG মডেলের শেষ ধাপ হল প্রম্পট ইঞ্জিনিয়ারিং। আমাদের ক্ষেত্রে, এটি খুব কঠিন নয়। এখন যেহেতু আমাদের হাতে একাকীত্ব আছে, আমরা আমাদের ক্যোয়ারীতে মনোলোগটি এম্বেড করে একটি প্রম্পট তৈরি করতে পারি, তারপর প্রশ্ন জিজ্ঞাসা করতে পারি:
completion = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": """ Consider the following monologue: Tomorrow, and tomorrow, and tomorrow, Creeps in this petty pace from day to day, To the last syllable of recorded time; And all our yesterdays have lighted fools The way to dusty death. Out, out, brief candle! Life's but a walking shadow, a poor player, That struts and frets his hour upon the stage, And then is heard no more. It is a tale Told by an idiot, full of sound and fury, Signifying nothing. How does Macbeth evaluate his life when he is confronted with his mortality? """}, ] )
আপনি একটি উত্তর দেখতে হবে যেমন:
In the well-known "Tomorrow and tomorrow and tomorrow" monologue from Shakespeare's Macbeth, the titular character plunges into existential despair when confronted with his impending death. Macbeth evaluates his life as hollow, futile, and meaningless when facing his mortality. He sees it as a "walking shadow" and himself as a "poor player," highlighting his view of life as a fleeting, contrived performance with no lasting substance or impact. The "brief candle" is a metaphor for his own mortality, suggesting that life's flame can be extinguished suddenly and unceremoniously. By stating "It is a tale told by an idiot, full of sound and fury, signifying nothing," Macbeth is expressing his belief that life, despite all its noise and action, is ultimately empty, absurd, and void of meaning. Overall, Macbeth's examination of his life is profoundly pessimistic, revealing his deep despair and cynicism.
অবশ্যই, এই বিশেষ উদাহরণটি আরএজি আর্কিটেকচারের সবচেয়ে শক্তিশালী প্রদর্শন নয়, যেহেতু বেশিরভাগ জিপিটি মডেল ইতিমধ্যেই শেক্সপিয়রের মনোলোগ সম্পর্কে সচেতন এবং ইন্টারনেটে প্রকাশ্যে শেক্সপিয়রের বিশ্লেষণের বৃহৎ অংশে প্রশিক্ষিত হয়েছে। প্রকৃতপক্ষে, আপনি যদি GPT-4-কে একক শব্দ এম্বেড করা ছাড়াই এই সঠিক প্রশ্নটি জিজ্ঞাসা করেন, আপনি সম্ভবত একটি খুব ভাল উত্তর পাবেন, যদিও এটি সম্ভবত স্বগতোক্তিতে অনেকগুলি উদ্ধৃতি উল্লেখ করবে না। যাইহোক, এটি স্পষ্ট হওয়া উচিত যে, একটি বাণিজ্যিক সেটিংয়ে, এই কৌশলটি মালিকানা বা গুপ্ত ডেটাসেটগুলিতে ক্রস-প্রয়োগ করা যেতে পারে যা বিদ্যমান GPT বাস্তবায়নে অ্যাক্সেসযোগ্য নয়।
প্রকৃতপক্ষে, যে পাঠকরা আমার আগের নিবন্ধের সাথে পরিচিত, ChatGPT, Google ক্লাউড এবং পাইথনের সাথে একটি নথি বিশ্লেষক তৈরি করা , তারা চিনতে পারেন যে কৌশলটির শেষ অংশটি প্রম্পট ইঞ্জিনিয়ারিংয়ের সাথে খুব মিল যা আমি সেই নিবন্ধে করেছি। সেই ধারণা থেকে প্রসারিত, আমরা খুব সহজেই জাপান সরকারের প্রকাশনাগুলির উপরে নির্মিত একটি RAG সিস্টেম কল্পনা করতে পারি (সেই নিবন্ধের নমুনা ডেটা), যা ব্যবহারকারীদের জাপানি অর্থনৈতিক নীতি সম্পর্কে অনুসন্ধান এবং প্রশ্ন জিজ্ঞাসা করতে দেয়। সিস্টেমটি দ্রুত সবচেয়ে প্রাসঙ্গিক নথিগুলি পুনরুদ্ধার করবে, তাদের সংক্ষিপ্ত করবে এবং গভীর ডোমেন-নির্দিষ্ট জ্ঞানের ভিত্তিতে একটি উত্তর তৈরি করবে যা বেস GPT মডেলগুলিতে উপলব্ধ নয়। এই শক্তি এবং সরলতার কারণেই RAG আর্কিটেকচার এলএলএম ডেভেলপারদের মধ্যে প্রচুর আকর্ষণ পাচ্ছে।
এখন যেহেতু আমরা আরএজি স্থাপত্যের উপর চলে এসেছি, আসুন এই স্থাপত্যের কিছু ত্রুটিগুলি অন্বেষণ করি।
যেহেতু অনেক RAG সিস্টেম প্রশ্ন এবং প্রাসঙ্গিক নথিগুলিকে সংযুক্ত করতে ডকুমেন্ট এম্বেডিং এবং ভেক্টর অনুসন্ধানের উপর নির্ভর করে, পুরো সিস্টেমটি প্রায়শই ব্যবহৃত এমবেডিং মডেলের মতোই ভাল। OpenAI এম্বেডিং মডেলটি অবিশ্বাস্যভাবে নমনীয়, এবং এম্বেডিংয়ের সাথে টিউন করার জন্য অনেক কৌশল রয়েছে। LLaMa, GPT-এর মেটা-এর ওপেন-সোর্স প্রতিযোগী, সূক্ষ্ম-টিউনেবল এমবেডিং মডেল অফার করে। যাইহোক, এমবেডিং মডেলের একটি অনিবার্য ব্ল্যাক-বক্স দিক রয়েছে। সংক্ষিপ্ত টেক্সট স্ট্রিং তুলনা করার সময় এটি কিছুটা পরিচালনাযোগ্য, কিন্তু দীর্ঘ নথির সাথে ছোট স্ট্রিংগুলির তুলনা করার সময় এটি যাচাই করা এবং ডিবাগ করা কঠিন হয়ে পড়ে। আমাদের আগের উদাহরণে, আমাদের বিশ্বাসের সামান্য লাফ দিতে হবে যে এমবেডিং লুকআপ "মরণতা" কে "আগামীকাল, এবং আগামীকাল এবং আগামীকাল" মনোলোগের সাথে সংযুক্ত করতে সক্ষম। এটি কাজের চাপের জন্য বেশ অস্বস্তিকর হতে পারে যেখানে স্বচ্ছতা এবং ডিবাগযোগ্যতা গুরুত্বপূর্ণ।
আরএজি মডেলের আরেকটি সীমাবদ্ধতা হল তুলনামূলকভাবে সীমিত পরিমাণ প্রসঙ্গ যা এতে পাস করা যেতে পারে। যেহেতু এমবেডিং মডেলের ভালোভাবে কাজ করার জন্য নথি-স্তরের প্রসঙ্গ প্রয়োজন, তাই এম্বেডিংয়ের জন্য কর্পাস কাটার সময় আমাদের সতর্কতা অবলম্বন করতে হবে। ম্যাকবেথ মনোলগটির মৃত্যুহার সম্পর্কে প্রশ্নের সাথে 82% মিল থাকতে পারে, তবে এই সংখ্যাটি 78% এ নেমে যায় যখন আপনি একাকীত্বের প্রথম দুটি লাইনের এমবেডিংয়ের সাথে প্রশ্নটির তুলনা করেন, অর্থাৎ, "আগামীকাল, এবং আগামীকাল, এবং আগামীকাল দিনে দিনে এই তুচ্ছ গতিতে, রেকর্ড করা সময়ের শেষ শব্দাংশ পর্যন্ত।"
ফলস্বরূপ, RAG প্রম্পটে যে প্রসঙ্গটি পাস করা হয়েছে তা বরং বড় হওয়া দরকার। বর্তমানে, সর্বাধিক উচ্চ-প্রসঙ্গ GPT মডেলগুলি এখনও 16,000 টোকেনের মধ্যে সীমাবদ্ধ, যা অনেকগুলি পাঠ্য, কিন্তু আপনি যখন দীর্ঘ ইন্টারভিউ ট্রান্সক্রিপ্ট বা প্রসঙ্গ-সমৃদ্ধ নিবন্ধগুলির সাথে কাজ করছেন, তখন আপনি কতটা প্রসঙ্গ দিতে পারবেন তার মধ্যে সীমাবদ্ধ থাকবেন। চূড়ান্ত প্রজন্মের প্রম্পটে।
RAG মডেলের চূড়ান্ত সীমাবদ্ধতা হল অভিনব পরিভাষা নিয়ে কাজ করতে না পারা। নির্দিষ্ট ক্ষেত্রে কাজ করা লোকেরা পরিভাষা এবং কথা বলার উপায়গুলি বিকাশ করে যা সেই ক্ষেত্রের জন্য অনন্য। যখন এই পরিভাষাগুলি এমবেডিং মডেলের প্রশিক্ষণ ডেটা উপস্থিত না হয়, তখন সন্ধান প্রক্রিয়া ক্ষতিগ্রস্ত হবে৷
উদাহরণস্বরূপ, ada-002 এম্বেডিং মডেলটি নাও জানতে পারে যে "মরিচা প্রোগ্রামিং ভাষা" "LLVM" এর সাথে সম্পর্কিত। প্রকৃতপক্ষে, এটি 78% এর তুলনামূলকভাবে কম কোসাইন সাদৃশ্য প্রদান করে। এর অর্থ হল LLVM সম্পর্কে কথা বলা নথিগুলি মরিচা সম্পর্কে একটি প্রশ্নে একটি শক্তিশালী মিল নাও দেখাতে পারে, যদিও দুটি ধারণা বাস্তব জীবনে ঘনিষ্ঠভাবে সম্পর্কিত।
সাধারণত, অভিনব পরিভাষার সমস্যা কিছু প্রম্পট ইঞ্জিনিয়ারিং দিয়ে কাটিয়ে উঠতে পারে, কিন্তু এমবেডিং অনুসন্ধানের পরিপ্রেক্ষিতে, এটি করা তুলনামূলকভাবে কঠিন। একটি এমবেডিং মডেলকে ফাইন-টিউনিং করা, যেমনটি আগে উল্লেখ করা হয়েছে, সম্ভব, তবে এমবেডিং মডেলটিকে সমস্ত প্রসঙ্গে অভিনব পরিভাষা শেখানো ত্রুটি-প্রবণ এবং সময়সাপেক্ষ হতে পারে।
এই সীমাবদ্ধতার পরিপ্রেক্ষিতে, আমি RAG সিস্টেমের একটি নতুন শ্রেণীর জন্য একটি পরিবর্তিত আর্কিটেকচার প্রস্তাব করতে চাই যা উপরে বর্ণিত অনেক সীমাবদ্ধতাকে পাশ কাটিয়ে যায়। ধারণাটি কর্পাস ছাড়াও প্রায়শই জিজ্ঞাসিত প্রশ্নগুলির উপর ভেক্টর অনুসন্ধান করার উপর ভিত্তি করে এবং প্রশ্নগুলির প্রসঙ্গে কর্পাসকে প্রিপ্রসেস করার জন্য একটি LLM ব্যবহার করে। যদি সেই প্রক্রিয়াটি জটিল মনে হয়, চিন্তা করবেন না, আমরা এই বিভাগে বাস্তবায়নের বিশদ বিবরণের সাথে সাথে কোড উদাহরণগুলি যা আপনি অনুসরণ করতে ব্যবহার করতে পারেন।
একটি বিষয় লক্ষণীয় যে QE-RAG একটি ভ্যানিলা RAG বাস্তবায়নের পাশাপাশি চালানো উচিত যাতে এটি প্রয়োজনে অন্য বাস্তবায়নে ফিরে যেতে পারে। বাস্তবায়ন পরিপক্ক হওয়ার সাথে সাথে এটির ফলব্যাক কম এবং কম প্রয়োজন হবে, তবে QE-RAG এখনও ভ্যানিলা RAG আর্কিটেকচারের প্রতিস্থাপনের পরিবর্তে একটি বর্ধিত করার উদ্দেশ্যে তৈরি করা হয়েছে।
QE-RAG আর্কিটেকচারের বিস্তৃত স্ট্রোকগুলি নিম্নরূপ:
আসুন পালাক্রমে প্রতিটি অংশ মাধ্যমে যান.
আর্কিটেকচার শুরু হয়, অনেকটা ভ্যানিলা RAG-এর মতো, একটি এম্বেডিং এবং একটি ভেক্টর ডাটাবেস সহ। যাইহোক, নথিগুলি এম্বেড করার পরিবর্তে, আমরা একাধিক প্রশ্ন এম্বেড করব।
এটি ব্যাখ্যা করার জন্য, ধরুন আমরা একটি এলএলএম তৈরি করার চেষ্টা করছি যা শেক্সপিয়ারের বিশেষজ্ঞ। আমরা এটির মতো প্রশ্নের উত্তর দিতে চাই:
questions = [ "How does political power shape the way characters interact in Shakespeare's plays?", "How does Shakespeare use supernatural elements in his plays?", "How does Shakespeare explore the ideas of death and mortality in his plays?", "How does Shakespeare explore the idea of free will in his plays?" ]
আমরা তাদের জন্য একটি এমবেডিং তৈরি করতে চাই, এবং সেগুলি সংরক্ষণ করতে বা পরে ব্যবহার করতে চাই:
questions_embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=questions)
এখন যেহেতু আমাদের প্রশ্ন আছে, আমরা ডাউনলোড করতে চাই এবং কর্পাসটি সংক্ষিপ্ত করতে চাই। এই উদাহরণের জন্য, আমরা ম্যাকবেথ এবং হ্যামলেটের এইচটিএমএল সংস্করণ ডাউনলোড করব:
import openai import os import requests from bs4 import BeautifulSoup plays = { 'shakespeare_macbeth': 'https://www.gutenberg.org/cache/epub/1533/pg1533-images.html', 'shakespeare_hamlet': 'https://www.gutenberg.org/cache/epub/1524/pg1524-images.html', } if not os.path.exists('training_plays'): os.mkdir('training_plays') for name, url in plays.items(): print(name) file_path = os.path.join('training_plays', '%s.txt' % name) if not os.path.exists(file_path): res = requests.get(url) with open(file_path, 'w') as fp_write: fp_write.write(res.text)
তারপরে আমরা এইচটিএমএল ট্যাগগুলিকে নির্দেশিকা হিসাবে ব্যবহার করে দৃশ্যগুলিতে নাটকগুলি প্রক্রিয়া করি:
with open(os.path.join('training_plays', 'shakespeare_hamlet.txt')) as fp_file: soup = BeautifulSoup(''.join(fp_file.readlines())) headers = soup.find_all('div', {'class': 'chapter'})[1:] scenes = [] for header in headers: cur_act = None cur_scene = None lines = [] for i in header.find_all('h2')[0].parent.find_all(): if i.name == 'h2': print(i.text) cur_act = i.text elif i.name == 'h3': print('\t', i.text.replace('\n', ' ')) if cur_scene is not None: scenes.append({ 'act': cur_act, 'scene': cur_scene, 'lines': lines }) lines = [] cur_scene = i.text elif (i.text != '' and not i.text.strip('\n').startswith('ACT') and not i.text.strip('\n').startswith('SCENE') ): lines.append(i.text)
এবং এখানে যে অংশটি QE-RAG কে অনন্য করে তোলে, নির্দিষ্ট দৃশ্যের জন্য এম্বেডিং তৈরি করার পরিবর্তে, আমরা প্রতিটি প্রশ্নের জন্য লক্ষ্য করে তাদের জন্য সারাংশ তৈরি করি:
def summarize_for_question(text, question, location): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that provides helpful summaries."}, {"role": "user", "content": """Is the following excerpt from %s relevant to the following question? %s === %s === If so, summarize the sections that are relevant. Include references to specific passages that would be useful. If not, simply say: \"nothing is relevant\" without additional explanation""" % ( location, question, text )}, ] ) return completion
এই ফাংশনটি ChatGPT কে 2টি কাজ করতে বলে: 1) প্যাসেজটি হাতের কাছে থাকা প্রশ্নের উত্তর দেওয়ার জন্য সত্যিই উপযোগী কিনা তা সনাক্ত করুন এবং 2) দৃশ্যের অংশগুলিকে সংক্ষিপ্ত করুন যা প্রশ্নের উত্তর দেওয়ার জন্য দরকারী৷
আপনি যদি ম্যাকবেথ বা হ্যামলেটের কয়েকটি মূল দৃশ্যের সাথে এই ফাংশনটি চেষ্টা করেন, আপনি দেখতে পাবেন যে GPT3.5 একটি দৃশ্যটি প্রশ্নের সাথে প্রাসঙ্গিক কিনা তা সনাক্ত করতে বেশ ভাল, এবং সারাংশটি দৃশ্যটির চেয়ে কিছুটা ছোট হবে। এটি প্রম্পট ইঞ্জিনিয়ারিং ধাপে পরে এম্বেড করা আরও সহজ করে তোলে।
এখন আমরা সমস্ত দৃশ্যের জন্য এটি করতে পারি।
for scene in scenes: scene_text = ''.join(scene['lines']) question_summaries = {} for question in questions: completion = summarize_for_question(''.join(scene['lines']), question, "Shakespeare's Hamlet") question_summaries[question] = completion.choices[0].message['content'] scene['question_summaries'] = question_summaries
প্রোডাকশন ওয়ার্কলোডগুলিতে, আমরা সারাংশগুলিকে একটি ডাটাবেসে রাখব, কিন্তু আমাদের ক্ষেত্রে, আমরা এটিকে কেবল ডিস্কে একটি JSON ফাইল হিসাবে লিখব।
এখন ধরুন আমরা নীচের মত একটি ব্যবহারকারীর প্রশ্ন পেয়েছি:
user_question = "How do Shakespearean characters deal with the concept of death?"
ভ্যানিলা RAG এর মতো, আমরা প্রশ্নের জন্য একটি এম্বেডিং তৈরি করতে চাই:
uq_embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=[user_question])['data'][0]['embedding']
একটি ভ্যানিলা RAG-তে, আমরা শেক্সপিয়ারের দৃশ্যের জন্য এমবেডিংয়ের সাথে ব্যবহারকারীর প্রশ্ন এম্বেডিংয়ের তুলনা করব, কিন্তু QE-RAG-তে, আমরা প্রশ্নগুলির সাথে এমবেডিংয়ের সাথে তুলনা করি:
print([cosine_similarity(uq_embed, q) for q in question_embed])
আমরা দেখি যে ভেক্টর অনুসন্ধান (সঠিকভাবে) প্রশ্ন 3 কে সবচেয়ে প্রাসঙ্গিক প্রশ্ন হিসাবে চিহ্নিত করেছে। এখন, আমরা প্রশ্ন 3 এর জন্য সংক্ষিপ্ত তথ্য পুনরুদ্ধার করি:
relevant_texts = [] for scene in hamlet + macbeth: # hamlet and macbeth are the scene lists from the above code if "NOTHING IS RELEVANT" not in scene['question_summaries'][questions[2]].upper() and \ "NOTHING IN THIS EXCERPT" not in scene['question_summaries'][questions[2]].upper() and \ 'NOTHING FROM THIS EXCERPT' not in scene['question_summaries'][questions[2]].upper() and \ "NOT DIRECTLY ADDRESSED" not in scene['question_summaries'][questions[2]].upper(): relevant_texts.append(scene['question_summaries'][questions[2]])
অনুগ্রহ করে মনে রাখবেন, যেহেতু GPT সংক্ষিপ্তকরণ নির্ধারক নয়, তাই আপনি বিভিন্ন স্ট্রিং পেতে পারেন যেটি নির্দেশ করে যে একটি দৃশ্য হাতের প্রশ্নের সাথে প্রাসঙ্গিক নয়। মূল বিষয় হল শুধুমাত্র প্রাসঙ্গিক সারাংশের তালিকায় প্রাসঙ্গিক উদ্ধৃতিগুলিকে পুশ করা।
এই পর্যায়ে, আমরা আমাদের প্রম্পটে শুধুমাত্র সবচেয়ে প্রাসঙ্গিক সারাংশগুলি অন্তর্ভুক্ত করার জন্য একটি দ্বিতীয়-স্তরের ভেক্টর অনুসন্ধান করতে পারি, কিন্তু আমাদের কর্পাসের আকার বিবেচনা করে, আমরা আমাদের প্রম্পটে সম্পূর্ণ relevant_texts
তালিকা ব্যবহার করতে পারি।
এখন আমাদের কাছে সমস্ত উদ্ধৃতি রয়েছে, আমরা এইভাবে প্রম্পট তৈরি করতে পারি:
completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that answers questions based on excerpts."}, {"role": "user", "content": """Consider the following passages: %s ==== Answer this question: %s Be detailed and complete in your analysis. Make references to specific passages where helpful. Answer only based on passages provided. """ % ( '\n===\n'.join(relevant_texts), user_question )}, ] )
API কল চলতে দিন, এবং আপনি নীচের মত কিছু দেখতে হবে:
Based on the passages provided, Shakespearean characters deal with the concept of death in various ways. In Hamlet, for example, the characters contemplate the nature of death and its implications. Hamlet himself reflects on the brevity of life and the corrupting influence of vices. He questions the purpose of existence and contemplates suicide as a release from the burdens of life. In the passage, Hamlet says, "To die, to sleep— / To sleep, perchance to dream. Ay, there's the rub, / For in that sleep of death what dreams may come" (Lines 65-67). This shows his contemplation of the afterlife and the uncertainty surrounding it. In Macbeth, characters are confronted with the consequences of their actions and the fragility of life. Lady Macbeth, for instance, experiences guilt and remorse for her involvement in the murder of King Duncan. She is haunted by visions of blood on her hands and expresses the desire to escape the consequences of her actions. In the passage, Lady Macbeth says, "Out, damned spot! Out, I say!" (Line 30). This demonstrates her struggle to cope with the guilt and the psychological toll it takes on her. Furthermore, both Macbeth and Lady Macbeth reflect on the inevitability and the consequences of their actions. In the passage, Macbeth laments the decay of life and the loss of purpose and meaning. He reflects on the transitory nature of existence and the insignificance of worldly achievements. Macbeth states, "Life's but a walking shadow, a poor player / That struts and frets his hour upon the stage" (Lines 217-218). This shows his acceptance of mortality and his realization that material possessions and power do not bring true fulfillment. In summary, Shakespearean characters deal with the concept of death in various ways. They contemplate the nature of life and the afterlife, struggle with guilt and remorse, and question the meaning and purpose of their existence. Shakespeare's exploration of death and mortality through his characters provides insight into the complexities of human nature and the universal human experience of confronting one's mortality.
যা হ্যামলেট এবং ম্যাকবেথের বিভিন্ন অংশ থেকে আঁকা একটি খুব ভাল সারাংশ।
তুলনা করার জন্য, আমি সম্পূর্ণ দৃশ্যের জন্য এম্বেডিং তৈরি করেছি এবং একই প্রম্পট ব্যবহার করে একটি ভ্যানিলা RAG লুকআপ চালিয়েছি, যতক্ষণ না আমি 10,000 টোকেন পৌঁছেছি ততক্ষণ শীর্ষ N সবচেয়ে প্রাসঙ্গিক দৃশ্যগুলি খুঁজে পেয়েছি
relevant_texts = [] for i in range(10): if len(encoding.encode('\n===\n'.join(relevant_texts))) > 10000: break relevant_texts.append(''.join(macbeth[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(macbeth_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines'])) relevant_texts.append(''.join(hamlet[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(hamlet_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines']))
আপনি যদি এটিকে প্রম্পটে খাওয়ান, তাহলে আপনি নীচের মত কিছু দেখতে পাবেন:
Based on the provided passages, Shakespearean characters deal with the concept of death in various ways. In Hamlet, the characters reflect on death and mortality extensively. Hamlet himself contemplates suicide, expressing his desire to end his suffering and questioning the purpose of life. He says, "To be, or not to be: that is the question" (Hamlet, Act III, Scene I, Lines 56). This soliloquy reveals his struggle with the concept of death and his contemplation of the consequences of choosing either life or death. Additionally, in the same play, the appearance of the Ghost prompts discussions about death. The characters question the meaning and significance of encountering the dead, and Hamlet grapples with the idea of mortality in relation to his father's death. He reflects, "Oh God! a beast that wants discourse of reason / Would have mourn'd longer" (Hamlet, Act I, Scene II, Lines 152-153). This passage highlights Hamlet's grief and his pondering of the brevity of life and the transitory nature of existence. In Macbeth, the characters also confront death and its consequences. Macbeth, after killing King Duncan, reflects on the significance of the act and its implications. He says, "Will all great Neptune's ocean wash this blood Clean from my hand? No, this my hand will rather The multitudinous seas incarnadine" (Macbeth, Act II, Scene II, Lines 77-79). This passage showcases Macbeth's awareness of the guilt associated with murder and his realization that the blood on his hands cannot be cleansed. Lady Macbeth, on the other hand, shows a different perspective on death. She suppresses her guilt and tries to detach herself from the consequences of their actions. She states, "A little water clears us of this deed" (Macbeth, Act II, Scene II, Line 69). This passage reveals her denial and determination to move forward without remorse. In conclusion, Shakespearean characters deal with the concept of death in various ways. Some contemplate the meaning of life and question the purpose of existence, while others grapple with the guilt and consequences that come with taking a life. Shakespeare explores the complexities of death and mortality through his characters' introspection and their different responses to the inevitability of death.
এটি খুবই সংযত বিশ্লেষণ, কিন্তু হ্যামলেট এবং ম্যাকবেথের অনেক গুরুত্বপূর্ণ অনুচ্ছেদের সাথে জড়িত নয়। আপনি দেখতে পাচ্ছেন, QE-RAG-এর একটি স্বতন্ত্র সুবিধা রয়েছে যা একটি স্ট্যান্ডার্ড RAG সিস্টেমের তুলনায় আরও প্রাসঙ্গিক প্রসঙ্গ এম্বেড করতে সক্ষম।
উপরের উদাহরণটি, তবে, QE-RAG-এর আরেকটি সুবিধা প্রদর্শন করে না, যা বিকাশকারীকে এম্বেডিং প্রক্রিয়ার আরও ভাল নিয়ন্ত্রণ দেওয়ার ক্ষমতা। QE-RAG কীভাবে এটি অর্জন করে তা দেখতে, আসুন এই সমস্যার একটি এক্সটেনশন দেখি - নতুন পরিভাষা নিয়ে কাজ করা।
আপনি যখন একটি নতুন পরিভাষা প্রবর্তন করছেন তখন QE-RAG সত্যিই উজ্জ্বল হয়। উদাহরণস্বরূপ, ধরুন আপনি একটি নতুন ধারণা প্রবর্তন করছেন, যেমন জাপানি শব্দ "zetsubou", যেটি একটি শব্দ যা হতাশা এবং হতাশার মধ্যে বসে, বিশেষভাবে একজনের পরিস্থিতির কাছে আত্মসমর্পণকে বোঝায়। এটি হতাশার ইংরেজী ধারণার মতো অবিলম্বে বিপর্যয়কর নয়, তবে ঘটছে এমন অপ্রীতিকর জিনিসগুলির প্রতি সম্মতি সম্পর্কে আরও অনেক কিছু।
অনুমিত আমরা একটি প্রশ্নের উত্তর দিতে চাই:
user_question = "How do Shakespearean characters cope with Zetsubou?"
ভ্যানিলা RAG দিয়ে আমরা একটি এম্বেডিং অনুসন্ধান করব, তারপর চূড়ান্ত প্রম্পট ইঞ্জিনিয়ারিং ধাপে একজন ব্যাখ্যাকারী যোগ করব:
relevant_texts = [] for i in range(10): if len(encoding.encode('\n===\n'.join(relevant_texts))) > 10000: break relevant_texts.append(''.join(macbeth[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(macbeth_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines'])) relevant_texts.append(''.join(hamlet[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(hamlet_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines'])) completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that answers questions based on excerpts."}, {"role": "user", "content": """Zetsubou is the concept of hopelessness and despair, combined with a surrender to whim of one's circumstances. Consider the following passages: %s ==== Answer this question: %s Be detailed and complete in your analysis. Make references to specific passages where helpful. Answer only based on passages provided. """ % ( '\n===\n'.join(relevant_texts), user_question )}, ] )
ফলাফলটি একটি খুব ভালভাবে লিখিত এবং সহানুভূতিশীল তবে হ্যামলেটের কয়েকটি দৃশ্যের উপর দৃষ্টি নিবদ্ধ করে সামান্য অতিরিক্ত প্রসারিত উত্তর। এই উত্তরে ম্যাকবেথকে মোটেও উল্লেখ করা হয়নি, কারণ কোনো দৃশ্যই এম্বেডিং অনুসন্ধানে পাস করেনি। এমবেডিংগুলি দেখার সময়, এটি খুব স্পষ্ট যে "জেটসুবউ" এর শব্দার্থক অর্থটি সঠিকভাবে ধরা হয়নি এবং তাই প্রাসঙ্গিক পাঠ্যগুলি এটি থেকে পুনরুদ্ধার করা যায়নি।
QE-RAG-এ, আমরা সংক্ষিপ্তকরণ পর্যায়ে নতুন শব্দের সংজ্ঞা দিতে পারি, নাটকীয়ভাবে সিস্টেম দ্বারা অ্যাক্সেসযোগ্য পাঠ্যের গুণমান উন্নত করে:
def summarize_for_question(text, question, location, context=''): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that provides helpful summaries."}, {"role": "user", "content": """%s Is the following excerpt from %s relevant to the following question? %s === %s === If so, summarize the sections that are relevant. Include references to specific passages that would be useful. If not, simply say: \"nothing is relevant\" without additional explanation""" % ( context, location, question, text )}, ] ) return completion questions = [ "How do characters deal with Zetsubou in Shakespearean plays?" ] summarize_for_question(''.join(scene['lines']), questions[0], "Shakespeare's Macbeth", "Zetsubou is the concept of hopelessness and despair, combined with a surrender to whim of one's circumstances." )
প্যাসেজগুলির সাথে এই সংক্ষিপ্তকরণ প্রম্পটটি ব্যবহার করুন এবং আপনি সারাংশগুলি দেখতে পাবেন যা অত্যন্ত নির্ভুল এবং প্রাসঙ্গিক। এই সারাংশগুলি পরবর্তী QE-RAG-এ ব্যবহার করা যেতে পারে।
অতিরিক্তভাবে, প্রশ্ন এমবেডিং অত্যন্ত অনুরূপ হবে, কারণ যদিও ada-002 "zetsubou" এর সঠিক অর্থ জানে না, উভয় প্রশ্নেই এই শব্দের উপস্থিতি প্রশ্নটিকে এমবেডিংকে অত্যন্ত একই রকম করে তোলে।
অতএব, Zetsubou সম্পর্কে মূল প্রশ্নের উত্তর দিতে QE-RAG ব্যবহার করে, আমরা নিম্নলিখিত উত্তর পাই:
Based on the passages provided, Shakespearean characters cope with Zetsubou, or hopelessness and despair, in different ways. In "Macbeth," Lady Macbeth copes with Zetsubou through guilt and anguish. She is consumed by the guilt of her and her husband's actions, and this guilt manifests in her sleepwalking and attempts to wash her hands of imagined blood stains. This can be seen in her utterances of "Out, damned spot!" and her preoccupation with the blood on her hands. Lady Macbeth's coping mechanism is to face the consequences of her actions head-on, even if it means descending into madness. The Doctor and Gentlewoman observe her behavior and acknowledge that her condition requires divine intervention. In "Hamlet," the excerpt does not provide specific passages or examples of characters coping with Zetsubou. However, it does address Hamlet's inner turmoil and struggle to cope with his circumstances. Hamlet's state of mind, confusion, and madness are a reflection of despair. The characters in this scene are attempting to understand Hamlet's condition and find ways to deal with it, but the excerpt does not provide details on how they cope with Zetsubou. In "Macbeth," Macbeth himself copes with Zetsubou by surrendering to his dire circumstances. He becomes desensitized to fear and horror, indicating a kind of resignation to his grim circumstances. He acknowledges that there is no escape from his fate and chooses to face it head-on, even though he knows it will lead to his downfall. Macbeth's reaction to the news of his wife's death and his subsequent soliloquy reflect a deep despair and hopelessness. He sees life as meaningless, a "tale Told by an idiot, full of sound and fury, Signifying nothing." Macbeth's surrender to his circumstances and his belief in the futility of life demonstrate his coping mechanism for Zetsubou. In "Macbeth," Lady Macduff copes with Zetsubou by expressing her feelings of despair and hopelessness. She feels betrayed and abandoned by her husband, who has fled and left their family behind. She questions his actions and believes that they show a lack of love and wisdom. Lady Macduff experiences a sense of abandonment, which aligns with the concept of Zetsubou. She tries to make her son understand the severity of their circumstances, but he questions the definition of a traitor. Lady Macduff ultimately meets a tragic end, indicating that her coping mechanism for Zetsubou is not successful. In summary, Shakespearean characters cope with Zetsubou in different ways. Lady Macbeth copes through guilt and faces the consequences of her actions, even if it means descending into madness. Macbeth copes through surrendering to his dire circumstances and embracing his fate. Lady Macduff copes through expressing her feelings of despair and hopelessness but ultimately meets a tragic end. These characters' coping mechanisms reflect different responses to Zetsubou in Shakespearean plays
আউটপুট এখনও এই ধারণার সাথে কিছুটা লড়াই করে, তবে এটি স্পষ্ট হওয়া উচিত যে QE-RAG প্রশ্নের মাংসের সাথে জড়িত হতে এবং বিভিন্ন উত্স থেকে আঁকতে অনেক বেশি সক্ষম।
এবং এর সাথে, আমরা QE-RAG প্রয়োগ করেছি, এবং এর ব্যবহার-কেস প্রদর্শন করেছি!
আজকের নিবন্ধে, আমরা ক্রমবর্ধমান জনপ্রিয় RAG আর্কিটেকচার এবং এর সীমাবদ্ধতাগুলি পরীক্ষা করেছি। তারপরে আমরা QE-RAG নামক একটি নতুন আর্কিটেকচারের সাথে RAG আর্কিটেকচার প্রসারিত করেছি, যা বড় ভাষার মডেলের ক্ষমতাকে আরও সম্পূর্ণরূপে ব্যবহার করতে দেখায়। উন্নত নির্ভুলতা এবং প্রাসঙ্গিক অ্যাক্সেস ছাড়াও, QE-RAG সমগ্র সিস্টেমটিকে ব্যবহারকারীদের সাথে মিথস্ক্রিয়া করার সাথে সাথে বৃদ্ধি পেতে দেয় এবং জিজ্ঞাসা করা প্রশ্নগুলির সাথে আরও পরিচিত হয়ে ওঠে, যা ফার্মগুলিকে ওপেন সোর্সের উপরে অনন্য বৌদ্ধিক সম্পত্তি বিকাশ করতে দেয়। অথবা বাণিজ্যিকভাবে উপলব্ধ এলএলএম ।
অবশ্যই, একটি পরীক্ষামূলক ধারণা হিসাবে, QE-RAG নিখুঁত নয়। এই আর্কিটেকচারটি কীভাবে উন্নত করা যায় সে সম্পর্কে আপনার যদি ধারণা থাকে, বা আপনি কেবল LLM প্রযুক্তি সম্পর্কে আলোচনা করতে চান, দয়া করে আমার Github বা LinkedIn- এর মাধ্যমে আমাকে একটি লাইন ড্রপ করতে দ্বিধা করবেন না।