Views
No views yet
Note: This project represents a series of experimental attempts to create specialized Sanskrit language models. While significant effort was invested, the results did not meet the quality standards required for practical use. This repository is maintained for research documentation and learning purposes.
| Task Type | Samples | Exact Match | Jaccard Similarity | BLEU Score | Character Accuracy |
|---|---|---|---|---|---|
| Sanskrit → English | 114 | 0.0% | 30.9% | 10.9% | - |
| English → Sanskrit | 101 | 0.0% | 10.3% | 4.1% | - |
| Transliteration | 285 | 29.1% | - | - | 96.7% |
| Overall | 500 | - | - | - | - |
1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4# Load model and tokenizer
5model_name = "snskrt/Sanskrit-Qwen2.5-7B-chat"
6tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
7model = AutoModelForCausalLM.from_pretrained(
8 model_name,
9 torch_dtype=torch.bfloat16,
10 device_map="auto",
11 trust_remote_code=True
12)
13
14# Sanskrit to English Translation
15def translate_sanskrit_to_english(sanskrit_text):
16 messages = [
17 {"role": "system", "content": "You are a Sanskrit to English translation expert. Translate the given Sanskrit text accurately while preserving the meaning and context."},
18 {"role": "user", "content": f"Translate this Sanskrit text to English: {sanskrit_text}"}
19 ]
20
21 text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
22 inputs = tokenizer(text, return_tensors="pt").to(model.device)
23
24 with torch.no_grad():
25 outputs = model.generate(**inputs, max_new_tokens=256, do_sample=True, temperature=0.7)
26
27 response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
28 return response.strip()
29
30# English to Sanskrit Translation
31def translate_english_to_sanskrit(english_text):
32 messages = [
33 {"role": "system", "content": "You are an English to Sanskrit translation expert. Translate the given English text accurately into Sanskrit while preserving the meaning and context."},
34 {"role": "user", "content": f"Translate this English text to Sanskrit: {english_text}"}
35 ]
36
37 text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
38 inputs = tokenizer(text, return_tensors="pt").to(model.device)
39
40 with torch.no_grad():
41 outputs = model.generate(**inputs, max_new_tokens=256, do_sample=True, temperature=0.7)
42
43 response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
44 return response.strip()
45
46# Transliteration (Devanagari to IAST)
47def transliterate_to_iast(devanagari_text):
48 messages = [
49 {"role": "system", "content": "You are a Sanskrit transliteration expert. Convert the given Sanskrit text from Devanagari script to IAST (International Alphabet of Sanskrit Transliteration) format."},
50 {"role": "user", "content": f"Transliterate this Sanskrit text to IAST: {devanagari_text}"}
51 ]
52
53 text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
54 inputs = tokenizer(text, return_tensors="pt").to(model.device)
55
56 with torch.no_grad():
57 outputs = model.generate(**inputs, max_new_tokens=256, do_sample=True, temperature=0.7)
58
59 response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
60 return response.strip()
61
62# Example usage
63sanskrit_text = "नमस्ते संस्कृत भाषा ।"
64english_translation = translate_sanskrit_to_english(sanskrit_text)
65print(f"Sanskrit: {sanskrit_text}")
66print(f"English: {english_translation}")
67
68iast_transliteration = transliterate_to_iast(sanskrit_text)
69print(f"IAST: {iast_transliteration}")1def chat_with_sanskrit_model(user_input, task_type="translation"):
2 if task_type == "translation":
3 system_prompt = "You are a Sanskrit to English translation expert. Translate the given Sanskrit text accurately while preserving the meaning and context."
4 elif task_type == "transliteration":
5 system_prompt = "You are a Sanskrit transliteration expert. Convert the given Sanskrit text from Devanagari script to IAST format."
6 else:
7 system_prompt = "You are a Sanskrit language expert. Help with Sanskrit text processing tasks."
8
9 messages = [
10 {"role": "system", "content": system_prompt},
11 {"role": "user", "content": user_input}
12 ]
13
14 text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
15 inputs = tokenizer(text, return_tensors="pt").to(model.device)
16
17 with torch.no_grad():
18 outputs = model.generate(**inputs, max_new_tokens=256, do_sample=True, temperature=0.7)
19
20 response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
21 return response.strip()
0.12.21# Base model configuration
2base_model: Qwen/Qwen2.5-7B
3trust_remote_code: true
4
5# Custom Sanskrit tokenizer configuration
6tokenizer_config: sanskrit_tokenizer
7tokenizer_type: AutoTokenizer
8tokenizer_use_fast: true
9tokenizer_legacy: false
10tokenizer_save_jinja_files: true
11
12# Resize embeddings for new tokens if needed
13resize_token_embeddings_to_32x: true
14mean_resizing_embeddings: false
15shrink_embeddings: false
16
17# Dataset configuration for text completion
18datasets:
19 - path: sanskrit_clean_dataset.jsonl
20 type: completion
21 field: text
22
23# Dataset preparation
24dataset_prepared_path:
25val_set_size: 0.1
26output_dir: ./outputs/sanskrt-qwen-lora
27
28# Sequence configuration
29sequence_len: 1024
30sample_packing: true
31eval_sample_packing: true
32
33# LoRA configuration
34adapter: lora
35lora_r: 32
36lora_alpha: 64
37lora_dropout: 0.05
38lora_target_linear: true
39lora_target_modules: ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]
40
41gradient_accumulation_steps: 2
42micro_batch_size: 2
43num_epochs: 3
44optimizer: adamw_bnb_8bit
45lr_scheduler: cosine
46learning_rate: 0.0003
47
48# Precision configuration
49bf16: auto
50tf32: true
51
52# Memory optimization
53gradient_checkpointing: true
54gradient_checkpointing_kwargs:
55 use_reentrant: false
56flash_attention: true
57
58# Training schedule
59warmup_ratio: 0.1
60evals_per_epoch: 4
61saves_per_epoch: 1
62weight_decay: 0.0
63
64hub_model_id: snskrt/sanskrit-qwen2.5-7b-base-lora0.12.21# Post-Training Configuration for Sanskrit Translation & Transliteration Enhancement
2base_model: snskrt/Sanskrit-Qwen2.5-7B-base
3
4chat_template: qwen_25
5datasets:
6 - path: sanskrit_train_set.jsonl
7 type: chat_template
8 field_messages: messages
9 message_property_mappings:
10 role: role
11 content: content
12 roles:
13 system:
14 - system
15 user:
16 - user
17 assistant:
18 - assistant
19
20val_set_size: 0.01
21output_dir: ./outputs/sanskrit-chat
22
23adapter: lora
24sequence_len: 1024
25pad_to_sequence_len: false
26
27lora_r: 32
28lora_alpha: 16
29lora_dropout: 0.05
30lora_target_modules: ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]
31
32gradient_accumulation_steps: 4
33micro_batch_size: 2
34num_epochs: 3
35optimizer: adamw_bnb_8bit
36lr_scheduler: cosine
37learning_rate: 0.0002
38
39bf16: true
40tf32: true
41
42gradient_checkpointing: true
43logging_steps: 1
44flash_attention: true
45
46warmup_ratio: 0.1
47evals_per_epoch: 1
48saves_per_epoch: 1
49weight_decay: 0.0
50
51hub_model_id: snskrt/Sanskrit-Qwen2.5-7B-chat-lora1@misc{sanskrit-qwen2.5-7b-chat,
2 title={Sanskrit Qwen2.5-7B Chat Model: A Specialized Language Model for Sanskrit Translation and Transliteration},
3 author={[Your Name]},
4 year={2024},
5 url={https://huggingface.co/snskrt/Sanskrit-Qwen2.5-7B-chat}
6}