YukikoMatsuda commited on
Commit
2d5421f
·
verified ·
1 Parent(s): 557d0ba
Files changed (1) hide show
  1. README.md +374 -144
README.md CHANGED
@@ -1,199 +1,429 @@
1
  ---
2
- library_name: transformers
3
- tags: []
4
- ---
5
-
6
- # Model Card for Model ID
7
-
8
- <!-- Provide a quick summary of what the model is/does. -->
9
-
10
-
11
-
12
- ## Model Details
13
-
14
- ### Model Description
15
-
16
- <!-- Provide a longer summary of what this model is. -->
17
-
18
- This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated.
19
-
20
- - **Developed by:** [More Information Needed]
21
- - **Funded by [optional]:** [More Information Needed]
22
- - **Shared by [optional]:** [More Information Needed]
23
- - **Model type:** [More Information Needed]
24
- - **Language(s) (NLP):** [More Information Needed]
25
- - **License:** [More Information Needed]
26
- - **Finetuned from model [optional]:** [More Information Needed]
27
-
28
- ### Model Sources [optional]
29
-
30
- <!-- Provide the basic links for the model. -->
31
-
32
- - **Repository:** [More Information Needed]
33
- - **Paper [optional]:** [More Information Needed]
34
- - **Demo [optional]:** [More Information Needed]
35
-
36
- ## Uses
37
-
38
- <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
39
-
40
- ### Direct Use
41
-
42
- <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
43
-
44
- [More Information Needed]
45
-
46
- ### Downstream Use [optional]
47
-
48
- <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
49
-
50
- [More Information Needed]
51
-
52
- ### Out-of-Scope Use
53
-
54
- <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
55
-
56
- [More Information Needed]
57
-
58
- ## Bias, Risks, and Limitations
59
-
60
- <!-- This section is meant to convey both technical and sociotechnical limitations. -->
61
-
62
- [More Information Needed]
63
-
64
- ### Recommendations
65
-
66
- <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
67
-
68
- Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
69
-
70
- ## How to Get Started with the Model
71
-
72
- Use the code below to get started with the model.
73
-
74
- [More Information Needed]
75
-
76
- ## Training Details
77
-
78
- ### Training Data
79
-
80
- <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
81
-
82
- [More Information Needed]
83
-
84
- ### Training Procedure
85
-
86
- <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
87
-
88
- #### Preprocessing [optional]
89
-
90
- [More Information Needed]
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
- #### Training Hyperparameters
 
94
 
95
- - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
 
 
 
 
 
 
96
 
97
- #### Speeds, Sizes, Times [optional]
 
 
 
 
 
 
 
98
 
99
- <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
 
100
 
101
- [More Information Needed]
102
 
103
- ## Evaluation
 
104
 
105
- <!-- This section describes the evaluation protocols and provides the results. -->
 
 
 
 
 
 
 
106
 
107
- ### Testing Data, Factors & Metrics
108
 
109
- #### Testing Data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
 
111
- <!-- This should link to a Dataset Card if possible. -->
 
112
 
113
- [More Information Needed]
 
 
114
 
115
- #### Factors
 
116
 
117
- <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
 
118
 
119
- [More Information Needed]
 
120
 
121
- #### Metrics
 
122
 
123
- <!-- These are the evaluation metrics being used, ideally with a description of why. -->
 
 
124
 
125
- [More Information Needed]
 
 
 
 
 
 
 
126
 
127
- ### Results
128
 
129
- [More Information Needed]
 
130
 
131
- #### Summary
132
 
 
133
 
 
 
 
134
 
135
- ## Model Examination [optional]
 
136
 
137
- <!-- Relevant interpretability work for the model goes here -->
 
 
 
 
138
 
139
- [More Information Needed]
 
 
140
 
141
- ## Environmental Impact
 
142
 
143
- <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
 
144
 
145
- Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
 
146
 
147
- - **Hardware Type:** [More Information Needed]
148
- - **Hours used:** [More Information Needed]
149
- - **Cloud Provider:** [More Information Needed]
150
- - **Compute Region:** [More Information Needed]
151
- - **Carbon Emitted:** [More Information Needed]
152
 
153
- ## Technical Specifications [optional]
154
 
155
- ### Model Architecture and Objective
 
 
 
 
 
 
 
 
 
156
 
157
- [More Information Needed]
 
 
 
 
158
 
