Views
No views yet

| タグ | 項目 |
|---|---|
| <name> | 氏名 |
| <birthday> | 生年月日 |
| <phone-number> | 電話番号 |
| <mail-address> | メールアドレス |
| <customer-id> | 会員番号・ID |
| <address> | 住所 |
| <post-code> | 郵便番号 |
| <company> | 会社名 |
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4instruction = "# タスク\n入力文中の個人情報をマスキングせよ\n\n# 入力文\n"
5text = """オペレーター:ありがとうございます。カスタマーサポートセンターでございます。お名前と生年月日、ご住所を市区町村まで教えていただけますか?
6顧客:あ、はい。西山...すみません、西山俊之です。生年月日は、えーっと、1983年1月23日です。東京都練馬区在住です。
7オペレーター:西山俊之様、1983年1月23日生まれ、東京都練馬区にお住まいですね。確認いたしました。お電話の件につきまして、さらにご本人様確認をさせていただきます。"""
8input_text = instruction + text
9
10model_name = "cameltech/japanese-gpt-1b-PII-masking"
11model = AutoModelForCausalLM.from_pretrained(model_name)
12tokenizer = AutoTokenizer.from_pretrained(model_name)
13
14if torch.cuda.is_available():
15 model = model.to("cuda")
16
17def preprocess(text):
18 return text.replace("\n", "<LB>")
19
20def postprocess(text):
21 return text.replace("<LB>", "\n")
22
23generation_config = {
24 "max_new_tokens": 256,
25 "num_beams": 3,
26 "num_return_sequences": 1,
27 "early_stopping": True,
28 "eos_token_id": tokenizer.eos_token_id,
29 "pad_token_id": tokenizer.pad_token_id,
30 "repetition_penalty": 3.0
31}
32
33input_text += "<SEP>"
34input_text = preprocess(input_text)
35
36with torch.no_grad():
37 token_ids = tokenizer.encode(input_text, add_special_tokens=False, return_tensors="pt")
38
39 output_ids = model.generate(
40 token_ids.to(model.device),
41 **generation_config
42 )
43output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
44output = postprocess(output)
45
46print(output)
47"""
48オペレーター:ありがとうございます。カスタマーサポートセンターでございます。お名前と生年月日、ご住所を<address>まで教えていただけますか?
49顧客:あ、はい。<name>です。生年月日は、えーっと、<birthday>です。<address>在住です。
50オペレーター:<name>様、<birthday>生まれ、<address>にお住まいですね。確認いたしました。お電話の件につきまして、さらにご本人様確認をさせていただきます。
51"""