মূল কনটেন্টে যান
এআই টিউটোরিয়াল

PyTorch দিয়ে ব্রাজিলীয় আইনসভা-ভিত্তিক ভাষা মডেল তৈরি ও চালান

LLM Legislativo Brasileiro কীভাবে ব্রাজিলের সরকারি আইনসভা-সংক্রান্ত নথি সংগ্রহ ও পরিমার্জন করে, শূন্য থেকে একটি causal Transformer প্রশিক্ষণ দেয়, ডেটা পাইপলাইন যাচাই করে এবং প্রকাশিত মডেল ও টোকেনাইজার দিয়ে ইনফারেন্স চালায়, তা শিখুন।

PyTorch দিয়ে ব্রাজিলীয় আইনসভা-ভিত্তিক ভাষা মডেল তৈরি ও চালান

LLM Legislativo Brasileiro কী?

LLM Legislativo Brasileiro হলো ব্রাজিলের আইনসভা-সংক্রান্ত নথিতে বিশেষায়িত একটি causal language model তৈরির পূর্ণাঙ্গ গবেষণা ও প্রকৌশল প্রকল্প। এটি চেম্বার অব ডেপুটিজ এবং ফেডারেল সিনেটের সরকারি উপকরণকে নিরীক্ষাযোগ্য উন্মুক্ত ডেটাসেটে সংগঠিত করে, তারপর PyTorch ব্যবহার করে সম্পূর্ণ শূন্য থেকে একটি Transformer decoder প্রশিক্ষণ দেয়।

প্রকল্পটি pretrained weights, closed APIs বা Hugging Face Trainer-এর মতো উচ্চ-স্তরের training abstraction ব্যবহার করে না। এর নকশায় open science, পুনরুৎপাদনযোগ্যতা, SHA-256 integrity check এবং training, validation ও test data-এর মধ্যে কঠোর causal isolation-কে গুরুত্ব দেওয়া হয়েছে।

এই মডেলটি একটি গবেষণা ও শিক্ষামূলক নিদর্শন। একে তথ্যভিত্তিক আইনি পরামর্শদাতা বা বিধিবদ্ধ সিদ্ধান্তের সরঞ্জাম হিসেবে বিবেচনা করা উচিত নয়, কারণ causal language model আইন, সংশোধনী, সারসংক্ষেপ ও আইনি বিধান বানিয়ে বলতে পারে।

প্রধান বৈশিষ্ট্য

  • চেম্বার ও সিনেটের সংগ্রহসহ 360 GiB-এর বেশি সরকারি raw data।
  • 930,000-এর বেশি নথি ও বিষয়বস্তুসমৃদ্ধ সংস্করণ, যেমন বিল, সাংবিধানিক সংশোধনী, প্রতিবেদন, মতামত, বিকল্প খসড়া, চূড়ান্ত পাঠ এবং অধিবেশনের নথি।
  • Hugging Face Hub-এ পাঁচটি উন্মুক্ত dataset release, যেখানে raw archive, extracted text এবং curated Apache Parquet data অন্তর্ভুক্ত।
  • শুধু training split ব্যবহার করে প্রশিক্ষিত 8,192-token byte-level BPE tokenizer।
  • PyTorch-এ বাস্তবায়িত একটি explicit causal Transformer decoder, যাতে ছয়টি layer, ছয়টি attention head, 384-মাত্রিক hidden representation এবং 512-token context window রয়েছে।
  • Token embedding ও output projection layer-এর মধ্যে weight tying।
  • সর্বমোট বৈধ target-এর ওপর ভিত্তি করে সুনির্দিষ্ট gradient accumulation, যা বিভিন্ন দৈর্ঘ্যের sequence-এ padding-জনিত weighting error এড়ায়।
  • Legislative family identifier-এর ভিত্তিতে নির্ধারিত 80/10/10 data split, যা সম্পর্কিত নথিকে training ও test boundary অতিক্রম করতে বাধা দেয়।
  • safetensors format-এ উন্মুক্ত model weights, সঙ্গে tokenizer, configuration, metrics এবং standalone inference code।

