File size: 6,346 Bytes
000fec4
 
 
 
 
 
 
 
8cd3363
000fec4
17ecdb6
 
 
000fec4
 
 
 
 
779a0ef
000fec4
 
d5ea9cb
 
000fec4
8844bbf
000fec4
8844bbf
 
 
 
 
 
779a0ef
 
8844bbf
 
 
 
5e51e17
8844bbf
17ecdb6
 
 
 
 
8844bbf
 
 
17ecdb6
 
8844bbf
 
17ecdb6
8844bbf
 
 
 
 
 
 
 
d5ea9cb
17ecdb6
 
8844bbf
 
 
7f989f4
17ecdb6
 
 
 
 
 
 
 
8844bbf
 
 
7f989f4
8844bbf
d5ea9cb
17ecdb6
8844bbf
 
 
 
 
 
 
 
 
 
 
 
17ecdb6
 
7f989f4
17ecdb6
d5ea9cb
17ecdb6
8844bbf
 
17ecdb6
 
 
 
 
 
 
 
 
 
 
8844bbf
 
 
7f989f4
17ecdb6
 
8844bbf
 
 
 
 
 
 
5e51e17
8cd3363
779a0ef
8844bbf
 
8cd3363
 
 
 
 
 
 
779a0ef
8cd3363
d719b35
8844bbf
 
 
 
 
 
 
 
 
 
 
17ecdb6
9110b79
 
17ecdb6
 
 
 
8844bbf
 
 
 
 
25a3a49
 
 
d1111ad
25a3a49
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
---
base_model: llm-jp/llm-jp-3-13b
tags:
- text-generation-inference
- transformers
- unsloth
- llama
- trl
license: cc-by-nc-sa-4.0
language:
- ja
datasets:
- elyza/ELYZA-tasks-100
---

# Uploaded  model

- **Developed by:** KKFurudate
- **License:** cc-by-nc-sa-4.0
- **Finetuned from model :** llm-jp/llm-jp-3-13b

本モデルは日本語タスクに特化し、指示に基づく応答を行うためにファインチューニングされたLLM用のLoRAアダプタです。  
`llm-jp/llm-jp-3-13b`をベースモデルとして、ichikara-instructionデータとELYZA-tasks-100を用いてファインチューニングを行っています。

This llama 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)

# Instruction Tuning

以下の日本語データセットで微調整を行いました:
| Language | Dataset | Description |
|:---|:---|:---|
| Japanese | [ichikara-instruction-003-001-1.json](ttps://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/) | 日本語指示データセット |
| Japanese | ichikara-instruction-003-003-1.fixed.json | [ichikara-instruction-003-003-1.json](ttps://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/) の無効なエスケープシーケンスを手動修正したデータセット |
| Japanese | [elyza/ELYZA-tasks-100](https://huggingface.co/datasets/elyza/ELYZA-tasks-100) | 日本語多目的タスク用データセット |

## Usage

本コードはGoogle Colabでの動作を想定しています:

```python
!pip install -U unsloth
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install -U torch
!pip install -U peft
```

```python
from unsloth import FastLanguageModel
from peft import PeftModel
import torch
import json
from tqdm import tqdm
import re
```

```python
HF_TOKEN = "YOUR-HF-TOKEN"
```

```python
# ベースモデルと学習済みLoRAアダプタ(Hugging FaceのIDを指定)。
model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "KKFurudate/llm-jp-3-13b-v6_lora"
```

```python
# unslothのFastLanguageModelでベースのモデルをロード。
dtype = None
load_in_4bit = True

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_id,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
    trust_remote_code=True,
)
```


```python
# ベースモデルに学習済みLoRAのアダプタを統合。
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)
```

```python
datasets = []
with open("./YOUR-DATA.jsonl", "r") as f:
    item = ""
    for line in f:
        line = line.strip()
        item += line
        if item.endswith("}"):
            datasets.append(json.loads(item))
            item = ""
```


```python
# 統合モデルを用いてタスクの推論。
FastLanguageModel.for_inference(model)

results = []
for dt in tqdm(datasets):
  input = dt["input"]

  prompt = f"""### 指示\n{input}\n### 回答\n"""

  inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)

  outputs = model.generate(**inputs, max_new_tokens = 512, use_cache = True, do_sample=False, repetition_penalty=1.2)
  prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]

  results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
```

```python
# 結果をjsonlで保存。
json_file_id = re.sub(".*/", "", adapter_id)
with open(f"{outdir}/{json_file_id}_output.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
        json.dump(result, f, ensure_ascii=False)
        f.write('\n')
```

## License

本モデルは、データセットの[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.en)を継承して公開されています。:

Base Model(LLM-jp/llm-jp-3-13b):
[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)

ichikara-instruction:
[CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en)

elyzatasks100:
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.en)

免責事項:

本モデルは研究目的で提供されており、あらゆる保証を伴わない形で公開されています。
また商用利用を行った場合の問題については一切責任を負いません。


## Citations

@software{unsloth,
  author = {Daniel Han, Michael Han and Unsloth team},
  title = {Unsloth},
  url = {http://github.com/unslothai/unsloth},
  year = {2023}
}

@misc{ichikara-instruction,
      title={ichikara-instruction:LLMのための日本語インストラクションデータの構築. 言語処理学会第30回年次大会(2024)},
      url={https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/},
      author={関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎},
      year={2024},
}

@misc{elyzatasks100,
      title={ELYZA-tasks-100: 日本語instructionモデル評価データセット},
      url={https://huggingface.co/elyza/ELYZA-tasks-100},
      author={Akira Sasaki and Masato Hirakawa and Shintaro Horie and Tomoaki Nakamura},
      year={2023},
}

## 謝辞
本モデルならびにコードは、松尾・岩澤研究室が提供する[「大規模言語モデル Deep Learning 応用講座」(2024)](https://weblab.t.u-tokyo.ac.jp/lecture/course-list/large-language-model/)の最終課題、およびLLM開発コンペティションの提出物の一部です。

運営・講師の皆さま、このような貴重な学びの場を提供していただき、本当にありがとうございました。講義や実践的な課題を通じて、LLMの基礎から応用までを体系的に学ぶ機会をいただきました。
この経験を糧に、さらなる研究・開発に励んでまいります。