前提
bertの勉強をしようと軽く触れた段階です。プログラミング自体初心者です。
https://www.ai-shift.jp/techblog/281
勉強にあたって、上記のサイトのコードを実行してみたところ、indexエラーが出ました。
また、エラーの原因と思われる部分のコードがどういった働き(動き)をしているのかを理解できなかったので、併せてご教授いただければ幸いです。
_, predicted_indexes = torch.topk(predictions[masked_index+1], k=1000)
実現したいこと
正常に出力されるようにする。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-48-1bd1a0f626d1> in <module> 1 text = 'Customer reviews indicate that many modern mobile devices are often unnecessarily * .' 2 candidate = ["complication", "complicates", "complicate", "complicated"] ----> 3 print(part5_slover(text,candidate)) <ipython-input-47-2884533de229> in part5_slover(text, candidate) 13 predictions = outputs[0] 14 ---> 15 _, predicted_indexes = torch.topk(predictions[masked_index+1], k=1000) 16 predicted_tokens = tokenizer.convert_ids_to_tokens(predicted_indexes.tolist()) 17 IndexError: string index out of range
該当のソースコード
def part5_slover(text, candidate): tokens = tokenizer.tokenize(text) masked_index = tokens.index("*") #何番目に*が出てくるのか(数値) tokens[masked_index] = "[MASK]" #*をMASKに変更 tokens = ["[CLS]"] + tokens + ["[SEP]"] #前後に[CLS][SEP]追加 ids = tokenizer.convert_tokens_to_ids(tokens) #id化 ids = torch.tensor(ids).reshape(1,-1) #テンソル化 ids = ids.cuda() with torch.no_grad(): outputs, _ = model(ids) predictions = outputs[0] _, predicted_indexes = torch.topk(predictions[masked_index+1], k=1000) predicted_tokens = tokenizer.convert_ids_to_tokens(predicted_indexes.tolist()) for i, v in enumerate(predicted_tokens): if v in candidate: return (i, v) return "don't know"
text = 'Customer reviews indicate that many modern mobile devices are often unnecessarily * .' candidate = ["complication", "complicates", "complicate", "complicated"] print(part5_slover(text,candidate))
回答1件
あなたの回答
tips
プレビュー