ডেটা ও প্রশিক্ষণ pipeline বুঝুন

Repository-টি প্রকল্পটিকে বিশেষায়িত কয়েকটি ধাপে ভাগ করেছে। সরকারি চেম্বার ও সিনেটের inventory নির্ভরযোগ্য, idempotent প্রক্রিয়ার মাধ্যমে সংগ্রহ ও ডাউনলোড করা হয়। Raw file Git-এর বাইরে রাখা হয়, আর হালকা metadata, schema ও configuration file version control-এ রাখা হয়।

macOS-এ native Swift extraction adapter embedded text-যুক্ত নথির জন্য PDFKit ব্যবহার করে। স্ক্যান করা page বা অপর্যাপ্ত text density-যুক্ত page Apple Vision OCR-এ পাঠানো হয়। এরপর R-এ exact SHA-256 deduplication, passage-containment detection এবং igraph ব্যবহার করে নির্মিত global legislative-family graph-এর মাধ্যমে প্রাপ্ত text curated করা হয়।

একই legislative process-এর সঙ্গে যুক্ত প্রতিটি proposition, amendment, report, opinion ও substitute একই family_id পায়। ওই identifier-এর deterministic hash পুরো family-টিকে training, validation অথবা test-এ বরাদ্দ করে। এর ফলে evaluation split-গুলোর মধ্যে সম্পর্কিত সংস্করণ ফাঁস হওয়া প্রতিরোধ করা যায়।

Partitioning-এর পর Python tokenization stage শুধু training data ব্যবহার করে 8,192 token-এর byte-level BPE vocabulary প্রশিক্ষণ দেয়। এটি Portuguese accent, §, º, ª এবং Art.-এর মতো legislative symbol, পাশাপাশি numeral ও অন্যান্য special character সমর্থন করে। Tokenized data 512-token window-এর index-সহ binary shard-এ লেখা হয়।

Repository সেট আপ করুন

1. প্রকল্প clone করুন

Repository-টির জন্য Python 3.9 বা পরবর্তী সংস্করণ প্রয়োজন। এটি clone করে project directory-তে প্রবেশ করুন:

git clone https://github.com/BaruqueRodrigues/llm-legislativo.git
cd llm-legislativo

2. একটি virtual environment তৈরি করুন

Virtual environment ব্যবহার করলে প্রকল্পের dependency আপনার system-এর অন্যান্য অংশ থেকে আলাদা থাকে:

python3 -m venv .venv
source .venv/bin/activate

3. package install করুন

Repository-টি editable mode-এ install করুন, যাতে local source-এর পরিবর্তন সঙ্গে সঙ্গে ব্যবহার করা যায়:

pip install -e .

Repository-তে src/legislm/-এর অধীনে একটি Python package, base ও CPU environment-এর জন্য lockfile, R reproducibility metadata, declarative configuration, notebook, command-line script এবং test suite রয়েছে।

Installation যাচাই করুন

Model inference বা বড় পরিসরের training শুরু করার আগে CPU-তে স্থানীয়ভাবে automated test চালান:

pytest tests/ -q

README-তে model behavior, persistence, tokenization ও evaluation-কে কভার করা 135টির বেশি unit ও contract test-এর কথা বলা হয়েছে। সফলভাবে run হলে পূর্ণ multi-hundred-gigabyte corpus বা A100 GPU ছাড়াই core interface-গুলো কাজ করছে কি না যাচাই হয়।

প্রকাশিত model load করুন

Trained model-টি BaruqRodrigues/llm-legislativo repository থেকে পাওয়া যায়। নিচের উদাহরণটি weight ও tokenizer download করে, architecture পুনর্গঠন করে এবং safetensors state dictionary load করে।

