273 lines
7.2 KiB
Markdown
273 lines
7.2 KiB
Markdown
---
|
||
library_name: transformers
|
||
tags:
|
||
- Turkish
|
||
- TR
|
||
- ORPO
|
||
datasets:
|
||
- selimc/orpo-dpo-mix-TR-20k
|
||
language:
|
||
- tr
|
||
base_model:
|
||
- google/gemma-2-9b-it
|
||
license: gemma
|
||
|
||
model-index:
|
||
- name: OrpoGemma-2-9B-TR
|
||
results:
|
||
- task:
|
||
type: multiple-choice
|
||
dataset:
|
||
type: multiple-choice
|
||
name: MMLU_TR_V0.2
|
||
metrics:
|
||
- name: 5-shot
|
||
type: 5-shot
|
||
value: 0.530
|
||
verified: false
|
||
- task:
|
||
type: multiple-choice
|
||
dataset:
|
||
type: multiple-choice
|
||
name: Truthful_QA_V0.2
|
||
metrics:
|
||
- name: 0-shot
|
||
type: 0-shot
|
||
value: 0.543
|
||
verified: false
|
||
- task:
|
||
type: multiple-choice
|
||
dataset:
|
||
type: multiple-choice
|
||
name: ARC_TR_V0.2
|
||
metrics:
|
||
- name: 25-shot
|
||
type: 25-shot
|
||
value: 0.524
|
||
verified: false
|
||
- task:
|
||
type: multiple-choice
|
||
dataset:
|
||
type: multiple-choice
|
||
name: HellaSwag_TR_V0.2
|
||
metrics:
|
||
- name: 10-shot
|
||
type: 10-shot
|
||
value: 0.520
|
||
verified: false
|
||
- task:
|
||
type: multiple-choice
|
||
dataset:
|
||
type: multiple-choice
|
||
name: GSM8K_TR_V0.2
|
||
metrics:
|
||
- name: 5-shot
|
||
type: 5-shot
|
||
value: 0.648
|
||
verified: false
|
||
- task:
|
||
type: multiple-choice
|
||
dataset:
|
||
type: multiple-choice
|
||
name: Winogrande_TR_V0.2
|
||
metrics:
|
||
- name: 5-shot
|
||
type: 5-shot
|
||
value: 0.589
|
||
verified: false
|
||
---
|
||
|
||

