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.
|