import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from legislm.model.gpt import GPTModel
from legislm.model.config import ModelConfig
from tokenizers import Tokenizer

# মডেলের আর্টিফ্যাক্ট ডাউনলোড করুন
weights_path = hf_hub_download(
    repo_id="BaruqRodrigues/llm-legislativo",
    filename="model.safetensors"
)
tokenizer_path = hf_hub_download(
    repo_id="BaruqRodrigues/llm-legislativo",
    filename="tokenizer.json"
)

# টোকেনাইজার ও মডেলের কনফিগারেশন পুনরায় তৈরি করুন
tokenizer = Tokenizer.from_file(tokenizer_path)
config = ModelConfig(
    vocab_size=8192,
    context_length=512,
    d_model=384,
    n_layers=6,
    n_heads=6,
    tie_embeddings=True
)
model = GPTModel(config)

# প্রশিক্ষিত প্যারামিটার লোড করুন
state_dict = load_file(weights_path)
model.load_state_dict(state_dict)
model.eval()

আইন প্রণয়নমূলক লেখা তৈরি করুন

মডেল লোড হওয়ার পর একটি পর্তুগিজ আইন প্রণয়নমূলক প্রম্পট এনকোড করে মডেলের জেনারেশন পদ্ধতি কল করুন। উদাহরণে একটি সংক্ষিপ্ত বিলের সূচনা ব্যবহার করে সর্বোচ্চ 64টি নতুন টোকেনের অনুরোধ করা হয়েছে।

prompt = "PROJETO DE LEI Nº , DE 2026\n\nDispõe sobre"
input_ids = torch.tensor(
    [tokenizer.encode(prompt).ids],
    dtype=torch.long
)

with torch.no_grad():
    output_ids = model.generate(
        input_ids,
        max_new_tokens=64,
        temperature=0.7,
        top_k=40,
        eos_token_id=2
    )

print(tokenizer.decode(output_ids[0].tolist()))

মডেলটি সর্বোচ্চ 512 টোকেনের কনটেক্সট দৈর্ঘ্য ব্যবহার করে। এই উদাহরণে temperature=0.7 স্যাম্পলিংয়ের বৈচিত্র্য নিয়ন্ত্রণ করে এবং top_k=40 স্যাম্পলিংকে সর্বোচ্চ সম্ভাবনাসম্পন্ন 40টি প্রার্থীর মধ্যে সীমাবদ্ধ রাখে। পরীক্ষার সময় এসব মান সমন্বয় করুন, তবে মনে রাখবেন যে তৈরি করা লেখা পরিসংখ্যানভিত্তিক আউটপুট, যাচাইকৃত আইনি বিষয়বস্তু নয়।

পাবলিক ডেটাসেট ঘুরে দেখুন

প্রকল্পটি Hugging Face Hub-এ করপাসের বিভিন্ন ধাপ প্রকাশ করেছে:

  • corpus-legislativo-pretraining: Parquet ফরম্যাটে একটি একীভূত, কিউরেট করা রিলিজ; পরিবারভিত্তিকভাবে train, validation এবং test split সাজানো হয়েছে।
  • camara-corpus-raw: চেম্বার অব ডেপুটিজের কাঁচা TAR আর্কাইভ এবং SHA-256 ম্যানিফেস্ট।
  • camara-corpus-text: গুণমান যাচাইসহ চেম্বার অব ডেপুটিজের কাঠামোবদ্ধ টেক্সট এক্সট্রাকশন।
  • senado-corpus-raw: ফেডারেল সেনেটের ইনভেন্টরি এবং প্রাথমিক ডেটা।
  • senado-corpus-text: কলামার Parquet ফরম্যাটে কিউরেট করা সেনেট নথি ও পৃষ্ঠা।