159
- ### Compute Infrastructure
160
 
161
- [More Information Needed]
 
162
 
163
- #### Hardware
 
 
164
 
165
- [More Information Needed]
 
166
 
167
- #### Software
 
168
 
169
- [More Information Needed]
 
170
 
171
- ## Citation [optional]
 
 
172
 
173
- <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
 
174
 
175
- **BibTeX:**
 
176
 
177
- [More Information Needed]
 
178
 
179
- **APA:**
 
180
 
181
- [More Information Needed]
 
182
 
183
- ## Glossary [optional]
 
184
 
185
- <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
 
186
 
187
- [More Information Needed]
 
188
 
189
- ## More Information [optional]
 
 
 
 
 
 
 
 
 
 
 
 
 
190
 
191
- [More Information Needed]
 
192
 
193
- ## Model Card Authors [optional]
 
194
 
195
- [More Information Needed]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
 
197
- ## Model Card Contact
 
 
 
 
 
 
 
198
 
199
- [More Information Needed]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ base_model: llm-jp/llm-jp-3-13b
3
+ tags:
4
+ - text-generation-inference
5
+ - transformers
6
+ - llama
7
+ - trl
8
+ license: apache-2.0
9
+ language:
10
+ - en
11
+ - ja
12
+ model_creator: YukikoMatsuda
13
+ finetuned_from: llm-jp/llm-jp-3-13b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
+ ---
16
+ # Sample Use
17
+
18
+ 以下は、elyza-tasks-100-TV_0.jsonl の回答用コードです
19
+
20
+ ```python
21
+
22
+ # python 3.10.12
23
+ !pip install -U pip
24
+ !pip install -U transformers
25
+ !pip install -U bitsandbytes
26
+ !pip install -U accelerate
27
+ !pip install -U datasets
28
+ !pip install -U peft
29
+ !pip install -U trl
30
+ !pip install -U wandb
31
+ !pip install ipywidgets --upgrade
32
+
33
+ from transformers import (
34
+ AutoModelForCausalLM,
35
+ AutoTokenizer,
36
+ BitsAndBytesConfig,
37
+ TrainingArguments,
38
+ logging,
39
+ )
40
+ from peft import (
41
+ LoraConfig,
42
+ PeftModel,
43
+ get_peft_model,
44
+ )
45
+ import os, torch, gc
46
+ from datasets import load_dataset
47
+ import bitsandbytes as bnb
48
+ from trl import SFTTrainer
49
+
50
+ # Hugging Face Token
51
+ HF_TOKEN = "your_hf_token" # 任意のトークンに変更
52
+
53
+ # モデルを読み込み。
54
+ # llm-jp-3 1.8B, 3.7B, 13Bのsnapshotをダウンロード済みでmodelsディレクトリに格納してあります。
55
+ # base_model_idの値はomnicampusの環境におけるモデルのパスを表しており、それ以外の環境で実行する場合は変更の必要があります。
56
+ # その他のモデルは取得に承諾が必要なため、各自でダウンロードお願いします。
57
+ # base_model_id = "models/models--llm-jp--llm-jp-3-13b/snapshots/cd3823f4c1fcbb0ad2e2af46036ab1b0ca13192a" #Fine-Tuningするベースモデル
58
+ # omnicampus以外の環境をご利用の方は以下をご利用ください。
59
+ base_model_id = "llm-jp/llm-jp-3-13b"
60
+ new_model_id = "llm-jp-3-13b-finetune" #Fine-Tuningしたモデルにつけたい名前
61
+
62
+ """
63
+ bnb_config: 量子化の設定
64
+
65
+ - load_in_4bit:
66
+ - 4bit量子化形式でモデルをロード
67
+
68
+ - bnb_4bit_quant_type:
69
+ - 量子化の形式を指定
70
 
71
+ - bnb_4bit_compute_dtype:
72
+ - 量子化された重みを用いて計算する際のデータ型
73
 
74
+ """
75
+
76
+ bnb_config = BitsAndBytesConfig(
77
+ load_in_4bit=True,
78
+ bnb_4bit_quant_type="nf4", # nf4は通常のINT4より精度が高く、ニューラルネットワークの分布に最適です
79
+ bnb_4bit_compute_dtype=torch.bfloat16,
80
+ )
81
 
82
+ """
83
+ model: モデル
84
+
85
+ - base_model:
86
+ - 読み込むベースモデル (事前に定義したもの)
87
+
88
+ - quantization_config:
89
+ - bnb_configで設定した量子化設定
90
 
91
+ - device_map:
92
+ - モデルを割り当てるデバイス (CPU/GPU) "auto"で自動に割り当てられます。
93
 
94
+ tokenizer: トークナイザー
95
 
96
+ - base_model:
97
+ - 読み込むベースモデル (事前に定義したもの)
98
 
99
+ - trust_remote_code:
100
+ - リモートコードの実行を許可 (カスタムモデルなど)
101
+ """
102
+ model = AutoModelForCausalLM.from_pretrained(
103
+ base_model_id,
104
+ quantization_config=bnb_config,
105
+ device_map="auto"
106
+ )
107
 
108
+ tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True)
109
 
110
+ """
111
+ find_all_linear_names: モデル内の4bit量子化線形層を探します。
112
+ """
113
+
114
+ def find_all_linear_names(model):
115
+ cls = bnb.nn.Linear4bit # 4bit量子化線形層クラスを指定
116
+ lora_module_names = set() # ここに取得した線形層を保持します。
117
+
118
+ # モデル内の全てのモジュールを探索します
119
+ for name, module in model.named_modules():
120
+ if isinstance(module, cls): # モジュールが4bit量子化線形層の場合
121
+ names = name.split('.') # モジュールの名前を分割 (ネストされてる際などに対処)
122
+ lora_module_names.add(names[0] if len(names) == 1 else names[-1]) # 最下層の名前をlora_module_namesに追加
123
+
124
+ # 'lm_head' は16ビット演算の際に除外する必要があるため、lora_module_namesから削除
125
+ if 'lm_head' in lora_module_names:
126
+ lora_module_names.remove('lm_head')
127
+
128
+ return list(lora_module_names) # lora_module_namesをリストに変換して返します。
129
+
130
+ modules = find_all_linear_names(model)
131
 
132
+ """
133
+ peft_config: PEFTの構成設定
134
 
135
+ - r
136
+ - LoRA のランク (4, 8, 16 ,32...)
137
+ - 増やすほど学習が捗るが, 過学習のリスクも高まるので注意
138
 
139
+ - lora_alpha
140
+ - LoRAのスケーリング係数
141
 
142
+ - lora_dropout
143
+ - ドロップアウト率(過学習を防ぐための割合)
144
 
145
+ - bias
146
+ - バイアス項の扱い ("none"の場合、LoRAはバイアスを学習しない)
147
 
148
+ - task_type
149
+ - タスクタイプ
150
 
151
+ - target_modules
152
+ - LoRAを適用するターゲットモジュール (前のコードで特定した層)
153
+ """
154
 
155
+ peft_config = LoraConfig(
156
+ r=16,
157
+ lora_alpha=32,
158
+ lora_dropout=0.05,
159
+ bias="none",
160
+ task_type="CAUSAL_LM",
161
+ target_modules=modules,
162
+ )
163
 
164
+ model = get_peft_model(model, peft_config)
165
 
166
+ from google.colab import drive
167
+ drive.mount('/content/drive')
168
 
169
+ import json
170
 
171
+ file_path = '/ICHIKARA|Distribution20241221_all/ichikara-instruction-003-001-1.json'
172
 
173
+ # JSON ファイルを開く
174
+ with open(file_path, 'r', encoding='utf-8') as f:
175
+ data = json.load(f)
176
 
177
+ # データの確認
178
+ print(data)
179
 
180
+ """
181
+ 学習に用いるデータセットの指定
182
+ 今回はLLM-jp の公開している Ichikara Instruction を使います。データにアクセスするためには申請が必要ですので、使いたい方のみ申請をしてください。
183
+ Ichikara Instruciton を Hugging Face Hub にて公開することはお控えください。
184
+ また、CC-BY-NC-SAですのでモデルはライセンスを継承する前提でお使いください。
185
 
186
+ 下記のリンクから申請を終えた先に Google Drive があり、Distribution20241221_all というフォルダごとダウンロードしてください。
187
+ 今回は「ichikara-instruction-003-001-1.json」を使います。必要であれば展開(!unzip など)し、データセットのパスを適切に指定してください。
188
+ omnicampusの開発環境では取得したデータを左側にドラッグアンドドロップしてお使いください。
189
 
190
+ https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日���語インストラクションデータ-公開/
191
+ 関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎. ichikara-instruction: LLMのための日本語インストラクションデータの構築. 言語処理学会第30回年次大会(2024)
192
 
193
+ """
194
+ ichikara_file_pass = "/ICHIKARA|Distribution20241221_all/ichikara-instruction-003-001-1.json"
195
 
196
+ dataset = load_dataset("json", data_files=ichikara_file_pass)
197
+ dataset
198
 
199
+ # 学習時のプロンプトフォーマットの定義
200
+ prompt = """### 指示
201
+ {}
202
+ ### 回答
203
+ {}"""
204
 
 
205
 
206
+ """
207
+ formatting_prompts_func: 各データをプロンプトに合わせた形式に合わせる
208
+ """
209
+ EOS_TOKEN = tokenizer.eos_token # トークナイザーのEOSトークン(文末トークン)
210
+ def formatting_prompts_func(examples):
211
+ input = examples["text"] # 入力データ
212
+ output = examples["output"] # 出力データ
213
+ text = prompt.format(input, output) + EOS_TOKEN # プロンプトの作成
214
+ return { "formatted_text" : text, } # 新しいフィールド "formatted_text" を返す
215
+ pass
216
 
217
+ # # 各データにフォーマットを適用
218
+ dataset = dataset.map(
219
+ formatting_prompts_func,
220
+ num_proc= 4, # 並列処理数を指定
221
+ )
222
 
223
+ dataset
224
 
225
+ # データを確認
226
+ print(dataset["train"]["formatted_text"][3])
227
 
228
+ # データをtrainデータとtestデータに分割 (test_sizeの比率に)
229
+ # dataset = dataset["train"].train_test_split(test_size=0.1)
230
+ # dataset
231
 
232
+ """
233
+ training_arguments: 学習の設定
234
 
235
+ - output_dir:
236
+ -トレーニング後のモデルを保存するディレクトリ
237
 
238
+ - per_device_train_batch_size:
239
+ - デバイスごとのトレーニングバッチサイズ
240
 
241
+ - per_device_
242
+ _batch_size:
243
+ - デバイスごとの評価バッチサイズ
244
 
245
+ - gradient_accumulation_steps:
246
+ - 勾配を更新する前にステップを積み重ねる回数
247
 
248
+ - optim:
249
+ - オプティマイザの設定
250
 
251
+ - num_train_epochs:
252
+ - エポック数
253
 
254
+ - eval_strategy:
255
+ - 評価の戦略 ("no"/"steps"/"epoch")
256
 
257
+ - eval_steps:
258
+ - eval_strategyが"steps"のとき、評価を行うstep間隔
259
 
260
+ - logging_strategy:
261
+ - ログ記録の戦略
262
 
263
+ - logging_steps:
264
+ - ログを出力するステップ間隔
265
 
266
+ - warmup_steps:
267
+ - 学習率のウォームアップステップ数
268
 
269
+ - save_steps:
270
+ - モデルを保存するステップ間隔
271
+
272
+ - save_total_limit:
273
+ - 保存しておくcheckpointの数
274
+
275
+ - max_steps:
276
+ - トレーニングの最大ステップ数
277
+
278
+ - learning_rate:
279
+ - 学習率
280
+
281
+ - fp16:
282
+ - 16bit浮動小数点の使用設定(第8回演習を参考にすると良いです)
283
 
284
+ - bf16:
285
+ - BFloat16の使用設定
286
 
287
+ - group_by_length:
288
+ - 入力シーケンスの長さによりバッチをグループ化 (トレーニングの効率化)
289
 
290
+ - report_to:
291
+ - ログの送信先 ("wandb"/"tensorboard"など)
292
+ """
293
+
294
+ training_arguments = TrainingArguments(
295
+ output_dir=new_model_id,
296
+ per_device_train_batch_size=1,
297
+ gradient_accumulation_steps=2,
298
+ optim="paged_adamw_32bit",
299
+ num_train_epochs=1,
300
+ logging_strategy="steps",
301
+ logging_steps=10,
302
+ warmup_steps=10,
303
+ save_steps=100,
304
+ save_total_limit = 2,
305
+ max_steps = -1,
306
+ learning_rate=5e-5,
307
+ fp16=False,
308
+ bf16=False,
309
+ seed = 3407,
310
+ group_by_length=True,
311
+ report_to="none"
312
+ )
313
+
314
+ """
315
+ SFTTrainer: Supervised Fine-Tuningに関する設定
316
+
317
+ - model:
318
+ - 読み込んだベースのモデル
319
+
320
+ - train_dataset:
321
+ - トレーニングに使用するデータセット
322
 
323
+ - eval_dataset:
324
+ - ��価に使用するデータセット
325
+
326
+ - peft_config:
327
+ - PEFT(Parameter-Efficient Fine-Tuning)の設定(LoRAを利用する場合に指定)
328
+
329
+ - max_seq_length:
330
+ - モデルに入力されるシーケンスの最大トークン長
331
 
332
+ - dataset_text_field:
333
+ - データセット内の学習に使うテキストを含むフィールド名
334
+
335
+ - tokenizer:
336
+ - モデルに対応するトークナイザー
337
+
338
+ - args:
339
+ - トレーニングに使用するハイパーパラメータ(TrainingArgumentsの設定を指定)
340
+
341
+ - packing:
342
+ - 入力シーケンスのパッキングを行うかどうかの設定 (False に設定することで、各入力を独立して扱う)
343
+ """
344
+ trainer = SFTTrainer(
345
+ model=model,
346
+ train_dataset=dataset["train"],
347
+ peft_config=peft_config,
348
+ max_seq_length= 512,
349
+ dataset_text_field="formatted_text",
350
+ tokenizer=tokenizer,
351
+ args=training_arguments,
352
+ packing= False,
353
+ )
354
+
355
+ model.config.use_cache = False # キャッシュ機能を無効化
356
+ trainer.train() # トレーニングを実行
357
+
358
+ # タスクとなるデータの読み込み。
359
+ # omnicampusの開発環境では、左にタスクのjsonlをドラッグアンドドロップしてから実行。
360
+ import json
361
+
362
+ elyza_file_pass = "/elyza-tasks-100-TV_0.jsonl"
363
+
364
+ datasets = []
365
+ with open(elyza_file_pass, "r") as f:
366
+ item = ""
367
+ for line in f:
368
+ line = line.strip()
369
+ item += line
370
+ if item.endswith("}"):
371
+ datasets.append(json.loads(item))
372
+ item = ""
373
+
374
+ # モデルによるタスクの推論。
375
+ from tqdm import tqdm
376
+
377
+ results = []
378
+ for data in tqdm(datasets):
379
+
380
+ input = data["input"]
381
+
382
+ prompt = f"""### 指示
383
+ {input}
384
+ ### 回答
385
+ """
386
+
387
+ tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
388
+ attention_mask = torch.ones_like(tokenized_input)
389
+
390
+ with torch.no_grad():
391
+ outputs = model.generate(
392
+ tokenized_input,
393
+ attention_mask=attention_mask,
394
+ max_new_tokens=100,
395
+ do_sample=False,
396
+ repetition_penalty=1.2,
397
+ pad_token_id=tokenizer.eos_token_id
398
+ )[0]
399
+ output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
400
+
401
+ results.append({"task_id": data["task_id"], "input": input, "output": output})
402
+
403
+ # こちらで生成されたjsolを提出してください。
404
+ # 本コードではinputとeval_aspectも含んでいますが、なくても問題ありません。
405
+ # 必須なのはtask_idとoutputとなります。
406
+ import re
407
+ jsonl_id = re.sub(".*/", "", new_model_id)
408
+ with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f:
409
+ for result in results:
410
+ json.dump(result, f, ensure_ascii=False) # ensure_ascii=False for handling non-ASCII characters
411
+ f.write('\n')
412
+
413
+ from google.colab import files
414
+ files.download(f"./{jsonl_id}-outputs.jsonl")
415
+
416
+ # モデルとトークナイザーをHugging Faceにアップロード
417
+ model.push_to_hub(new_model_id, token=HF_TOKEN, private=True) # Online saving
418
+ tokenizer.push_to_hub(new_model_id, token=HF_TOKEN, private=True) # Online saving
419
+
420
+ """https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/
421
+
422
+ 関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎. ichikara-instruction: LLMのための日本語インストラクションデータの構築. 言語処理学会第30回年次大会(2024)
423
+ """
424
+
425
+ ```
426
+
427
+ # データセット名: Ichikara Instruction
428
+ ライセンス: CC-BY-NC-SA
429
+ データセット申請:https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/