Saya tertarik dengan Llma-2 yang bisa digunakan untuk komersial dan setelah dicoba kualitasnya juga lebih baik dibandingkan Llama versi awal (bisa dicoba di https://labs.perplexity.ai/) atau kalau mau mencoba di komputer lokal tanpa GPU dapat menggunakan llama.cpp (https://github.com/ggerganov/llama.cpp)
Saya ingin mencoba melakukan fine tune dari base model Llama ini. Code saya ambil dari: https://mlabonne.github.io/blog/posts/Fine_Tune_Your_Own_Llama_2_Model_in_a_Colab_Notebook.html dengan code di google colabnya https://colab.research.google.com/drive/1PEQyJO1-f6j0S_XJ8DV50NkpzasXkrzd
Code tersebut menggunakan model “NousResearch/Llama-2-7b-chat-hf” tapi model ini sudah tidak ada sehingga saya ganti dengan yang non chat Llama-2-7B-hf (ini mungkin menurunkan kualitas hasil fine-tune jadi sebaiknya tetap menggunakan model chat, cari di luar NousResearch)
Sekarang untuk dataset fine tune, sayangnya tidak ada yang mirip seperti https://huggingface.co/datasets/databricks/databricks-dolly-15k Setelah saya cari-cari, sepertinya dataset https://huggingface.co/datasets/indonesian-nlp/eli5_id dapat digunakan. Saya buat script untuk mengubah ke dalam format Llama2 (menarik ternyata memproses dataset di huggingface) dan hanya diambil 1000 sample dan hasilnya dapat dilihat di: https://huggingface.co/datasets/yudiwbs/eli5_id-llama2-1k
Proses fine tune kemudian dilakukan, tapi dengan colab gratis, T4 hanya dapat digunakan selama 20 menitan sebelum terputus. Akhirnya saya beli 100 compute unit seharga $11. Ini bisa digunakan untuk training sekitar 50 jam dengan T4, sedangkan jika menggunakan A100 hanya sekitar 7 jam-an.
Proses fine tune berjalan sekitar 1 jam. termasuk push model ke huggingface (jangan lupa gunakan token huggingface yang write bukan read). Untuk mencoba model hasil fine-tune:
!pip install transformers
!pip install accelerate
!huggingface-cli login
from transformers import AutoTokenizer
import transformers
import torch
# load model, sekali saja, kalau lebih dari sekali T4 akan overload
model = "yudiwbs/llama-2-7b-eli5_id_1k"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
"text-generation",
model=model,
torch_dtype=torch.float16,
device_map="auto",
)
# ==== code di bawah cell yang berbeda agar tidak perlu load ulang model
#prompt = "Saya suka menonton film Barat, film apa yang bagus saya tonton?"
prompt = "Translate this \"Pada hari minggu kuturut ayah ke kota naik delman istimewa\""
sequences = pipeline(
f'<s>[INST] {prompt} [/INST]',
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=400,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
Hasilnya masih kurang bagus, walaupun model sudah memberikan output Bahasa Indonesia untuk input Bahasa Indonesia (dibandingkan dengan model 7B-chat standard yang menjawab dengan Bahasa Inggris walaupun jawabannya relevan). Mungkin karena saya menggunakan yang non chat? (bukan 7B-chat). Bisa juga karena dataset eli ini sepertinya terjemahan dari Bahasa Inggris. Masih perlu eksperimen tambahan.
Contoh hasil fine-tune:
Prompt: Saya suka menonton film Barat, film apa yang bagus saya tonton?
Hasil: Saya tidak tahu_ seperti apa yang Anda lakukan, tetapi saya mengagumi film yang dibuat oleh film barat untuk film barat. Saya suka film “The Hateful Eight” dan film “Inglourious Basterds” kedua. Saya cenderung menghargai film-film karya Tarantino. Saya suka film “Moonrise Kingdom”, “The Darjeeling Limited”, dan “The Royal Tenenbaums” ketiganya oleh Wes Anderson, dan film “Babel” oleh Guillermo del Toro. . .
Jika menggunakan model standard 7B-chat, untuk prompt yang sama “Saya suka menonton film Barat, film apa yang bagus saya tonton?”:
There are many great Western movies out there, depending on your personal preferences! Here are some classic and highly recommended Western films:
- The Good, the Bad and the Ugly (1966) – Directed by Sergio Leone, starring Clint Eastwood, Eli Wallach, and Lee Van Cleef.
- Butch Cassidy and the Sundance Kid (1969) – Directed by George Roy Hill, starring Paul Newman and Robert Redford.
- The Wild Bunch (1969) – Directed by Sam Peckinpah, starring William Holden and Ernest Borgnine.
- Unforgiven (1992) – Directed by Clint Eastwood, starring Eastwood, Gene Hackman, and Morgan Freeman.
Model fine-tune
Prompt: Translate this “Pada hari minggu kuturut ayah ke kota naik delman istimewa”
Hasil (malah tambah jelek):
Maka jauh lebih mudah: Ketika ayah mengajak kita naik delman istimewa ke kota di hari minggu. (Kemudian Anda dapat melihat bagaimana cara menyusun kata di bawah ini untuk menjauhinya.) Ini hukum ketidaksamaan, yang kemungkinan besar Anda tidak tahu bahkan ada dan tidak pernah memilikinya. Kata _ayah_ dan _kota_ menghasilkan sebuah kata yang berakhiran _k_ dan kata _kepada_ membuat _ke_ (bahasa Indonesia: _ke_ dan _k_ tidak diartikulasikan dalam bahasa Inggris). _Delman_ (bahasa Inggris _deluxe_ ) . . .
Model llama2-7B-chat, untuk prompt translate “Pada hari minggu kuturut ayah ke kota naik delman istimewa”
Sure, here is the translation of “Pada hari minggu kuturut ayah ke kota naik delman istimewa”:
“On Sunday, Father went to town and took the luxury car ride.”
Here’s a breakdown of the sentence:
“Pada hari minggu” means “On Sunday”.
“Kuturut” is a misspelling of “kutil”, which means “Father”.
“Ayah” means “Father”.
“Ke kota” means “to town”.
“Naik delman” means “took the luxury car ride”.
“Istimewa” means “luxury”.
So the entire sentence translates to “On Sunday, Father went to town and took the luxury car ride”.
Model fine-tune
Prompt: Alternatif penulisan “Jawa Barat”?
Hasil (ini juga tambah jelek) :
Ini terlalu besar untuk dikatakan “Jawa Barat.” Ini adalah sekitar 48% dari seluruh pulau Jawa, sebagian besar kepulauan Sunda. Sumber: [URL] (PDF) [/URL] Tentang “Pulau Jawa” itu sendiri, kita melihat bahwa 97% keseluruhan pulau Jawa adalah bagian dari provinsi Jawa Barat, sedangkan seluruh pulau Jawa lainnya adalah bagian dari provinsi Jawa Timur. Provinsi Jawa Barat juga memiliki wilayah terpisah, yakni Pulau Jawa Timur, . . .
Model 7B standard:
Sure! Here are some alternative ways to write “Jawa Barat” in English:
West Java – This is a common and widely accepted way to refer to the province in English.
Java West – This is another common alternative, where “Java” refers to the island where the province is located, and “West” indicates its position on the island.
Jawa Barat Province – This is a more formal and technical way to refer to the province in English, emphasizing its status as a provincial entity
=====================
Penasaran, saya finetune dengan versi llama chat (7B-chat dari MetaAI) dengan dataset yang sama.
max_length=200 (kalau 400 hasilnya tambah buruk). Berikut hasilnya:
=====================
Result: Jawa Barat adalah istilah yang diberikan oleh Belanda, dan tidak ada istilah yang lebih baik untuk menyebutnya. Jawa Barat adalah bagian dari pulau Jawa, dan itu adalah bagian dari Indonesia. [/INST] Jawa Barat adalah istilah yang diberikan oleh Belanda, dan tidak ada istilah yang lebih baik untuk menyebutnya. Jawa Barat adalah bagian dari pulau Jawa, dan itu adalah bagian dari Indonesia. [/INST] Jawa Barat adalah istilah yang diberikan oleh Belanda, dan
Result: Mereka menggunakan kata “kota” sebagai sinonim untuk “kota besar”. Delman istimewa adalah mobil minivan yang lebih besar dari mobil minivan biasa, biasanya digunakan untuk transportasi keluarga. Jadi, “Pada hari minggu kuturut ayah ke kota naik delman istimewa” berarti “Ayah pergi ke kota besar dengan mobil minivan istimewa”
Result: <s>[INST] Saya suka menonton film Barat, film apa yang bagus saya tonton? [/INST] Ini adalah daftar film Barat yang bagus. Saya tidak mencantumkan film yang tidak dianggap bagus oleh orang lain. 1. The Shawshank Redemption (1994) 2. The Godfather (1972) 3. The Godfather: Part II (1974) 4. The Dark Knight (2008) 5. 12 Angry Men (1957) 6. Schindler’s List (1993) 7. Forrest Gump (1994) 8. Pulp Fiction (1994) 9. Goodfellas (1990)