এই রিলিজগুলোর মাধ্যমে সোর্স আর্কাইভ ও এক্সট্র্যাক্ট করা টেক্সট থেকে শুরু করে চূড়ান্ত প্রশিক্ষণ ম্যাট্রিক্স পর্যন্ত পাইপলাইনের বিভিন্ন পর্যায়ে প্রকল্পটি পরিদর্শন করা সম্ভব।

প্রশিক্ষণ পুনরুৎপাদন বা সম্প্রসারণ করুন

প্রশিক্ষণ বাস্তবায়ন src/legislm/training/-এ, আর টোকেনাইজেশন ও শার্ড তৈরি src/legislm/tokenization/-এর অধীনে রয়েছে। কনফিগারেশনগুলো configs/-এ সংরক্ষিত, এবং Google Colab ওয়ার্কফ্লো notebooks/ ও src/legislm/colab/-এ দেওয়া আছে।

প্রকাশিত প্রশিক্ষণ রানটি NVIDIA A100-SXM4-40GB পরিবেশ ব্যবহার করে প্রায় 20 ঘণ্টায় 173,209টি অপ্টিমাইজেশন আপডেট সম্পন্ন করেছে। এতে AdamW, 2,000 ধাপের linear warmup-সহ cosine scheduler, মিশ্র FP16 precision এবং Google Drive-এর মাধ্যমে checkpoint সংরক্ষণ ব্যবহার করে প্রায় 1.25 বিলিয়ন টোকেন প্রক্রিয়াকরণ করা হয়েছে।

পুনরুৎপাদনযোগ্য পরীক্ষার জন্য টোকেনাইজারকে training split-এ সীমাবদ্ধ রাখুন, নির্ধারক family-based split পদ্ধতি বজায় রাখুন এবং রিপোজিটরির SHA-256 ম্যানিফেস্ট ও checkpoint metadata সংরক্ষণ করুন। ডেটা লিকেজ এড়ানো এবং ফলাফল ন্যায্যভাবে তুলনা করার জন্য এসব বিবরণ অপরিহার্য।

সঠিকভাবে ফলাফল মূল্যায়ন করুন

প্রকল্পটি 71,069টি নথি এবং প্রায় 482 মিলিয়ন বাইটসমৃদ্ধ একটি স্বাধীন test split-এর ওপর প্রমিত byte_nll_v1 মূল্যায়ন প্রোটোকল নির্ধারণ করে। প্রকাশিত ফলাফলের মধ্যে রয়েছে প্রতি বৈধ টার্গেটে 2.1065 গড় loss, 8.2197 token perplexity এবং 65.6509 word perplexity।

স্বাভাবিকীকৃত byte-level ফলাফল হলো প্রতি বাইটে 0.7297 nats, অথবা প্রতি বাইটে 1.0528 bits। প্রকাশিত মানগুলো হলো Chamber collection-এর জন্য প্রতি বাইটে 0.7049 nats এবং Senate collection-এর জন্য 0.8817। ভবিষ্যৎ পরীক্ষার তুলনার সময় শুধু token perplexity-এর ওপর নির্ভর না করে একই split logic ও evaluation definition ব্যবহার করুন।

রিপোজিটরির বিন্যাস

সিস্টেম পরিবর্তন বা অধ্যয়নের সময় কোথায় দেখতে হবে, প্রধান ডিরেক্টরিগুলো তা স্পষ্ট করে:

  • R/: সরকারি ডেটা ইনভেন্টরি, ডাউনলোড, এক্সট্র্যাকশন ইন্টিগ্রেশন এবং কিউরেশন।
  • src/legislm/: টোকেনাইজার, মডেল, প্রশিক্ষণ, Colab persistence এবং evaluation code।
  • schemas/: Arrow ও JSON Schema data contract।
  • configs/: ডেটা, কিউরেশন, প্রশিক্ষণ এবং Colab কনফিগারেশন।
  • notebooks/: প্রাথমিক ও পূর্ণাঙ্গ Google Colab ওয়ার্কফ্লো।
  • scripts/: এক্সিকিউটযোগ্য কমান্ড-লাইন entry point।
  • tests/: unit ও contract test।
  • docs/: নীতিনির্ধারক ডকুমেন্টেশন, contract এবং report।

