開発環境
ライブラリのインストール
pip install torch transformers pip install fugashi ipadic
データの準備
以下のようなデータを準備します
それと僕が材料をお伝えした時にバニラエッセンスを入れたじゃないですか 1弦の5フレット、2弦の5フレット、 3弦の5フレット、2弦の7フレット、 けどもこれでえっと木スキル使うとさらに カウンターが1個貯まる 長い年月をかけて韓国人朝鮮人 と向き合ってきた中国人は韓国人 ごいハマり始めて 50話 いらっしゃいませ♪ ヘラのグランプリ! オムニテクでは人々を助けを上がっている。
文章の自然さの判定
from transformers import BertForMaskedLM, BertJapaneseTokenizer import torch import csv import json model_name = "cl-tohoku/bert-base-japanese" tokenizer = BertJapaneseTokenizer.from_pretrained(model_name) model = BertForMaskedLM.from_pretrained(model_name) def tokenize_with_mask(text, tokenizer): tokens = tokenizer.tokenize(text) masked_tokens = [] for i in range(len(tokens)): if tokens[i] not in ['[CLS]', '[SEP]']: masked_tokens.append(tokens[:i] + ['[MASK]'] + tokens[i+1:]) return masked_tokens def calculate_score(masked_tokens, tokenizer, model): scores = [] for tokens in masked_tokens: input_ids = tokenizer.convert_tokens_to_ids(tokens) tensor_input = torch.tensor([input_ids]) with torch.no_grad(): outputs = model(tensor_input, labels=tensor_input) loss = outputs[0] scores.append(loss.item()) return sum(scores) / len(scores) with open('testData.txt', 'r', encoding='utf-8') as file: texts = file.readlines() results = [] for text in texts[:100]: text = text.strip() masked_tokens = tokenize_with_mask(text, tokenizer) score = calculate_score(masked_tokens, tokenizer, model) results.append({'text': text, 'score': score}) # CSVファイルに保存 with open('results.csv', 'w', encoding='utf-8', newline='') as csv_file: fieldnames = ['text', 'score'] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() for result in results: writer.writerow(result) # JSONファイルに保存 with open('results.json', 'w', encoding='utf-8') as json_file: json.dump(results, json_file, ensure_ascii=False, indent=4)
結果は以下のようになります