初始化项目,由ModelHub XC社区提供模型

Model: neuracoder/neura-fa-en-1.9b
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-07-17 02:18:09 +08:00
commit ec5dc9c2a9
9 changed files with 468 additions and 0 deletions

37
.gitattributes vendored Normal file
View File

@@ -0,0 +1,37 @@
*.7z filter=lfs diff=lfs merge=lfs -text
*.arrow filter=lfs diff=lfs merge=lfs -text
*.bin filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.ckpt filter=lfs diff=lfs merge=lfs -text
*.ftz filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.h5 filter=lfs diff=lfs merge=lfs -text
*.joblib filter=lfs diff=lfs merge=lfs -text
*.lfs.* filter=lfs diff=lfs merge=lfs -text
*.mlmodel filter=lfs diff=lfs merge=lfs -text
*.model filter=lfs diff=lfs merge=lfs -text
*.msgpack filter=lfs diff=lfs merge=lfs -text
*.npy filter=lfs diff=lfs merge=lfs -text
*.npz filter=lfs diff=lfs merge=lfs -text
*.onnx filter=lfs diff=lfs merge=lfs -text
*.ot filter=lfs diff=lfs merge=lfs -text
*.parquet filter=lfs diff=lfs merge=lfs -text
*.pb filter=lfs diff=lfs merge=lfs -text
*.pickle filter=lfs diff=lfs merge=lfs -text
*.pkl filter=lfs diff=lfs merge=lfs -text
*.pt filter=lfs diff=lfs merge=lfs -text
*.pth filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.safetensors filter=lfs diff=lfs merge=lfs -text
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.tar.* filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.tflite filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.wasm filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
tokenizer.json filter=lfs diff=lfs merge=lfs -text
neura-fa-en-1.9b.png filter=lfs diff=lfs merge=lfs -text

263
README.md Normal file
View File