|
||
|
||
# OrpoGemma-2-9B-TR
|
||
|
||
OrpoGemma-2-9B-TR is a Turkish fine-tuned version of [google/gemma-2-9b-it](https://huggingface.co/google/gemma-2-9b-it). It is trained using the ORPO Trainer on a subset of 1500 rows from the dataset [selimc/orpo-dpo-mix-TR-20k](https://huggingface.co/datasets/selimc/orpo-dpo-mix-tr-20k).
|
||
|
||
## Training Information
|
||
|
||
- **Base Model**: [google/gemma-2-9b-it](https://huggingface.co/google/gemma-2-9b-it)
|
||
- **Fine-Tuning Technique**: ORPO
|
||
- **Training Data**: 1500 rows from [selimc/orpo-dpo-mix-TR-20k](https://huggingface.co/datasets/selimc/orpo-dpo-mix-tr-20k)
|
||
- **Training Time**: 2.5 hours on NVIDIA H100
|
||
|
||
### QLoRA Configurations:
|
||
- `lora_r`: 16
|
||
- `lora_alpha`: 32
|
||
- `lora_dropout`: 0.05
|
||
|
||
### ORPO Training Parameters
|
||
- `lr`: 2e-6
|
||
- `epochs`: 3
|
||
- `per_device_train_batch_size`: 8
|
||
- `gradient_accumulation_steps`: 4
|
||
|
||
## 📈 Training Curves
|
||
|
||

|
||
|
||

|
||
|
||
## OpenLLMTurkishLeaderboard_v0.2 Results
|
||
|
||
| Dataset | Score |
|
||
|-----------------------|--------|
|
||
| MMLU_TR_V0.2 | 53.0% |
|
||
| Truthful_QA_TR_V0.2 | 54.3% |
|
||
| ARC_TR_V0.2 | 52.4% |
|
||
| HellaSwag_TR_V0.2 | 52.0% |
|
||
| GSM8K_TR_V0.2 | 64.8% |
|
||
| Winogrande_TR_V0.2 | 58.9% |
|
||
| **Average** | **55.9%** |
|
||
|
||
Thanks to the [WiroAI](https://huggingface.co/WiroAI) team for evaluating my model. Evaluations were done without any inference engine.
|
||
|
||
## Model Capabilities
|
||
|
||
- Produces fluent, coherent, and contextually appropriate text in Turkish.
|
||
- Delivers detailed and informative responses to a wide range of instructions and question types.
|
||
- May still produce incorrect or nonsensical outputs, user verification is recommended.
|
||
|
||
## How to Use
|
||
|
||
```python
|
||
from transformers import pipeline, BitsAndBytesConfig, AutoTokenizer
|
||
import torch
|
||
|
||
bnb_config = BitsAndBytesConfig(
|
||
load_in_4bit=True,
|
||
bnb_4bit_use_double_quant=True,
|
||
bnb_4bit_quant_type="nf4",
|
||
bnb_4bit_compute_dtype=torch.bfloat16
|
||
)
|
||
|
||
model_id = "selimc/OrpoGemma-2-9B-TR"
|
||
|
||
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
||
|
||
pipe = pipeline(
|
||
"text-generation",
|
||
model=model_id,
|
||
model_kwargs={"torch_dtype": torch.bfloat16 ,'quantization_config': bnb_config},
|
||
tokenizer=tokenizer,
|
||
device_map="auto"
|
||
)
|
||
|
||
messages = [
|
||
{"role": "user", "content": "Gökyüzü neden mavi?"},
|
||
]
|
||
|
||
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
||
|
||
outputs = pipe(
|
||
prompt,
|
||
max_new_tokens=512,
|
||
do_sample=True,
|
||
eos_token_id=[pipe.tokenizer.convert_tokens_to_ids("<end_of_turn>"), pipe.tokenizer.eos_token_id],
|
||
temperature=0.67,
|
||
)
|
||
|
||
generated_text = outputs[0]['generated_text']
|
||
response = generated_text[len(prompt):]
|
||
print(response)
|
||
```
|
||
|
||
### Example 1
|
||
|
||
```python
|
||
messages = [
|
||
{"role": "user", "content": """Bir web sayfasından tüm URL’leri çeken bir Python fonksiyonu yazın ve nasıl çalıştığını açıklayın."""},
|
||
]
|
||
```
|
||
|
||
``````
|
||
Bir web sayfasından tüm URL’leri çeken bir Python fonksiyonu yazalım ve nasıl çalıştığını açıklayalım.
|
||
|
||
```python
|
||
import requests
|
||
|
||
def get_urls_from_page(url):
|
||
"""
|
||
|
||
Bir web sayfasından tüm URL'leri çeker.
|
||
|
||
Args:
|
||
url (str): Web sayfasının URL'i.
|
||
|
||
Returns:
|
||
list: Web sayfasındaki tüm URL'ler.
|
||
"""
|
||
response = requests.get(url)
|
||
response.raise_for_status()
|
||
|
||
urls = []
|
||
for link in response.html.find_all('a', href=True):
|
||
urls.append(link['href'])
|
||
|
||
return urls
|
||
|
||
# Örnek kullanım
|
||
|
||
web_page_url = 'https://www.example.com/'
|
||
all_urls = get_urls_from_page(web_page_url)
|
||
print(f"Bu web sayfasındaki {len(all_urls)} URL bulunmaktadır:\n{all_urls}")
|
||
```
|
||
|
||
**Fonksiyonun nasıl çalıştığı:**
|
||
|
||
1. **`requests` kütüphanesini içer:** Bu kütüphane web sayfalarına erişmek için kullanılır.
|
||
2. **`get_urls_from_page` fonksiyonunu tanımla:**
|
||
* Bu fonksiyon, bir web sayfasının URL'ini alır.
|
||
* `requests.get()` kullanarak web sayfasına erişir ve `response.raise_for_status()` kullanarak HTTP durum kodunun 200-399 aralığında olup olmadığını kontrol eder.
|
||
* `response.html` içine bir HTML belgesini saklar.
|
||
* `response.html.find_all('a', href=True)` kullanarak, `href` atributuna sahip tüm `<a>` etiketlerini bulur.
|
||
* `urls` listesine URL'leri ekler.
|
||
* `urls` listesini döndürür.
|
||
|
||
3. **Örnek kullanım:**
|
||
|
||
* `web_page_url` değişkenine bir web sayfasının URL'ini atar.
|
||
* `get_urls_from_page` fonksiyonunu kullanarak web sayfasından tüm URL'leri çeker.
|
||
* `all_urls` listesini `print()` fonksiyonu kullanarak ekrana yazdır
|
||
|
||
``````
|
||
|
||
### Example 2
|
||
|
||
```python
|
||
messages = [
|
||
{
|
||
"role": "system",
|
||
"content":
|
||
"""
|
||
Sen bir türkçe bilmece ustasısın. Görevin:
|
||
- Sorulan bilmecelere mantıklı ve doğru cevaplar vermek
|
||
- Bilmecenin çözümünü adım adım açıklamak
|
||
"""
|
||
},
|
||
{
|
||
"role": "user",
|
||
"content":
|
||
"""
|
||
Kanadı var, kuş değil.
|
||
Suda yüzer, gemi değil.
|
||
Kuyruğu var, kedi değil.
|
||
Bil bakalım, bu nedir?
|
||
"""
|
||
},
|
||
]
|
||
```
|
||
|
||
```
|
||
Kanadı var, kuş değil, suda yüzer, gemi değil, kuyruğu var, kedi değil... Bu bir **balık**! 🐟
|
||
```
|
||
|
||
## Citation
|
||
|
||
```bibtex
|
||
@misc{orpogemma2-9b-tr,
|
||
author = {Selim Çavaş},
|
||
title = {OrpoGemma-2-9B-TR: Turkish Fine-tuned Gemma Model},
|
||
year = {2024},
|
||
url = {https://huggingface.co/selimc/OrpoGemma-2-9B-TR}
|
||
}
|
||
``` |