inu-ai commited on
Commit
b24b90f
1 Parent(s): 49c9334

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +38 -14
README.md CHANGED
@@ -11,7 +11,7 @@ tags:
11
  license: unknown
12
  datasets:
13
  - JosephusCheung/GuanacoDataset
14
- - tatsu-lab/alpaca
15
  widget:
16
  - text: <s>\\n以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。\\n[SEP]\\n指示:\\n日本で一番広い湖は?\\n[SEP]\\n応答:\\n
17
  ---
@@ -40,13 +40,14 @@ model = AutoModelForCausalLM.from_pretrained("inu-ai/alpaca-guanaco-japanese-gpt
40
  ## ChatGPT4によるサンプルコード
41
 
42
  ```python
43
- MAX_LENGTH = 1024
 
44
  INPUT_PROMPT = r'<s>\n以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。\n[SEP]\n指示:\n{instruction}\n[SEP]\n入力:\n{input}\n[SEP]\n応答:\n'
45
  NO_INPUT_PROMPT = r'<s>\n以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。\n[SEP]\n指示:\n{instruction}\n[SEP]\n応答:\n'
46
 
47
  def prepare_input(role_instruction, conversation_history, new_conversation):
48
  instruction = "".join([f"{text}\\n" for text in role_instruction])
49
- conversation_text = "\\n".join(conversation_history)
50
  input_text = f"User:{new_conversation}"
51
 
52
  return INPUT_PROMPT.format(instruction=instruction, input=input_text)
@@ -61,7 +62,7 @@ def generate_response(role_instruction, conversation_history, new_conversation):
61
  input_text = prepare_input(role_instruction, conversation_history, new_conversation)
62
  token_ids = tokenizer.encode(input_text, add_special_tokens=False, return_tensors="pt")
63
  n = len(token_ids[0])
64
- if n <= MAX_LENGTH:
65
  break
66
  else:
67
  conversation_history.pop()
@@ -71,7 +72,7 @@ def generate_response(role_instruction, conversation_history, new_conversation):
71
  output_ids = model.generate(
72
  token_ids.to(model.device),
73
  min_length=n,
74
- max_length=min(MAX_LENGTH, n+100),
75
  temperature=0.7,
76
  do_sample=True,
77
  pad_token_id=tokenizer.pad_token_id,
@@ -131,16 +132,17 @@ for question in questions:
131
  ## 出力
132
 
133
  ```
134
- Assistant:日本で一番高い山は富士山です。
135
- Assistant:日本で一番広い湖は琵琶湖です。湖は長さ約6,400 km、面積は約33,600 km2で、世界最大の湖です。
136
- Assistant:世界で一番高い山は高山(テプイ)で、エベレストの頂上にあると言われています。
137
- Assistant:世界で一番広い湖は、アフリカ大陸にあるアフリカ大陸中央部にあるナイジェリア湖である。面積は58,200,000平方キロメートルで、世界で最も広く、世界で3番目に大きい湖である。
138
- Assistant:ずんだもんは、東北ずん子のキャラクターです。一人称は「ボク」で語尾に「なのだ」を付けてしゃべるのが特徴です。また、ずんだもんは、東北ずん子が身に着けていた武器「ずんだアロー」に変身する妖精またはマスコットとして知られています。
139
- Assistant:今、私は何問目でしょうか?
140
  ```
141
 
142
  # 評価
143
- 100回の「入力」質問を行い、それらに対する「応答」文字列が最も正確なエポックのモデルを選択しました。
 
144
  なお、サンプルコードのように「入力」が長くなると正答率が50%ぐらいに下がりました。
145
 
146
  | 入力 | 応答 | 正答率[%] |
@@ -148,8 +150,30 @@ Assistant:今、私は何問目でしょうか?
148
  | 日本で一番広い湖は? | 琵琶湖 | 96 |
149
  | 世界で一番高い山は? | エベレスト | 86 |
150
 
 
151
 
152
- # トレーニングのハイパーパラメータ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
153
 
154
  学習時には以下のハイパーパラメータを使用:
155
  ```
@@ -172,7 +196,7 @@ python.exe transformers/examples/pytorch/language-modeling/run_clm.py ^
172
  --logging_dir logs
173
  ```
174
 
175
- # フレームワークのバージョン
176
 
177
  - Transformers 4.28.0.dev0
178
  - Pytorch 2.0.0+cu117
 
11
  license: unknown
12
  datasets:
13
  - JosephusCheung/GuanacoDataset
14
+ - yahma/alpaca-cleaned
15
  widget:
16
  - text: <s>\\n以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。\\n[SEP]\\n指示:\\n日本で一番広い湖は?\\n[SEP]\\n応答:\\n
17
  ---
 
40
  ## ChatGPT4によるサンプルコード
41
 
42
  ```python
43
+ MAX_ASSISTANT_LENGTH = 100
44
+ MAX_INPUT_LENGTH = 1024
45
  INPUT_PROMPT = r'<s>\n以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。\n[SEP]\n指示:\n{instruction}\n[SEP]\n入力:\n{input}\n[SEP]\n応答:\n'
46
  NO_INPUT_PROMPT = r'<s>\n以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。\n[SEP]\n指示:\n{instruction}\n[SEP]\n応答:\n'
47
 
48
  def prepare_input(role_instruction, conversation_history, new_conversation):
49
  instruction = "".join([f"{text}\\n" for text in role_instruction])
50
+ instruction += "\\n".join(conversation_history)
51
  input_text = f"User:{new_conversation}"
52
 
53
  return INPUT_PROMPT.format(instruction=instruction, input=input_text)
 
62
  input_text = prepare_input(role_instruction, conversation_history, new_conversation)
63
  token_ids = tokenizer.encode(input_text, add_special_tokens=False, return_tensors="pt")
64
  n = len(token_ids[0])
65
+ if n + MAX_ASSISTANT_LENGTH <= MAX_INPUT_LENGTH:
66
  break
67
  else:
68
  conversation_history.pop()
 
72
  output_ids = model.generate(
73
  token_ids.to(model.device),
74
  min_length=n,
75
+ max_length=min(MAX_INPUT_LENGTH, n + MAX_ASSISTANT_LENGTH),
76
  temperature=0.7,
77
  do_sample=True,
78
  pad_token_id=tokenizer.pad_token_id,
 
132
  ## 出力
133
 
134
  ```
135
+ Assistant:はい、日本で一番高い山は日本の富士山です。
136
+ Assistant:日本で最も広い湖は琵琶湖です。
137
+ Assistant:世界で一番高い山といえば、ギザの大ピラミッドの頂上に立つギザギザのピラミッドです。
138
+ Assistant:世界で一番広い湖は、ギザの大ピラミッドの頂上に立つギザギザのピラミッドです。
139
+ Assistant:最初の質問は、ずんだアローに変身するかどうかの質問である。
140
+ Assistant:今、あなたの質問は10問目です。
141
  ```
142
 
143
  # 評価
144
+ 100回の「入力」のような質問を行い、それらに対する「応答」に正解の文字列が含まれるかで評価しています。
145
+ 一番正答率が高いエポックのモデルを選択しました。
146
  なお、サンプルコードのように「入力」が長くなると正答率が50%ぐらいに下がりました。
147
 
148
  | 入力 | 応答 | 正答率[%] |
 
150
  | 日本で一番広い湖は? | 琵琶湖 | 96 |
151
  | 世界で一番高い山は? | エベレスト | 86 |
152
 
153
+ # 学習データのフォーマット
154
 
155
+ [alpaca](https://github.com/tatsu-lab/stanford_alpaca)と同じように、以下のようなフォーマットにしています。
156
+
157
+ ```
158
+ <s>
159
+ 以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。
160
+ [SEP]
161
+ 指示:
162
+ User:あなたは「ずんだもん」なのだ。東��ずん子の武器である「ずんだアロー」に変身する妖精またはマスコットなのだ。一人称は「ボク」で語尾に「なのだ」を付けてしゃべるのだ。
163
+ Assistant:了解したのだ!
164
+ [SEP]
165
+ 入力:
166
+ User:日本で一番高い山は?
167
+ [SEP]
168
+ 応答:
169
+ 日本で一番高い山は富士山で、標高3776メートルです。
170
+ </s>
171
+ ```
172
+
173
+ なぜか改行コードがスペースに置き換わってしまうため、実際は`\\n`に置き換えています。
174
+ データは[guanaco_alpaca_ja.txt](alpaca-guanaco-japanese-gpt-1b/train_data/guanaco_alpaca_ja.txt)です。
175
+
176
+ # 学習のハイパーパラメータ
177
 
178
  学習時には以下のハイパーパラメータを使用:
179
  ```
 
196
  --logging_dir logs
197
  ```
198
 
199
+ # ライブラリのバージョン
200
 
201
  - Transformers 4.28.0.dev0
202
  - Pytorch 2.0.0+cu117