| | --- |
| | base_model: fine-tuned-model |
| | language: |
| | - ko |
| | license: apache-2.0 |
| | tags: |
| | - text-generation-inference |
| | - transformers |
| | - unsloth |
| | - gemma2 |
| | - trl |
| | --- |
| | |
| | # Uploaded model |
| |
|
| | - **Developed by:** limecoding |
| | - **License:** apache-2.0 |
| | - **Finetuned from model :** fine-tuned-model |
| |
|
| | This gemma2 model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library. |
| |
|
| | [<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth) |
| |
|
| | ## Model Overview |
| | This model is fine-tuned to assist with drafting patent specifications based on a general description of an invention. |
| | The base model is unsloth/gemma-2-2b-it, and I used unsloth to merge the fine-tuned adapter. |
| |
|
| | ## Dataset |
| | The dataset used for fine-tuning includes a combination of research paper |
| | summary datasets from AI-Hub and patent claims data directly retrieved from KIPRIS |
| | (Korea Intellectual Property Rights Information Service). |
| |
|
| | Model Training |
| | The model was trained using LoRA (Low-Rank Adaptation). The following code was used for training: |
| | ``` |
| | model = FastLanguageModel.get_peft_model( |
| | model, |
| | r = 16, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128 |
| | target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", |
| | "gate_proj", "up_proj", "down_proj",], |
| | lora_alpha = 16, |
| | lora_dropout = 0, # Supports any, but = 0 is optimized |
| | bias = "none", # Supports any, but = "none" is optimized |
| | # [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes! |
| | use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context |
| | random_state = 3407, |
| | use_rslora = False, # We support rank stabilized LoRA |
| | loftq_config = None, # And LoftQ |
| | ) |
| | ``` |
| | ``` |
| | from trl import SFTTrainer |
| | from transformers import TrainingArguments |
| | from unsloth import is_bfloat16_supported |
| | |
| | trainer = SFTTrainer( |
| | model = model, |
| | tokenizer = tokenizer, |
| | train_dataset = train_data, |
| | max_seq_length = max_seq_length, |
| | formatting_func = generate_prompt, |
| | dataset_num_proc = 2, |
| | packing = False, # Can make training 5x faster for short sequences. |
| | args = TrainingArguments( |
| | per_device_train_batch_size = 2, |
| | gradient_accumulation_steps = 4, |
| | warmup_steps = 5, |
| | num_train_epochs = 1, # Set this for 1 full training run. |
| | # max_steps = 100, |
| | learning_rate = 2e-4, |
| | fp16 = not is_bfloat16_supported(), |
| | bf16 = is_bfloat16_supported(), |
| | logging_steps = 10, |
| | optim = "adamw_8bit", |
| | weight_decay = 0.01, |
| | lr_scheduler_type = "linear", |
| | seed = 3407, |
| | output_dir = "outputs", |
| | ), |
| | ) |
| | ``` |
| |
|
| |
|
| | ## How to Use the Model |
| |
|
| | 1. Install unsloth: |
| | ``` |
| | %%capture |
| | !pip install unsloth |
| | # Also get the latest nightly Unsloth! |
| | !pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" |
| | |
| | # Install Flash Attention 2 for softcapping support |
| | import torch |
| | if torch.cuda.get_device_capability()[0] >= 8: |
| | !pip install --no-deps packaging ninja einops "flash-attn>=2.6.3" |
| | ``` |
| |
|
| | 2. Load the fine-tuned model and use it for inference: |
| | ``` |
| | from unsloth import FastLanguageModel |
| | import torch |
| | max_seq_length = 4096 |
| | dtype = None |
| | load_in_4bit = True |
| | token = "your-huggingface-token" |
| | |
| | model, tokenizer = FastLanguageModel.from_pretrained( |
| | model_name = "limecoding/gemma2-2b-it-finetuned-patent", |
| | max_seq_length = max_seq_length, |
| | dtype = dtype, |
| | load_in_4bit = load_in_4bit, |
| | token = token |
| | ) |
| | ``` |
| | 3. Write a prompt and generate text: |
| | ``` |
| | input = """ |
| | ์์ ํ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ, ๋ณธ ๊ณ ์์ ๋ด๋ถ์ ๋ณด๊ดํ ๋ฌผ๊ฑด์ ๋ฃ์ ์ ์๋ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ๊ณผ ์ด๋ฅผ ๋๋ฌ์ผ |
| | ์ธํผ๋ฅผ ํฌํจํ๋ ๊ฐ๋ฐฉ์ ์์ด์, ์๊ธฐ ์ธํผ์๋ ์ด๋ฆฌ๊ณ ๋ซํ๋ ํ์ฅ ์ธํผ ์งํผ๊ฐ ํ์ฑ๋์ด ์๊ณ , ์๊ธฐ ํ์ฅ ์ธ |
| | ํผ ์งํผ์ ๋ด์ธก์๋ ์๊ธฐ ํ์ฅ ์ธํผ ์งํผ๊ฐ ์ด๋ฆฌ๋ ๊ฒฝ์ฐ ํผ์ณ์ง๋ ํ์ฅ ๋ดํผ๋ฅผ ๋ ํฌํจํ๋, ์๊ธฐ ํ์ฅ ๋ดํผ์ |
| | ๋ด์ธก์ผ๋ก ์ถ๊ฐ ๊ณต๊ฐ์ด ํ์ฑ๋์ด ์ถ๊ฐ ์๋ฉ๊ณต๊ฐ์ ๊ตฌ๋นํ ๋ก ํ๋ ๊ฒ์ ํน์ง์ผ๋ก ํ๋ ์ถ๊ฐ ์๋ฉ๊ณต๊ฐ์ด ๊ตฌ๋น๋ ๊ฐ |
| | ๋ฐฉ์ ์ ๊ณตํ๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ํ์ฅ ์ธํผ ์งํผ๋ ์๊ธฐ ๊ฐ๋ฐฉ์ ์ธ์ฃผ ์ ์ฒด๋ฅผ ๊ฐ์ธ๋ฉด์, ์๊ธฐ ํ์ฅ ๋ดํผ๋ก ์ฐ์ฅ๋์ด, ์๊ธฐ ํ์ฅ |
| | ์ธํผ ์งํผ๋ฅผ ์ ๋ถ ์ฌ๋ ๊ฒฝ์ฐ ์๊ธฐ ์ธํผ๊ฐ ์๊ธฐ ํ์ฅ ๋ดํผ๋ก ์ฐ๊ฒฐ๋๋ฉด์ ๋ถ๋ฆฌ๋์ด ๊ทธ ๋ด๋ถ์ ์๊ธฐ ์ถ๊ฐ ๊ณต๊ฐ์ |
| | ํ์ฑํ๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ์ถ๊ฐ ๊ณต๊ฐ์ ์๊ธฐ ๊ฐ๋ฐฉ์ ์์ธก์ ๊ตฌ๋น๋๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ์๊ธฐ ๊ฐ๋ฐฉ์ ์๊ธฐ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ์ด ํ์ฅ๋ ์ ์๋ ์๋จ์ ๋ ํฌํจํ๋, ์๊ธฐ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ์ด ํ์ฅ๋ ์ ์ |
| | ๋ ์๋จ์ ์๊ธฐ ํ์ฅ ์ธํผ ์งํผ์ ๋ด์ธก์ ํ์ฑ๋ ์๊ธฐ ์ถ๊ฐ ๊ณต๊ฐ์ด ์๊ธฐ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ๊ณผ ํตํ์ฌ ์๊ธฐ ๊ธฐ๋ณธ ๋ด |
| | ์ฅ ๊ณต๊ฐ์ด ํ์ฅ๋๋๋ก ํ๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ๊ณผ ์๊ธฐ ์ถ๊ฐ ๊ณต๊ฐ ์ฌ์ด์๋ ๊ฒฉ๋ฒฝ์ด ํ์ฑ๋์ด ๋ณ๋์ ์ถ๊ฐ ์๋ฉ๊ณต๊ฐ์ด ํ์ฑ๋๋ |
| | ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ๊ฒฉ๋ฒฝ์ ์๊ธฐ ๊ฐ๋ฐฉ์ ๋ด์ธก์์ ํ์ฐฉ๋๋ ๊ฒ์ผ๋ก์, ํ์์ ๋ฐ๋ผ ์๊ธฐ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ๊ณผ ์๊ธฐ ์ถ |
| | ๊ฐ ๊ณต๊ฐ์ ๋ถ๋ฆฌ์ํค๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ์ ๋ด์ธก์๋ ๋ถ๋ฆฌํ ์นธ๋ง์ด๊ฐ ํ์ฐฉ ๊ฐ๋ฅํ๊ฒ ๋ถ์ค๋์ด ์๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ |
| | ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ์ธํผ์ ์ธ์ธก์ผ๋ก ๋ณด์กฐํฌ์ผ์ด ํ์ฑ๋์ด ๋ณ๋์ ์๋ฉ๊ณต๊ฐ์ด ํ์ฑ๋๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ๋ณด์กฐํฌ์ผ์ ๋ด๋ถ์๋ ํ๋ ฅ๋ฐด๋๊ฐ ๋ถ์ฐฉ๋๋ ๊ฐ๊ฒฉ์ ๋๊ณ ๊ทธ ์ผ๋ถ๊ฐ ๋ถ์ฐฉ๋จ์ผ๋ก์จ ๋ถ์ฐฉ๋์ง ์๋ |
| | ๊ณต๊ฐ์ผ๋ก ๋ณด๊ดํ๋ ๋ฌผ๊ฑด์ ๋ผ์๋ ์ ์๋๋ก ํ๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ํ์ฅ ๋ดํผ์ ์๋ถ์๋ ๋ดํผ ๊ฐํ ์งํผ๊ฐ ํ์ฑ๋์ด, ์๊ธฐ ์ถ๊ฐ ๊ณต๊ฐ์ ๋ด๋ถ๋ฅผ ์ด๊ณ ๋ซ์ ์ ์๋ |
| | ๋ก ํ๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ์ถ๊ฐ ๊ณต๊ฐ์ ํ์ฑ๋ ์๊ธฐ ๋ดํผ ๊ฐํ ์งํผ์ ์์ชฝ๋ถ๋ ๋ด๋ถ๊ฐ ๋ณด์ด๋ ๋ง์ฌํ ์ง๋ฌผ๋ถ๋ก ํ์ฑํ์ฌ |
| | ๋ด์ฅ๋ ๋ฌผํ์ ๋ฐ๋ก ํ์ธํ ์ ์๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ๊ฐ๋ฐฉ์ ๊ฐ๋ฐฉ ํด๋์๊ฐ ์ด๊นจ์ ๋ฉ ์ ์๋๋ก ์ด๊นจ์ฉ ๋ ์ฐ๊ฒฐ๋ถ๊ฐ ํ์ฑ๋์ด ์๋ ๊ฒ์ ํน์ง์ผ๋ก |
| | ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ์ด๊นจ์ฉ ๋ ์ฐ๊ฒฐ๋ถ์ ์์ธก ๋๋จ์ด ๊ณ ์ ๋๋ ์ด๊นจ์ฉ ๋์ ๋ ํฌํจํ๋ ๊ฒ์ ํน์ง์ผ๋ก ํ ์ ์๋ค. |
| | ๋ณธ ๊ณ ์์ ์๊ธฐ ๊ฐ๋ฐฉ์ ์ธํผ์ ๋ถ์ฐฉ๋์ด ์๊ธฐ ๊ฐ๋ฐฉ์ ๋ค ์ ์๋๋ก ํ์ฑ๋๋ ์์ก์ด๋ฅผ ๋ ํฌํจํ๋ ๊ฒ์ ํน์ง์ผ |
| | ๋ก ํ ์ ์๋ค |
| | """ |
| | |
| | FastLanguageModel.for_inference(model) |
| | inputs = tokenizer( |
| | [ |
| | r"""<bos><start_of_turn>user |
| | ๋ค์ ๊ณผ์ ํด๊ฒฐ์๋จ์ ๋ณด๊ณ ๋ฐ๋ช
์ ๋ช
์นญ, ๊ธฐ์ ๋ถ์ผ, ์ฒญ๊ตฌํญ์ ๋ฝ์์ฃผ์ธ์.: {}<end_of_turn> |
| | <start_of_turn>model""".format(input) |
| | ], return_tensors = "pt").to("cuda") |
| | |
| | from transformers import TextStreamer |
| | text_streamer = TextStreamer(tokenizer) |
| | _ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 1000) |
| | ``` |
| |
|
| |
|
| | ## Model Results |
| | The model was tested using the "Means to Solve the Problem" section from actual patent specifications. |
| | When compared with real patent documents, the model generated content that was relatively similar in |
| | structure and meaning. |
| | ``` |
| | [๋ฐ๋ช
์ ๋ช
์นญ] |
| | ๊ฐ๋ฐฉ |
| | |
| | |
| | [๊ธฐ์ ๋ถ์ผ] |
| | ๋ณธ ๋ฐ๋ช
์ ๊ฐ๋ฐฉ์ ๊ดํ ๊ฒ์ผ๋ก, ๋ณด๋ค ์์ธํ๊ฒ๋ ํ์ฅ ๊ฐ๋ฅํ ๊ฐ๋ฐฉ์ ๊ดํ ๊ฒ์ด๋ค. |
| | |
| | |
| | [์ฒญ๊ตฌํญ] |
| | ๋ด๋ถ์ ๋ณด๊ดํ ๋ฌผ๊ฑด์ ๋ฃ์ ์ ์๋ ๊ธฐ๋ณธ ๋ด์ฅ ๊ณต๊ฐ๊ณผ ์ด๋ฅผ ๋๋ฌ์ผ ์ธํผ๋ฅผ ํฌํจํ๋ ๊ฐ๋ฐฉ์ ์์ด์, |
| | |
| | ์๊ธฐ ์ธํผ์๋ ์ด๋ฆฌ๊ณ ๋ซํ๋ ํ์ฅ ์ธํผ ์งํผ๊ฐ ํ์ฑ๋์ด ์๊ณ , |
| | |
| | ์๊ธฐ ํ์ฅ ์ธํผ ์งํผ์ ๋ด์ธก์๋ ์๊ธฐ ํ์ฅ ์ธํผ ์งํผ๊ฐ ์ด๋ฆฌ๋ ๊ฒฝ์ฐ ํผ์ณ์ง๋ ํ์ฅ ๋ดํผ๋ฅผ ๋ ํฌํจํ๋, |
| | |
| | ์๊ธฐ ํ์ฅ ๋ดํผ์ ๋ด์ธก์ผ๋ก ์ถ๊ฐ ๊ณต๊ฐ์ด ํ์ฑ๋์ด ์ถ๊ฐ ์๋ฉ๊ณต๊ฐ์ ๊ตฌ๋นํ ๋ก ํ๋ ๊ฒ์ ํน์ง์ผ๋ก ํ๋ ์ถ๊ฐ ์๋ฉ๊ณต๊ฐ์ด ๊ตฌ๋น๋ ๊ฐ๋ฐฉ.<end_of_turn> |
| | ``` |
| |
|