উন্নত ব্যবহারিক পরামর্শ

  • পরীক্ষা দিয়ে শুরু করুন: বড় ডেটাসেট ডাউনলোড বা GPU রিসোর্সের অনুরোধ করার আগে ইনস্টলেশন নিশ্চিত করার একটি কম-খরচের উপায় হলো CPU যাচাই।
  • পরিবারের সীমানা বজায় রাখুন: প্রকল্পটির সঙ্গে তুলনাযোগ্য ফলাফল চাইলে কখনোই এলোমেলো ডকুমেন্ট-স্তরের বিভাজন তৈরি করবেন না, কারণ একই আইন প্রণয়ন প্রক্রিয়ার সংস্করণগুলো ঘনিষ্ঠভাবে সম্পর্কিত হতে পারে।
  • বিভাজনের পরে টোকেনাইজার প্রশিক্ষণ দিন: যাচাইকরণ বা পরীক্ষার ডেটায় ভোকাবুলারি পরিসংখ্যান নির্ধারণ করলে প্রকল্পটির ডেটা লিকেজ নিয়ন্ত্রণ ব্যবস্থা ক্ষতিগ্রস্ত হবে।
  • বৈধ টার্গেটগুলোর হিসাব রাখুন: প্যাড করা সিকোয়েন্স ব্যবহার করার সময় মাইক্রো-ব্যাচজুড়ে মোট বৈধ টার্গেটের সংখ্যা দিয়ে ক্রস-এন্ট্রপি সংগ্রহ করুন।
  • আর্টিফ্যাক্ট Git-এর বাইরে রাখুন: রিপোজিটরিতে ইচ্ছাকৃতভাবে কাঁচা বাইনারি, মডেল ওজন এবং ক্যাশের পরিবর্তে মেটাডেটা ও স্কিমা সংস্করণভুক্ত করা হয়।
  • পরিদর্শনের জন্য পাবলিক রিলিজ ব্যবহার করুন: কাঁচা, এক্সট্র্যাক্ট করা এবং কিউরেট করা Hub ডেটাসেটগুলো পুরো সংগ্রহ প্রক্রিয়া পুনরায় তৈরি না করেই পাইপলাইনের পৃথক ধাপগুলো অনুসন্ধান করতে সাহায্য করে।
  • জেনারেশন সতর্কতার সঙ্গে ব্যাখ্যা করুন: তৈরি করা আইন প্রণয়ন-সংক্রান্ত ভাষা বিশ্বাসযোগ্য মনে হতে পারে, অথচ তাতে বানানো রেফারেন্স বা বিধান থাকতে পারে।

উপসংহার

LLM Legislativo Brasileiro সরকারি আইন প্রণয়ন আর্কাইভ থেকে একটি বিশেষায়িত causal language model পর্যন্ত সম্পূর্ণ ও নিরীক্ষাযোগ্য একটি পথ প্রদর্শন করে। প্যাকেজটি ইনস্টল করে এর পরীক্ষা চালানোর পর আপনি প্রকাশিত টোকেনাইজার ও PyTorch মডেল লোড করতে, টেক্সট তৈরি করতে, পাবলিক ডেটাসেট পরিদর্শন করতে এবং রিপোজিটরিটির ডেটা লিকেজ-প্রতিরোধী কিউরেশন ও প্রশিক্ষণ পদ্ধতি অধ্যয়ন করতে পারবেন। MIT-লাইসেন্সপ্রাপ্ত কোড এবং উন্মুক্তভাবে প্রকাশিত আর্টিফ্যাক্টগুলো পর্তুগিজ আইন প্রণয়ন-ভাষার মডেলিং নিয়ে গবেষণার জন্য একটি কার্যকর ভিত্তি প্রদান করে।