前提
pythonを用いて、類義語を出力することを目指しています。
出力されるグラフが文字化けしてしまいます。
実現したいこと
https://qiita.com/thmd9726/items/5b096a32183247c6e35e
上記のサイトを参考に日本語版の作成をしたいと考えています。
該当のソースコード
python
1import torch 2from transformers import ( 3 BertJapaneseTokenizer, 4 BertForMaskedLM, 5) 6import matplotlib.pyplot as plt 7 8# Build model 9tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking') 10model = BertForMaskedLM.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking') 11 12 13def get_synonym_with_bert(text, masked_idx): 14 15 text_length = len(text.split()) 16 masked_idx = masked_idx + text_length + 2 17 segments_ids = [0] * (text_length + 2) + [1] * (text_length + 1) 18 text = " ".join(["[CLS]", text, "[SEP]", text, "[SEP]"]) 19 20 # Tokenize a text 21 # tokenized_text = tokenizer.tokenize(text) 22 tokenized_text = text.split() 23 24 # Mask a complex token which should be substituted 25 complex_word = tokenized_text[masked_idx] 26 tokenized_text[masked_idx] = '[MASK]' 27 28 # Convert inputs to PyTorch tensors 29 tokens_ids = tokenizer.convert_tokens_to_ids(tokenized_text) 30 tokens_tensor = torch.tensor([tokens_ids]) 31 segments_tensors = torch.tensor([segments_ids]) 32 33 34 # Predict a masked token 35 model.eval() 36 if torch.cuda.is_available(): 37 tokens_tensor = tokens_tensor.to('cuda') 38 segments_tensors = segments_tensors.to('cuda') 39 model.to('cuda') 40 41 with torch.no_grad(): 42 outputs = model(tokens_tensor, token_type_ids=segments_tensors) 43 predictions = outputs[0] 44 45 46 # Output top 10 of candidates 47 topk_score, topk_index = torch.topk(predictions[0, masked_idx], 10) 48 topk_tokens = tokenizer.convert_ids_to_tokens(topk_index.tolist()) 49 50 # Visualize output probabilities 51 plt.bar(topk_tokens, torch.softmax(topk_score, 0).tolist()) 52 plt.xticks(rotation=70) 53 plt.ylabel('Probability') 54 plt.show() 55 return topk_tokens 56 57 58text = "私は人間です" 59for i in range(6): 60 get_synonym_with_bert(text=text , masked_idx = i)
試したこと
東北大学が作成したBERTを用いています。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。