|
# (ALPHA) Turkish Instruct LLM Based On Facebook-XGLM |
|
|
|
This is one of our early experimental models based on Facebook's XGLM, fine-tuned using PEFT loRA on a Turkish Instruction dataset. Our goal is to share a Turkish LLM model in the future. |
|
|
|
The model provided originates from a checkpoint at the 5700th step. |
|
|
|
## Inference |
|
Please note, utilizing this model necessitates the download of substantial data files, necessitating a minimum of 24GB VRAM. |
|
|
|
Given its experimental nature, it is very likely that this model can produce garbage (biased & wrong) output from time to time, so **use it with caution.** |
|
|
|
In order to install PEFT modules, please visit: |
|
* https://github.com/huggingface/peft |
|
|
|
### Load the Model |
|
```python |
|
import torch |
|
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
|
from peft import PeftModel |
|
|
|
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 = AutoModelForCausalLM.from_pretrained("facebook/xglm-7.5B", |
|
quantization_config=bnb_config, |
|
device_map="auto") |
|
|
|
model = PeftModel.from_pretrained(model, "myzens/XGLM_TR_FineTune_alpha") |
|
|
|
tokenizer = AutoTokenizer.from_pretrained("facebook/xglm-7.5B") |
|
``` |
|
|
|
### Text Generation Examples |
|
Here's a quick and dirty implementation of a post-processing function in case you want to get rid of any garbage letters etc (if any exists): |
|
```python |
|
import re |
|
|
|
def post_process(text, how_many_sentences=5): |
|
|
|
start_index = text.find("### Cevap: ") + len("### Cevap: ") |
|
end_index = text.find("️", start_index) |
|
extracted_text = text[start_index:end_index].strip() |
|
|
|
sentences = extracted_text.split('.') |
|
sentences = '.'.join(sentences[:how_many_sentences]) |
|
cleaned_text = ''.join(ch for ch in sentences if ch.isalnum() or ch.isspace() or ch == ".") |
|
cleaned_text = cleaned_text.replace(" ", " ") |
|
cleaned_text = re.sub('\.\.+', '.', cleaned_text) |
|
cleaned_text = cleaned_text.strip() |
|
|
|
return cleaned_text |
|
``` |
|
|
|
#### Basic Sentiment Analysis |
|
```python |
|
PROMPT = """Aşağıda, daha fazla bağlam sağlayan bir girdi ile eşleştirilmiş bir görevi açıklayan bir talimat bulunmaktadır. İsteği uygun şekilde tamamlayan bir yanıt yazın. |
|
### Talimat: Sana verilen cümleyi olumlu, olumsuz veya tarafsız olarak sınıflandır |
|
### Giriş: Tamam iyi güzel kargo zamanında geliyor. HB ile ilgili bi sıkıntı yok. Ama bu ürün çok kullanışsız. |
|
### Cevap:""" |
|
|
|
inputs = tokenizer(PROMPT, return_tensors="pt") |
|
input_ids = inputs["input_ids"].cuda() |
|
|
|
generation_output = model.generate( |
|
input_ids=input_ids, |
|
temperature=0.1, |
|
top_p=0.2, |
|
repetition_penalty=1.2, |
|
max_length=128, |
|
pad_token_id=tokenizer.pad_token_id, |
|
eos_token_id=tokenizer.eos_token_id |
|
) |
|
|
|
for generated_text in generation_output: |
|
story = tokenizer.decode(generated_text, skip_special_tokens=True) |
|
print(post_process(story, 1)) # Olumsuz |
|
``` |
|
|
|
#### General |
|
|
|
Use `how_many_sentences = -1`. |
|
|
|
```python |
|
PROMPT = """Aşağıda, daha fazla bağlam sağlayan bir girdi ile eşleştirilmiş bir görevi açıklayan bir talimat bulunmaktadır. İsteği uygun şekilde tamamlayan bir yanıt yazın. |
|
### Talimat: |
|
### Giriş: Sanatın toplum için önemini açıkla. |
|
### Cevap:""" |
|
|
|
inputs = tokenizer(PROMPT, return_tensors="pt") |
|
input_ids = inputs["input_ids"].cuda() |
|
|
|
generation_output = model.generate( |
|
input_ids=input_ids, |
|
temperature=0.8, |
|
top_p=0.9, |
|
repetition_penalty=1.2, |
|
max_length=512, |
|
pad_token_id=tokenizer.pad_token_id, |
|
eos_token_id=tokenizer.eos_token_id |
|
) |
|
""" |
|
Sanat insanlığın gelişimine katkıda bulunan önemli bir araçtır ve birçok farklı alanda kullanılabilir. |
|
Örneğin sanat eserleri görsel olarak bilgiyi aktarmak veya duyguları ifade etmek gibi çeşitli amaçlar sağlayabilirler. |
|
Ayrıca sanatçılar yaratıcılıklarını kullanarak yeni fikirler üretebilmelerine olanak tanıyarak toplumun ilerlemesine yardımcı olabilirler. |
|
Son olarak sanatsal ürünler insanlar arasında iletişim kurmaya da yardımcı olurken aynı zamanda kültürel etkileşimde de büyük rol oynarlar. |
|
Bu nedenle sanatın toplumsal faydası yadsınamazdır |
|
""" |
|
``` |
|
|
|
#### Suggestions |
|
```python |
|
PROMPT = """Aşağıda, daha fazla bağlam sağlayan bir girdi ile eşleştirilmiş bir görevi açıklayan bir talimat bulunmaktadır. İsteği uygun şekilde tamamlayan bir yanıt yazın. |
|
### Talimat: |
|
### Giriş: Ders çalışmak için önerilerde bulun. |
|
### Cevap:""" |
|
|
|
generation_output = model.generate( |
|
input_ids=input_ids, |
|
temperature=0.7, |
|
top_p=0.9, |
|
repetition_penalty=1.2, |
|
max_length=512, |
|
pad_token_id=tokenizer.pad_token_id, |
|
eos_token_id=tokenizer.eos_token_id |
|
) |
|
|
|
""" |
|
1. Çalışmak istediğiniz konuyu belirleyin ve ders çalışmaya başlamadan önce o konudaki kaynakları araştırın. |
|
2. Dersi takip etmek için düzenli olarak zaman ayırmaya çalışın. |
|
3. Birden çok görev yapmayı deneyin - bu sayede her gün birkaç saatinizi verimli kullanabilirsiniz. |
|
4. Herhangi bir soru veya sorunla karşılaştığınız anda öğretmeninize danışın. |
|
5. Kendinizi motive etmenin yollarına odaklanın - böylece kendinize güvenebilirsiniz ve motivasyonunuzu sürdürmek kolaylaşır. |
|
6. Öğrenme sürecinde hata yapmaktan korkmayın! Hatalar öğrenmenin doğal bir parçasıdır; ancak yanlış yaptığınızda düzeltmeniz gereken şeylerin farkına varmanız önemlidir. |
|
7. Başarısızlık duygusunu kabul edin ve başarının yolunu bulmanıza yardımcı olacak yeni yollar arayın. |
|
8. Başkalarına yardım etmeye çalışarak kendi gelişiminize katkı sağlayın. |
|
9. Sınavlara hazırlık yaparken dikkat dağıtıcı aktivitelerden kaçının. |
|
10. Sonunda başarılı olduğunuzun garantisini vermeyin. Bu sadece sizi stresli hale getirebilir. |
|
11. Deneme sınavlarını tekrarlayın ve sonuçları değerlendirerek ilerlemeyi izleyin. |
|
12. Daha iyi sonuçlar elde etme yolunda adım atmak için sabırlı olun. |
|
13. Yeni bilgiler öğrendiğinizde bunları paylaşmayı unutmayın. |
|
14. Motivasyonunu kaybetmekten korkan öğrencilerle iletişim kurmaktan çekinmeyin. |
|
15. Soru sorduğunuzda olumlu geri bildirim almak önemli olduğundan emin olun. |
|
16. Arkadaşlarınızla birlikte çalışırken destekleyici olmakta fayda vardır. |
|
17. Öğretmeniniz tarafından verilen ödevleri eksiksiz yapın. |
|
18. Dikkat dağıtan diğer etkinliklerden uzak durun. |
|
19. Zaman yönetimini öğrenin ve planlı hareket ederek zamanı etkili kullanın. |
|
20. Uyku düzenini koruyun ve sağlıklı beslenmeye özen gösterin. |
|
21. Stresle başa çıkma becerilerinizi geliştirin. |
|
22. Hayatınızda başkalarının da sizin gibi zorluklar yaşadığını hatırlayın. |
|
23. Farkındalık yaratmak için farklı yöntemler deneyerek zihinsel sağlığınızı korumaya çalışın. |
|
24. Eğer yeterince konsantre olamıyorsanız dinlenmeye izin verin. |
|
""" |
|
``` |
|
|
|
### Future Steps |
|
1) We are aiming to decrease the inference cost while maintaining the quality in the outputs. |
|
2) We'll continue to improve our dataset. |
|
|
|
### Contact |
|
|
|
We would like to thank [Ünver Çiftçi](https://www.linkedin.com/in/unverciftci/) who has connected us in the first place. |
|
|
|
| | Task | LinkedIn | GitHub | |
|
|:---:|:---:|:---:|:---:| |
|
| Kaan Bıçakcı | Training + Data Preprocessing | [Contact](https://www.linkedin.com/in/kaanbicakci/) | https://github.com/Frightera | |
|
| Talha Rüzgar Akkuş | Data Collection + General Idea | [Contact](https://www.linkedin.com/in/talha-r%C3%BCzgar-akku%C5%9F-1b5457264/) | https://github.com/LegallyCoder | |
|
| Ethem Yağız Çalık | Data Collection + General Idea | [Contact](https://www.linkedin.com/in/ethem-ya%C4%9F%C4%B1z-%C3%A7al%C4%B1k-799a73275/) | https://github.com/Weyaxi | |