adyoi commited on
Commit
4551faf
·
verified ·
1 Parent(s): 6f91ecf

Upload generate.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. generate.py +40 -9
generate.py CHANGED
@@ -37,6 +37,9 @@ def main():
37
  parser.add_argument("--repetition-penalty", type=float, default=1.0)
38
  parser.add_argument("--seed", type=int, default=None)
39
  parser.add_argument("--device", default="auto", choices=["auto", "cpu", "cuda"])
 
 
 
40
  args = parser.parse_args()
41
 
42
  if args.seed is not None:
@@ -46,17 +49,45 @@ def main():
46
  model, tokenizer = load_model(args.ckpt)
47
  model = model.to(device)
48
 
 
 
 
 
 
 
 
49
  ids = tokenizer.encode(args.prompt) or [0]
50
  idx = torch.tensor([ids], dtype=torch.long, device=device)
51
- out = model.generate(
52
- idx,
53
- args.max_new,
54
- temperature=args.temperature,
55
- top_k=args.top_k,
56
- top_p=args.top_p,
57
- repetition_penalty=args.repetition_penalty,
58
- )
59
- print(tokenizer.decode(out[0].tolist()))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
 
62
  if __name__ == "__main__":
 
37
  parser.add_argument("--repetition-penalty", type=float, default=1.0)
38
  parser.add_argument("--seed", type=int, default=None)
39
  parser.add_argument("--device", default="auto", choices=["auto", "cpu", "cuda"])
40
+ parser.add_argument("--guard", default=None, help="file kamus (satu kata per baris); pilih kandidat dengan ejaan terbaik")
41
+ parser.add_argument("--guard-tries", type=int, default=5, help="jumlah kandidat saat --guard aktif")
42
+ parser.add_argument("--guard-min", type=float, default=0.6, help="rasio kata dikenal minimum (info saja)")
43
  args = parser.parse_args()
44
 
45
  if args.seed is not None:
 
49
  model, tokenizer = load_model(args.ckpt)
50
  model = model.to(device)
51
 
52
+ wordset = None
53
+ if args.guard:
54
+ from indigo.common import load_wordlist, word_known_ratio
55
+
56
+ wordset = load_wordlist(args.guard)
57
+ print(f"[guard] kamus: {len(wordset):,} kata | target rasio >= {args.guard_min:.0%}")
58
+
59
  ids = tokenizer.encode(args.prompt) or [0]
60
  idx = torch.tensor([ids], dtype=torch.long, device=device)
61
+
62
+ def sample():
63
+ out = model.generate(
64
+ idx,
65
+ args.max_new,
66
+ temperature=args.temperature,
67
+ top_k=args.top_k,
68
+ top_p=args.top_p,
69
+ repetition_penalty=args.repetition_penalty,
70
+ )
71
+ text = tokenizer.decode(out[0].tolist())
72
+ ratio = word_known_ratio(text, wordset) if wordset else 1.0
73
+ return text, ratio
74
+
75
+ if wordset is None:
76
+ text, _ = sample()
77
+ print(text)
78
+ return
79
+
80
+ best_text, best_ratio = "", -1.0
81
+ for t in range(args.guard_tries):
82
+ torch.manual_seed((args.seed or 0) + t * 1013)
83
+ text, ratio = sample()
84
+ mark = f" [kandidat {t + 1}: {ratio:.0%}]"
85
+ if ratio > best_ratio:
86
+ best_text, best_ratio = text, ratio
87
+ if best_ratio >= args.guard_min:
88
+ break
89
+ print(best_text)
90
+ print(f"[guard] rasio kata dikenal: {best_ratio:.0%}")
91
 
92
 
93
  if __name__ == "__main__":