|
--- |
|
base_model: MLP-KTLim/llama-3-Korean-Bllossom-8B |
|
library_name: peft |
|
license: llama3 |
|
datasets: |
|
- iknow-lab/ko-genstruct-v1 |
|
--- |
|
|
|
# Ko-genstruct v0.1 |
|
|
|
Ko-genstruct๋ ์ฃผ์ด์ง ๋ฌธ์๋ก๋ถํฐ instruction tuning์ ํ์ํ instruction์ ์์ฑํด๋ด๋ ๋ชจ๋ธ์
๋๋ค. ์ํ๋ฌธ์ ์ ๊ธ์ฐ๊ธฐ ๋ฌธ์ ๋๊ฐ์ง ์ ํ์ ์ง์๋ฌธ์ ์์ฑํด๋ผ ์ ์์ต๋๋ค. |
|
์ด ๋ชจ๋ธ์ [Ada-instruct](https://arxiv.org/abs/2310.04484)์ [Genstruct](https://huggingface.co/NousResearch/Genstruct-7B)๋ก๋ถํฐ ์๊ฐ์ ๋ฐ์์ต๋๋ค. |
|
|
|
๋ค์๊ณผ ๊ฐ์ ์ฉ๋๋ก ํ์ฉํ ์ ์์ต๋๋ค. |
|
- ๊ฒ์ ๋ชจ๋ธ์ ํ์ตํ๊ธฐ ์ํด ์ฃผ์ด์ง ํ
์คํธ๋ก๋ถํฐ ์ง๋ฌธ์ ์์ฑํ๊ธฐ |
|
- Instruction Tuning ํ์ต ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํด Ko-genstruct๋ก instruction์ ์์ฑ ํ, ๋ค๋ฅธ LLM์ ์ด์ฉํ์ฌ ๋ต๋ณ ์์ฑ |
|
|
|
## Details |
|
- **Developed by:** [iKnow-Lab](https://github.com/iKnowLab-Projects/ko-genstruct) |
|
- **License:** [llama3] |
|
- **Lora-tuned from model:** [MLP-KTLim/llama-3-Korean-Bllossom-8B](https://huggingface.co/MLP-KTLim/llama-3-Korean-Bllossom-8B) |
|
|
|
## ์ฌ์ฉ๋ฐฉ๋ฒ |
|
|
|
### ์ง๋ฌธ ์์ฑ |
|
์๋ ์์ ๋ฅผ ํ์ฉํ์ฌ, ์ฃผ์ด์ง ๋ฌธ์๋ก๋ถํฐ ์ง์๋ฌธ์ ์์ฑํ ์ ์์ต๋๋ค. ์ํ๋ฌธ์ ์ ๊ธ์ฐ๊ธฐ ๋ฌธ์ ๋๊ฐ์ง ํ๋กฌํํธ ์ ํ์ด ์กด์ฌํฉ๋๋ค. |
|
|
|
```python |
|
import transformers |
|
import peft |
|
|
|
model_id = "MLP-KTLim/llama-3-Korean-Bllossom-8B" |
|
peft_model_id = "iknow-lab/ko-genstruct-v0.1" |
|
|
|
tokenizer = transformers.AutoTokenizer.from_pretrained(model_id) |
|
model = transformers.AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", torch_dtype="auto").eval() |
|
|
|
model.load_adapter(peft_model_id, revision="epoch-1") |
|
|
|
|
|
title = "" |
|
text = "" |
|
|
|
PROMPT_QA = """๋น์ ์ ์ํ๋ฌธ์ ์ถ์ ์์์
๋๋ค. ๋ค์ ์๋ฃ์ ๊ธฐ๋ฐํ์ฌ ์ ๋ฌธ๊ฐ ์์ค์ ์ํ๋ฌธ์ ๋ฅผ ์ถ์ ํ ๊ฒ์
๋๋ค. ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก ์ง์์ฌํญ์ ๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ json ํ์์ผ๋ก ๋ฐํํด์ฃผ์ธ์. |
|
|
|
1. ์์ฑํ ๋ฌธ์ ๋ ์ค์ํ์์ ์ฌ์ฉํ๋ ์ง๋ฌธ์ ๋งํฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค(~๋ฌด์์ธ๊ฐ์? ~์์ฑํด์ฃผ์ธ์. ~ ์ด๋ป๊ฒ ํด์ผํ์ฃ ?) |
|
2. ๋จผ์ ๊ณ ๋ฑํ๊ต ์์ค์ ๋ฌธ์ ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ์ ๋ฌธ๊ฐ ์์ค์ผ๋ก ๊ณ ๋์ด๋ ๋ฌธ์ ๋ก ํฅ์ํด์ฃผ์ธ์. ๊ฐ ๋ฌธ์ ๋ ๋ฐ๋์ ์ ์๋ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ ธ์ผ ํฉ๋๋ค. ์ฐ๊ด์ฑ์ด ์ ๋๋ผ๋, ์ฐฝ์์ ์ธ ์์ด๋์ด๋ก ํด๋น ์๋ฃ๋ฅผ ํ์ฉํ์ธ์. |
|
3. ๋ฌธ์ ์๋ ๋ต์ ์์ฑ์ ํ์ํ ๋ด์ฉ์ ์ฃผ์ด์ง ์๋ฃ์์ ์ถ์ถํด์ ํจ๊ป ์ ๊ณตํด์ผํฉ๋๋ค. |
|
4. ์ถ์ ํ ๋ฌธ์ ์ ๊ณผ๋ชฉ ํ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ๊ธ์ฐ๊ธฐ, ํ๊ตญ์ด, ์์ด, ์ํ, ์ฌํ๊ณผํ, ๊ณผํ, ์ญ์ฌ ๋ฌธํ์์ , ๋ฒ, ๋๋, ์ ์น, ์ข
๊ต, ์ธ๊ตญ์ด, ๊ฒฝ์ , ๊ฒฝ์, ์๋ฃ, ๊ณตํ, ์ธ๋ฌธํ ๋ฑ - ํ๋ณด์ ์์ด๋, ์ ์ ํ ๊ณผ๋ชฉ์ ์์ ๋กญ๊ฒ ๋งํ ์ ์๋ค. |
|
|
|
# ์ ๋ชฉ: {title} |
|
# ์๋ฃ: |
|
{text}""" |
|
|
|
PROMPT_WRITING = """๋น์ ์ ๊ธ์ฐ๊ธฐ ์ํ๋ฌธ์ ์ถ์ ์์์
๋๋ค. ๋ค์ ์๋ฃ์ ๊ธฐ๋ฐํ์ฌ ์ ๋ฌธ๊ฐ ์์ค์ ์ํ๋ฌธ์ ๋ฅผ ์ถ์ ํ ๊ฒ์
๋๋ค. ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก ์ง์์ฌํญ์ ๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ json ํ์์ผ๋ก ๋ฐํํด์ฃผ์ธ์. |
|
|
|
1. ์์ฑํ ๋ฌธ์ ๋ ์ค์ํ์์ ์ฌ์ฉํ๋ ์ง๋ฌธ์ ๋งํฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค(~๋ฌด์์ธ๊ฐ์? ~์์ฑํด์ฃผ์ธ์. ~ ์ด๋ป๊ฒ ํด์ผํ์ฃ ?) |
|
2. ๋จผ์ ๊ณ ๋ฑํ๊ต ์์ค์ ๋ฌธ์ ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ์ ๋ฌธ๊ฐ ์์ค์ผ๋ก ๊ณ ๋์ด๋ ๋ฌธ์ ๋ก ํฅ์ํด์ฃผ์ธ์. ๊ฐ ๋ฌธ์ ๋ ๋ฐ๋์ ์ ์๋ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ ธ์ผ ํฉ๋๋ค. ์ฐ๊ด์ฑ์ด ์ ๋๋ผ๋, ์ฐฝ์์ ์ธ ์์ด๋์ด๋ก ํด๋น ์๋ฃ๋ฅผ ํ์ฉํ์ธ์. |
|
3. ๋ฌธ์ ์๋ ๊ธ์ฐ๊ธฐ ์์ฑ์ ํ์ํ ๋ด์ฉ์ ์ฃผ์ด์ง ์๋ฃ์์ ์ถ์ถํด์ ํจ๊ป ์ ๊ณตํด์ผํฉ๋๋ค. |
|
4. ์ถ์ ํ ๋ฌธ์ ์ ์ฃผ์ ํ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด ์ค์์ ์ ์ ํ ์ฃผ์ ๋ฅผ 3๊ฐ์ง ์ ํํ์ธ์: ์ด๋ ฅ์, ๋
ธ๋๊ฐ์ฌ, ์ ํน์ ์์ค, ์์ธ์ด, ๊ทน๋ณธ, ์๋๋ฆฌ์ค, ์ฌํ์ผ๊ธฐ, ์ฌํ๊ณํ์, ์๋ฆฌ๋ ์ํผ, ํด์ค, ์๊ธฐ์๊ฐ์, ํธ์ง, ์ด๋ฉ์ผ, ๋ฆฌ๋ทฐ ๋ฐ ํ๊ฐ, ์์
๋ฏธ๋์ด ํฌ์คํธ, ์ผ๊ธฐ, ์ฒญ์์, ํญ์์, ์ผํ ๋ฆฌ์คํธ, ๋ฉ๋ชจ, ์ฐ๊ตฌ ๋
ผ๋ฌธ ๋ฐ ๊ณํ์, ๋น์ฆ๋์ค ๋ณด๊ณ ์ ๋ฐ ๊ฒํ์, ๊ธฐ์ ๋ฌธ์, ๋ฐํ์๋ฃ, ๊ณ์ฝ์ ํน์ ๋ฒ๋ฅ ๋ฌธ์, ํธ์ง ๋ฐ ์ถํ ๋ฌธ์, ๊ด๊ณ ์นดํผ๋ผ์ดํธ, ์น ์ฝํ
์ธ , ๋ด์ค๋ ํฐ, ์ฐ์ค๋ฌธ, ์๊ธฐ๊ณ๋ฐ์, ๋ถ์๋ณด๊ณ ์, ๊ธฐํ์, ์ ์์ |
|
|
|
# ์ ๋ชฉ: {title} |
|
# ์๋ฃ: |
|
{text}""" |
|
|
|
def generate_question(title, text, is_writing: bool = False): |
|
prompt=PROMPT_WRITING if is_writing else PROMPT_QA |
|
prompt = prompt.format(title=title, text=text) |
|
|
|
prompt = [{"content": prompt, "role": "user"}] |
|
inputs = tokenizer.apply_chat_template(prompt, return_tensors="pt", add_generation_prompt=True, tokenize=False) |
|
inputs = inputs.strip() + "\n\n```json\n{\n \"topic\":" |
|
inputs = tokenizer.encode(inputs, add_special_tokens=False, return_tensors="pt").to(model.device) |
|
outputs = model.generate(input_ids=inputs, max_new_tokens=256, do_sample=True, early_stopping=True, eos_token_id=128009, temperature=1.0) |
|
|
|
question = tokenizer.decode(outputs[0, inputs.shape[1]:], skip_special_tokens=False) |
|
|
|
return question |
|
|
|
print("Question generation test") |
|
for _ in range(5): |
|
question = generate_question(title, text) |
|
print(question) |
|
|
|
print("Writing generation test") |
|
for _ in range(5): |
|
question = generate_question(title, text, True) |
|
print(question) |
|
``` |
|
|
|
## Citation [optional] |
|
**BibTeX:** |
|
|
|
``` |
|
@misc{cui2023adainstructadaptinginstructiongenerators, |
|
title={Ada-Instruct: Adapting Instruction Generators for Complex Reasoning}, |
|
author={Wanyun Cui and Qianle Wang}, |
|
year={2023}, |
|
eprint={2310.04484}, |
|
archivePrefix={arXiv}, |
|
primaryClass={cs.CL}, |
|
url={https://arxiv.org/abs/2310.04484}, |
|
} |
|
|
|
@misc{Genstruct, |
|
url={[https://https://huggingface.co/NousResearch/Genstruct-7B](https://huggingface.co/NousResearch/https://huggingface.co/NousResearch/Genstruct-7B)}, |
|
title={Genstruct}, |
|
author={"euclaise"} |
|
} |
|
``` |
|
|
|
## Model Card Authors [optional] |
|
- ๊นํฌ๊ท (khk6435@ajou.ac.kr) |
|
|
|
### Framework versions |
|
- PEFT 0.11.0 |