A Paradigm Shift in Machine Translation: Boosting Translation Performance of Large Language Models
Paper • 2309.11674 • Published • 33
Fersiwn Gymraeg o fodel cyfieithu ALMA a ddisgrifir yn https://arxiv.org/abs/2309.11674.
This is a Welsh version of the ALMA LLM-based translation model.
Mae'r model LLM yn seiliedig ar Lama-2-13B, gyda hyfforddiant parhaus ar ddata Gymreig OSCAR-2301 am 3 Epoch ac yna hyfforddiant cywrain pellach ar ddata Cofnod y Cynulliad a ddarparir gan TechIaith.
Mae'r fersiwn yma wedi ei gywasgu i 4.0bpw er mwyn llwytho mewn cof GPU o 10GB gyda testyn hyd at 4096 tocyn gan ddefnyddio ExLlamaV2.
Mae'r hyfforddiant cywrain wedi defnyddio'r fformat canlynol ar gyfer trosi o'r Saesneg i'r Gymraeg (a'r naill ffordd i'r llall).
Cyfieithwch y testun Saesneg canlynol i'r Gymraeg.
### Saesneg:
{prompt}
### Cymraeg:
import time
import sys, os
import dataclasses
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from exllamav2 import(
ExLlamaV2,
ExLlamaV2Config,
ExLlamaV2Cache,
ExLlamaV2Tokenizer,
ExLlamaV2Lora,
)
from exllamav2.generator import (
ExLlamaV2StreamingGenerator,
ExLlamaV2Sampler
)
class ModelClass:
def __init__(self, generator, tokenizer, model):
self.generator = generator
self.tokenizer = tokenizer
self.model = model
DEBUG = os.environ.get("DEBUG") and True or False
# Cychwyn model a storfa
def load_model(model_directory, max_seq_len=4096):
"""
Yn llwytho model o gyfeiriadur ac yn dychwelyd y generadur a'r tocynnwr
"""
config = ExLlamaV2Config()
config.model_dir = model_directory
config.max_seq_len = max_seq_len
config.prepare()
model = ExLlamaV2(config)
print("Llwytho model: " + model_directory)
cache = ExLlamaV2Cache(model, lazy = True, max_seq_len=max_seq_len)
model.load_autosplit(cache)
tokenizer = ExLlamaV2Tokenizer(config)
generator = ExLlamaV2StreamingGenerator(model, cache, tokenizer)
model = ModelClass(generator=generator, tokenizer=tokenizer, model=model)
generator.warmup()
return model
def generate_text(prompt, settings, max_new_tokens):
sys.stdout.flush()
input_ids = base_model.tokenizer.encode(prompt)
generated_tokens = 0 # input_ids.shape[-1]
base_model.generator.set_stop_conditions(["\n"])
base_model.generator.begin_stream(input_ids, settings)
time_begin = time.time()
while True:
chunk, eos, _ = base_model.generator.stream()
generated_tokens += 1
print (chunk, end = "")
sys.stdout.flush()
if eos or generated_tokens == max_new_tokens: break
time_end = time.time()
time_total = time_end - time_begin
print(f"\nYmateb cyflawn mewn {time_total:.2f} eiliad, {generated_tokens} tocyn, {generated_tokens / time_total:.2f} tocyn/eiliad")
return ""
base_model = load_model("./ALMA-Cymraeg-13B-0.1-4.0bpw-exl2")
settings = ExLlamaV2Sampler.Settings()
settings.temperature = 0.15 # newid fel bod angen e.e. 0.75
settings.top_k = 90 # newid fel bod angen e.e. 50
settings.top_p = 1.0 # ayyb
settings.token_repetition_penalty = 1.15 # ayyb
max_new_tokens = 2000 # ayyb
system_prompt = "Cyfieithwch y testun Saesneg canlynol i'r Gymraeg."
while True:
user_input = input("Saesneg: ")
prompt = f"{system_prompt}\n\n### Saesneg:\n{user_input}\n\n### Cymraeg:\n"
if DEBUG: print(f"{prompt}\n\n")
print("Cymraeg:")
response = generate_text(prompt, settings, max_new_tokens)
print("="*132)
Mae'r model yn seiliedig ar Llama2 ac felly dan drwydded gan Meta.
Mae'r data Cofnod y Cynulliad dan drywdded Llywodraeth Agored.