Dit project implementeert een systeem dat LoRA adapters selecteert en gebruikt op basis van fine-tuned embeddings en een TinyLlama taalmodel. Het systeem is specifiek ontworpen om te differentiëren tussen verschillende onderwerpen, zoals steden en geschiedenis.
Het systeem werkt als volgt:
- Fine-tuned embeddings model categoriseert input in onderwerpen (als voorbeeld steden of geschiedenis).
- Op basis van de hoogste embeddings waarde wordt de beste LoRA adapter geselecteerd.
- De geselecteerde LoRA wordt toegepast op het TinyLlama model voor gespecialiseerde inferentie.
- Clone de repository en navigeer naar de projectmap:
git clone https://github.com/s-smits/lora-selector
cd lora-selector- Maak een virtuele omgeving aan met de naam
venv_lora_selectoren activeer deze:
Voor macOS en Linux:
python3 -m venv venv_lora_selector
source venv_lora_selector/bin/activateVoor Windows:
python -m venv venv_lora_selector
venv_lora_selector\Scripts\activate- Installeer de vereiste dependencies:
pip install -r requirements.txt- Pas het
training_data.jsonbestand aan (momenteel voorbeelden van steden- en geschiedenisvragen):
{
"text": [
{"question": "Wat is de hoofdstad van Nederland?", "answer": "Amsterdam", "subject": "cities"},
{"question": "In welk jaar vond de Franse Revolutie plaats?", "answer": "1789", "subject": "history"}
]
}- Start het main script:
python main.pyDit script zal:
- Het embeddings model fine-tunen om onderscheid te maken tussen steden- en geschiedenisvragen.
- LoRA adapters trainen voor zowel steden als geschiedenis.
- Inference met de beste LoRA adapter te kiezen op basis van de hoogste embeddings waarde.
Input: "Welke stad staat bekend om zijn scheve toren?"
- Embeddings model categoriseert dit als een stedenvraag.
- Steden-LoRA wordt geselecteerd vanwege de hoogste embeddings waarde.
- TinyLlama met steden-LoRA genereert een antwoord: "De stad die bekend staat om zijn scheve toren is Pisa, Italië."
Input: "Wie was de eerste president van de Verenigde Staten?"
- Embeddings model categoriseert dit als een geschiedenisvraag.
- Geschiedenis-LoRA wordt geselecteerd vanwege de hoogste embeddings waarde.
- TinyLlama met geschiedenis-LoRA genereert een antwoord: "De eerste president van de Verenigde Staten was George Washington."
Het project bestaat uit twee hoofdbestanden:
main.py: Bevat de logica voor het trainen van LoRA adapters en inference.finetune_embeddings_model.py: Bevat de code voor het fine-tunen van het embeddings model om onderscheid te maken tussen onderwerpen.
- Voeg zelf onderwerpen toe via
training_data.json. - Pas de
base_language_model_nameenbase_embeddings_model_namevariabelen aan inmain.pyvoor andere modellen. - Optimaliseer de LoRA training door de hyperparameters in de
LoraConfiginmain.pyaan te passen.
- Dit project maakt met name gebruik van PyTorch en Transformers.
- Zorg voor voldoende GPU/CPU-geheugen, vooral bij het toevoegen van meer onderwerpen (16GB).
- Back-end
devicewordt automatisch gekozen (Cuda > MPS > CPU).