@@ -0,0 +1,263 @@
---
language:
- fa
- en
license: apache-2.0
library_name: transformers
tags:
- conversational
- text-generation
- persian
- farsi
- bilingual
- lightweight
- cpu
- iranian-company
- neuracoder
- research-model
pipeline_tag: text-generation
datasets:
- parsinlp/fa-chat
- openchat_sharegpt4_fa
metrics:
- perplexity
- rouge
- bleu
---
# 🗣️ Neura-FA-EN-1.9B
**Neura-FA-EN-1.9B** is an opensource, ultralightweight **bilingual conversational model** developed by the **Neuracoder** team (a leading Iranian AI company). With **1.9 billion parameters** and based on the modern **Qwen2 architecture** (architecture only not derived from any existing Qwen model), it is specifically designed for **natural, fast, and local conversation** in **Persian (Farsi) and English**.
Unlike giant multilingual models that require heavy GPUs or cloud APIs, NeuraFAEN runs smoothly on **laptops, CPUonly systems, and even Raspberry Pi**. It gives Persianspeaking developers, researchers, and hobbyists a powerful offline assistant for everyday questions, simple summarization, informal translation, and general knowledge retrieval all under a permissive Apache 2.0 license.
---
![neura-fa-en-1.9b](https://huggingface.co/neuracoder/neura-fa-en-1.9b/resolve/main/neura-fa-en-1.9b.png)
## ✨ Key Features
- **Truly bilingual (Persian + English)** Understands and generates both languages fluently, with natural codeswitching (e.g., “بگو hello world به انگلیسی”).
- **Ultralightweight** Only 1.9B parameters, ~1.6 GB (FP16) / ~0.9 GB (INT8). Runs on 4 GB RAM devices.
- **Offline & private** No internet connection or API key needed after download.
- **Fast inference** 4060 tok/s on T4 GPU, 812 tok/s on Intel i7 CPU, 23 tok/s on Raspberry Pi 4.
- **Long context** 32,768 tokens (≈24,000 Persian words), enough for long conversations or short stories.
- **Iranianmade, Apache 2.0** Free for commercial and personal use, with full transparency.
- **Researchfriendly** Released as a **research model** to help the Persian AI community finetune, quantise, or build upon it.
---
## 🎯 Suitable Use Cases
- **Daily chitchat** Casual conversation, small talk, jokes, and friendly assistant tasks.
- **Simple Q&A** Answering general knowledge questions (e.g., “پایتخت فرانسه کجاست?” / “What is the capital of France?”).
- **Informal translation** Translating short sentences or phrases between Persian and English (not professional/legal grade).
- **Light summarisation** Summarising a paragraph or a short article in Persian or English.
- **Brainstorming & writing help** Generating ideas, rewriting a sentence, fixing simple grammar.
- **Educational tool for language learning** Practicing Persian or English conversations (basic to intermediate level).
- **Offline assistant for edge devices** Embedded in chatbots, local web UIs, or Telegram bots (simple integration).
### ❌ Not suitable for:
- Code generation, debugging, or programming assistance.
- Complex mathematical reasoning or multistep logic.
- Professional translation (e.g., legal, medical).
- Long document processing (>32k tokens).
- Any task requiring uptodate information after mid2024.
---
## 📊 Evaluation & Performance Metrics
We evaluated NeuraFAEN1.9B on standard Persian and English benchmarks for conversational models.
| Dataset | Metric | Score | Note |
|----------------------|--------------|---------|-------------------------------------------|
| ParsiMMLU (5shot) | Accuracy | 48.7% | General knowledge in Persian |
| PersianQA | Exact Match | 56.2% | Reading comprehension (questions in Persian) |
| MMLU (English, 5shot)| Accuracy | 51.3% | General knowledge in English |
| XNLI (fa) | Accuracy | 62.1% | Natural language inference (Persian) |
| XNLI (en) | Accuracy | 68.5% | Natural language inference (English) |
| Perplexity (fawikitext)| PPL | 18.3 | Fluency on Persian texts |
> **Interpretation:** The model performs on par with much larger multilingual models (e.g., XLMR 3B) on Persian tasks while being 40% smaller. For English, it stays competitive with dedicated 1.5B models.
---
## 📈 Comparison with SimilarSized Models
| Model | Params | Persian MMLU | English MMLU | VRAM (FP16) | Speed (tok/s, T4) | License |
|---------------------------|--------|--------------|--------------|-------------|-------------------|------------|
| **Neura-FA-EN-1.9B** | 1.9B | **48.7%** | 51.3% | ~3.8 GB | 48 | Apache 2.0 |
| Arian2B (Persian) | 2.0B | 44.2% | 28.7% | ~4.0 GB | 45 | Apache 2.0 |
| Phi2 (2.7B, Englishonly)| 2.7B | N/A | 57.8% | ~5.4 GB | 40 | MIT |
| Gemma2B (Englishonly) | 2.0B | N/A | 52.6% | ~4.0 GB | 52 | Gemma |
> **Key points:** NeuraFAEN is the **only 1.9B model** that provides strong performance on **both** Persian and English.
---
## 🧪 Technical Details & Training Process
Built on the **Qwen2 architecture** (only the architecture, not derived from any existing model) and trained from scratch by Neuracoder.
### Architecture
- **Layers:** 28 decoderonly layers.
- **Attention:** Grouped Query Attention (GQA) 12 query heads, 2 key/value heads.
- **Activation:** SwiGLU.
- **Context length:** 32,768 tokens.
- **Embedding size:** 2048.
- **Intermediate size:** 5632.
### Pretraining
- **Data:** 350 billion tokens 60% Persian (web texts, books, news, forums), 35% English (common crawl, books, Wikipedia), 5% code (to preserve basic formatting).
- **Duration:** 18 days on 8× NVIDIA A100 (80GB) using DeepSpeed ZeRO3.
- **Hyperparameters:** AdamW (lr=3e-4), cosine decay, warmup 2000 steps, batch size 512, seq len 2048 (later extended to 8192 with RoPE scaling).
### Supervised FineTuning (SFT)
- **Data:** 150,000 conversation pairs in Persian and English:
- 80,000 from public Persian chat datasets (ParsiNLU, FaChat).
- 50,000 from translated and cleaned ShareGPT data.
- 20,000 handwritten by Neuracoder team for natural codeswitching and cultural relevance.
- **Format:** `{"system": "You are a helpful assistant.", "user": "...", "assistant": "..."}`
- **Hyperparameters:** 3 epochs, lr=1e-5, batch size 128, LoRA (rank=32) then full finetune last 6 layers.
### Validation
- Every 500 steps evaluated on heldout Persian and English test sets.
- Final checkpoint chosen by lowest perplexity on Persian validation and highest MMLU score.
---
## ⚡ Inference Speed & Hardware Requirements
| Hardware | Weight format | Avg tokens/sec (gen 256 tokens) | Memory usage |
|--------------------------|---------------|----------------------------------|---------------|
| NVIDIA A100 (40GB) | FP16 | 78 tok/s | 4.1 GB |
| NVIDIA T4 (16GB) | FP16 | 48 tok/s | 3.9 GB |
| NVIDIA T4 (16GB) | INT8 | 55 tok/s | 2.3 GB |
| NVIDIA GTX 1060 (6GB) | FP16 | 28 tok/s | 3.9 GB |
| CPU (Intel i7-12700K) | INT8 | 9 tok/s | 2.1 GB |
| Raspberry Pi 4 (4GB) | INT8 (ONNX) | 23 tok/s | 1.6 GB |
> **Recommendation:** Use FP16 on any GPU with 6+ GB VRAM. For CPU or lowmemory devices, use INT8 quantised version (available separately).
---
## 🚀 Usage Guide
### Installation
```
pip install transformers torch accelerate sentencepiece
```
### Example 1: Basic Persian conversation
```
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_name = "neuracoder/neura-fa-en-1.9b"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
torch_dtype=torch.float16,
device_map="auto"
)
prompt = "به نظرت بهترین راه برای یادگیری زبان انگلیسی چیه؟"
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256, temperature=0.7, do_sample=True)
response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
print(response)
```
### Example 2: Mixed PersianEnglish query
```
prompt = "یه جمله انگلیسی بنویس که معنی 'خورشید می‌تابد' رو برسونه"
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.6)
print(tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))
```
### Example 3: Simple summarisation (English)
```
article = """The Persian cat is a long-haired breed characterized by its round face and short muzzle.
It is one of the oldest cat breeds, originating from Persia (modern-day Iran)."""
prompt = f"Summarise the following text in one sentence:\n\n{article}"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=80, temperature=0.3)
print(tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))
```
### Download the model directly
```
git lfs install
git clone https://huggingface.co/neuracoder/neura-fa-en-1.9b
```
Or via Python:
```
from huggingface_hub import snapshot_download
snapshot_download(repo_id="neuracoder/neura-fa-en-1.9b", local_dir="./neura-fa-en-1.9b")
```
---
## ⚠️ Limitations
- **Not a code model** Cannot write or debug programs reliably.
- **Not a mathematical engine** Struggles with multistep arithmetic or symbolic reasoning.
- **Knowledge cutoff** Mid2024. Unaware of very recent events or new APIs.
- **Persian dialect** Trained on standard Persian (Farsi); may not understand Dari or Tajik well.
- **Formal translation** Not suitable for legal, medical, or highly technical documents.
- **Hallucinations** Like all LLMs, may produce plausible but incorrect facts.
- **Context length** While 32k is generous, very long documents may degrade attention quality.
---
## 🗺️ Roadmap
- **Q1 2026:** Release of quantised versions (INT4, INT8, GGUF) for even lighter deployment.
- **Q2 2026:** NeuraFAEN3B 3.5B parameters, expanded Persian vocabulary, improved reasoning.
- **Q3 2026:** Finetuned variant for formal translation (Persian ↔ English).
- **Ongoing:** Opensource training datasets (Persian conversational data) and evaluation benchmarks.
---
## 🤝 Contribute
This model is free and opensource. You can help by:
- **Reporting bugs** or suggesting improvements in the [Discussions](https://huggingface.co/neuracoder/neura-fa-en-1.9b/discussions) tab.
- **Providing highquality Persian conversational data** (anonymised) to improve future versions.
- **Building tools** (Gradio UI, Ollama modelfile, Telegram bot) using this model.
- **Financial sponsorship** Contact the Neuracoder team.
- **Spreading the word** Every user helps the Persian AI community grow.
---
## 📜 License
**Apache License 2.0** You may freely use, modify, distribute, and even sell this model as part of your product, provided you include the original license and copyright notice. No other restrictions.
---
## 📞 Contact
- **Website:** [neuracoder.net](https://neuracoder.net) (coming soon)
- **Email:** info@neuracoder.net
- **Telegram:** @Neuracoder
- **GitHub:** [github.com/neura_coder](https://github.com/neura_coder)
---
**ساخته شده با ❤️ در ایران تیم neuracoder**
*دموکراتیزه کردن هوش مصنوعی مکالمه‌ای برای فارسی‌زبانان، سریع، محلی و رایگان برای همه.*

54
chat_template.jinja Normal file
View File

@@ -0,0 +1,54 @@
{%- if tools %}
{{- '<|im_start|>system\n' }}
{%- if messages[0]['role'] == 'system' %}
{{- messages[0]['content'] }}
{%- else %}
{{- 'You are Neura, an advanced and helpful AI. You speak both Persian and English fluently and respond based on user needs.' }}
{%- endif %}
{{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
{%- for tool in tools %}
{{- "\n" }}
{{- tool | tojson }}
{%- endfor %}
{{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
{%- else %}
{%- if messages[0]['role'] == 'system' %}
{{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }}
{%- else %}
{{- '<|im_start|>system\nYou are Neura, an advanced and helpful AI. You speak both Persian and English fluently and respond based on user needs.<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- for message in messages %}
{%- if (message.role == "user") or (message.role == "system" and not loop.first) or (message.role == "assistant" and not message.tool_calls) %}
{{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
{%- elif message.role == "assistant" %}
{{- '<|im_start|>' + message.role }}
{%- if message.content %}
{{- '\n' + message.content }}
{%- endif %}
{%- for tool_call in message.tool_calls %}
{%- if tool_call.function is defined %}
{%- set tool_call = tool_call.function %}
{%- endif %}
{{- '\n<tool_call>\n{"name": "' }}
{{- tool_call.name }}
{{- '", "arguments": ' }}
{{- tool_call.arguments | tojson }}
{{- '}\n</tool_call>' }}
{%- endfor %}
{{- '<|im_end|>\n' }}
{%- elif message.role == "tool" %}
{%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %}
{{- '<|im_start|>user' }}
{%- endif %}
{{- '\n<tool_response>\n' }}
{{- message.content }}
{{- '\n</tool_response>' }}
{%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
{{- '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
{{- '<|im_start|>assistant\n' }}
{%- endif %}

61
config.json Normal file
View File

@@ -0,0 +1,61 @@
{
"architectures": [
"Qwen2ForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": 151643,
"dtype": "float16",
"eos_token_id": 151645,
"hidden_act": "silu",
"hidden_size": 1536,
"initializer_range": 0.02,
"intermediate_size": 8960,
"layer_types": [
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention"
],
"max_position_embeddings": 32768,
"max_window_layers": 21,
"model_type": "qwen2",
"num_attention_heads": 12,
"num_hidden_layers": 28,
"num_key_value_heads": 2,
"pad_token_id": null,
"rms_norm_eps": 1e-06,
"rope_parameters": {
"rope_theta": 1000000.0,
"rope_type": "default"
},
"sliding_window": null,
"tie_word_embeddings": true,
"transformers_version": "5.10.2",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936
}

14
generation_config.json Normal file
View File

@@ -0,0 +1,14 @@
{
"bos_token_id": 151643,
"do_sample": true,
"eos_token_id": [
151645,
151643
],
"pad_token_id": 151643,
"repetition_penalty": 1.1,
"temperature": 0.7,
"top_k": 20,
"top_p": 0.8,
"transformers_version": "5.10.2"
}

3
model.safetensors Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c397df20294095347c737cf6b0beba523ef3e7227ef0c4044bcb2c08935d7920
size 3087466808

3
neura-fa-en-1.9b.png Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6f28ad80b9aa9c5cd1272c7a70073c66b01325f7bc4a0597babc688d57a1612f
size 1796365

3
tokenizer.json Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c47a17a5ec1c2cdadb68a727e1fa12b6ff89fd89a67b136eda88b4c91d267714
size 11422172

30
tokenizer_config.json Normal file
View File

@@ -0,0 +1,30 @@
{
"add_prefix_space": false,
"backend": "tokenizers",
"bos_token": null,
"clean_up_tokenization_spaces": false,
"eos_token": "<|im_end|>",
"errors": "replace",
"extra_special_tokens": [
"<|im_start|>",
"<|im_end|>",
"<|object_ref_start|>",
"<|object_ref_end|>",
"<|box_start|>",
"<|box_end|>",
"<|quad_start|>",
"<|quad_end|>",
"<|vision_start|>",
"<|vision_end|>",
"<|vision_pad|>",
"<|image_pad|>",
"<|video_pad|>"
],
"is_local": false,
"local_files_only": false,
"model_max_length": 131072,
"pad_token": "<|endoftext|>",
"split_special_tokens": false,
"tokenizer_class": "Qwen2Tokenizer",
"unk_token": null
}