207 lines
5.7 KiB
Markdown
207 lines
5.7 KiB
Markdown
|
|
---
|
|||
|
|
language:
|
|||
|
|
- tr
|
|||
|
|
license: apache-2.0
|
|||
|
|
base_model: Qwen/Qwen3-14B-Instruct
|
|||
|
|
pipeline_tag: text-generation
|
|||
|
|
tags:
|
|||
|
|
- qwen3
|
|||
|
|
- turkish
|
|||
|
|
- teknofest
|
|||
|
|
- tubitak
|
|||
|
|
- fine-tuned
|
|||
|
|
- qlora
|
|||
|
|
- unsloth
|
|||
|
|
- conversational
|
|||
|
|
- instruct
|
|||
|
|
library_name: transformers
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
<div align="center">
|
|||
|
|
|
|||
|
|
# 🎯 ProjeDanışmanAI v2
|
|||
|
|
|
|||
|
|
### TEKNOFEST & TÜBİTAK Yarışmacıları için Türkçe Yapay Zeka Danışmanı
|
|||
|
|
|
|||
|
|
[](https://huggingface.co/Qwen/Qwen3-14B-Instruct)
|
|||
|
|
[](https://huggingface.co/models?language=tr)
|
|||
|
|
[](https://opensource.org/licenses/Apache-2.0)
|
|||
|
|
[](https://github.com/unslothai/unsloth)
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📌 Nedir?
|
|||
|
|
|
|||
|
|
**ProjeDanışmanAI v2**, Qwen3-14B modeli üzerine 3.043 Türkçe örnek ile fine-tune edilmiş bir danışman modelidir. TEKNOFEST ve TÜBİTAK yarışmacılarına proje süreçlerinin her aşamasında rehberlik eder.
|
|||
|
|
|
|||
|
|
> ⚡ v2, v1'e (Mistral-Nemo-12B) kıyasla daha güçlü bir base model kullanıyor.
|
|||
|
|
> Qwen3-14B, Qwen2.5-32B eşdeğeri performans gösterirken 14B VRAM'de çalışır.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ Ne Yapabilir?
|
|||
|
|
|
|||
|
|
| Kategori | Açıklama |
|
|||
|
|
|---|---|
|
|||
|
|
| 📄 **Rapor Yazımı** | KTR / PTR teknik rapor bölümlerini yazar, örnekler sunar |
|
|||
|
|
| 💡 **Proje Geliştirme** | Sıfırdan proje fikri oluşturur, yol haritası çıkarır |
|
|||
|
|
| 🔍 **Özet & Analiz** | Proje dökümanlarını özetler, güçlü/zayıf yönleri analiz eder |
|
|||
|
|
| 🧠 **Strateji** | Jüri odaklı sunum stratejisi, özgünlük bölümü güçlendirme |
|
|||
|
|
| 🛠️ **Hata Düzeltme** | Mevcut rapor bölümlerindeki eksikleri tespit eder |
|
|||
|
|
| 🚫 **Alan Dışı Red** | TEKNOFEST/TÜBİTAK dışı sorulara kibarca yanıt vermez |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🏋️ Eğitim Detayları
|
|||
|
|
|
|||
|
|
| Parametre | Değer |
|
|||
|
|
|---|---|
|
|||
|
|
| Base Model | `Qwen/Qwen3-14B-Instruct` |
|
|||
|
|
| Yöntem | QLoRA 4-bit + Unsloth |
|
|||
|
|
| LoRA Rank | 16 |
|
|||
|
|
| LoRA Alpha | 32 |
|
|||
|
|
| rsLoRA | ✅ |
|
|||
|
|
| Epoch | 2 |
|
|||
|
|
| Learning Rate | 1e-4 |
|
|||
|
|
| Efektif Batch | 8 (2 × 4 grad. accum.) |
|
|||
|
|
| Max Seq Length | 3072 |
|
|||
|
|
| Warmup Ratio | %10 |
|
|||
|
|
| LR Scheduler | Cosine |
|
|||
|
|
| Thinking Mode | Kapalı (`/no_think`) |
|
|||
|
|
| En İyi Val Loss | 0.5519 (adım 400) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 Veri Seti
|
|||
|
|
|
|||
|
|
3.043 Türkçe instruction-output çifti:
|
|||
|
|
|
|||
|
|
| Kategori | Örnek |
|
|||
|
|
|---|---|
|
|||
|
|
| Rapor Yazımı | 761 |
|
|||
|
|
| Sıfırdan Proje | 730 |
|
|||
|
|
| Genel Özet | 593 |
|
|||
|
|
| Strateji | 505 |
|
|||
|
|
| Hata Düzeltme | 324 |
|
|||
|
|
| Alan Dışı Red | 130 |
|
|||
|
|
| **Toplam** | **3.043** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Kullanım
|
|||
|
|
|
|||
|
|
### Ollama ile (GGUF Q4_K_M)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
ollama run hf.co/Rudblest/projedanismanai-v2-qwen3-14b:Q4_K_M
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Python — Unsloth ile
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import re
|
|||
|
|
from unsloth import FastLanguageModel
|
|||
|
|
|
|||
|
|
model, tokenizer = FastLanguageModel.from_pretrained(
|
|||
|
|
model_name = "Rudblest/projedanismanai-v2-qwen3-14b",
|
|||
|
|
max_seq_length = 3072,
|
|||
|
|
dtype = None,
|
|||
|
|
load_in_4bit = True,
|
|||
|
|
)
|
|||
|
|
FastLanguageModel.for_inference(model)
|
|||
|
|
|
|||
|
|
SYSTEM_PROMPT = (
|
|||
|
|
"/no_think\n"
|
|||
|
|
"Sen ProjeDanışmanAI'sın. TEKNOFEST ve TÜBİTAK yarışmacılarına Türkçe olarak "
|
|||
|
|
"rehberlik eden bir yapay zeka danışmanısın."
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
def chat(soru, max_new_tokens=512):
|
|||
|
|
messages = [
|
|||
|
|
{"role": "system", "content": SYSTEM_PROMPT},
|
|||
|
|
{"role": "user", "content": soru},
|
|||
|
|
]
|
|||
|
|
prompt = tokenizer.apply_chat_template(
|
|||
|
|
messages, tokenize=False, add_generation_prompt=True
|
|||
|
|
)
|
|||
|
|
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
|
|||
|
|
outputs = model.generate(
|
|||
|
|
**inputs,
|
|||
|
|
max_new_tokens=max_new_tokens,
|
|||
|
|
temperature=0.7,
|
|||
|
|
top_p=0.9,
|
|||
|
|
repetition_penalty=1.1,
|
|||
|
|
do_sample=True,
|
|||
|
|
)
|
|||
|
|
response = tokenizer.decode(
|
|||
|
|
outputs[0][inputs["input_ids"].shape[1]:],
|
|||
|
|
skip_special_tokens=True
|
|||
|
|
)
|
|||
|
|
# <think> taglarını temizle
|
|||
|
|
return re.sub(r"<think>.*?</think>", "", response, flags=re.DOTALL).strip()
|
|||
|
|
|
|||
|
|
print(chat("TEKNOFEST KTR raporunda risk analizi nasıl yazılır?"))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### llama-cpp-python ile
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from llama_cpp import Llama
|
|||
|
|
|
|||
|
|
llm = Llama.from_pretrained(
|
|||
|
|
repo_id = "Rudblest/projedanismanai-v2-qwen3-14b",
|
|||
|
|
filename = "*Q4_K_M.gguf",
|
|||
|
|
n_gpu_layers = -1,
|
|||
|
|
n_ctx = 3072,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
response = llm.create_chat_completion(messages=[
|
|||
|
|
{"role": "system", "content": "/no_think\nSen ProjeDanışmanAI'sın..."},
|
|||
|
|
{"role": "user", "content": "TÜBİTAK 2209-A başvurusu nasıl hazırlanır?"},
|
|||
|
|
])
|
|||
|
|
print(response["choices"][0]["message"]["content"])
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ Önemli Not — `/no_think`
|
|||
|
|
|
|||
|
|
Qwen3 varsayılan olarak `<think>...</think>` bloklarıyla düşünce zinciri üretir.
|
|||
|
|
Bu model **thinking mode kapalı** olarak eğitilmiştir. Her kullanımda system prompt'un başına `/no_think` ekleyin, aksi hâlde boş `<think></think>` tagları yanıta karışabilir.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔄 v1 → v2 Karşılaştırması
|
|||
|
|
|
|||
|
|
| | v1 | v2 |
|
|||
|
|
|---|---|---|
|
|||
|
|
| Base Model | Mistral-Nemo-12B | **Qwen3-14B** |
|
|||
|
|
| Türkçe Kalite | Orta | **Yüksek** |
|
|||
|
|
| LoRA Rank | 64 | **16** (az veri için optimal) |
|
|||
|
|
| Epoch | 5 | **2** (overfitting önlendi) |
|
|||
|
|
| Thinking Mode | Yok | **Kapalı (`/no_think`)** |
|
|||
|
|
| Val Loss (en iyi) | — | **0.5519** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚫 Sınırlamalar
|
|||
|
|
|
|||
|
|
- Yalnızca Türkçe yanıt üretir
|
|||
|
|
- TEKNOFEST / TÜBİTAK dışı konularda yardım etmez
|
|||
|
|
- Şartname detayları için RAG sistemi önerilir (model şartnameleri ezberlemiş değildir)
|
|||
|
|
- Üretilen içerik danışman niteliğindedir, resmi başvuru öncesi kontrol edilmelidir
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 👥 Ekip
|
|||
|
|
|
|||
|
|
**ProjeDanışmanAI** — Fırat Üniversitesi öğrencileri tarafından geliştirilmektedir.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📄 Lisans
|
|||
|
|
|
|||
|
|
Apache 2.0 — Qwen3 temel modeli lisansına uygun.
|