运行土耳其语酒店评论情感分析代码遇TensorFlow路径错误求助
问题:TensorBoard日志目录创建失败,提示“不是目录”
我写了一段酒店评论正负情感分析的代码,用到了pandas、transformers、datasets、turkish_lm_tuner库。一开始以为是路径里的特殊字符“Ö”导致问题,修改后仍报错;随后我在output文件夹中添加了__init__.py,还在环境变量中配置了路径,错误依旧。翻遍谷歌和Stack Overflow尝试多种方法都没解决,求帮忙。
代码
import os import pandas as pd from transformers import AutoTokenizer from datasets import Dataset from turkish_lm_tuner import TrainerForClassification, EvaluatorForClassification # 加载数据 data = pd.read_csv('../Emotion_Detection/Hotel_readablee.csv') # 定义输出目录 output_dir = 'C:\\Users\\Ata Onur Özdemir\\PycharmProjects\\Emotion_Detection\\output' # 检查输出目录是否存在 if os.path.exists(output_dir): # 查看目录内容 print(f"Contents of {output_dir} directory:") print(os.listdir(output_dir)) # 重命名目录 new_output_dir = output_dir + "_old" os.rename(output_dir, new_output_dir) print(f"{output_dir} directory has been renamed to {new_output_dir}.") # 创建新的输出目录 os.makedirs(output_dir) print(f"New {output_dir} directory created.") else: # 目录不存在则创建 os.makedirs(output_dir) print(f"{output_dir} directory created.") # 初始化分词器 model_name = "boun-tabi-LMG/TURNA" tokenizer = AutoTokenizer.from_pretrained(model_name) # 定义自定义数据集处理类及必要步骤 class CustomDatasetProcessor: def __init__(self, tokenizer, max_input_length): self.tokenizer = tokenizer self.max_input_length = max_input_length def load_and_preprocess_data(self, data): dataset = Dataset.from_pandas(data) def preprocess_function(examples): # 将每条评论转为字符串类型 positive_reviews = [str(review) for review in examples['Positive_Review_Tr']] negative_reviews = [str(review) for review in examples['Negative_Review_Tr']] # 正确使用分词器 tokenized_reviews = self.tokenizer( positive_reviews, negative_reviews, truncation=True, padding='max_length', max_length=self.max_input_length, return_tensors='pt' # 返回PyTorch张量 ) return tokenized_reviews tokenized_dataset = dataset.map(preprocess_function, batched=True) return tokenized_dataset # 初始化数据集处理器 dataset_processor = CustomDatasetProcessor(tokenizer, max_input_length=2048) # 将数据拆分为训练集、验证集和测试集 train_data = data.sample(frac=0.8, random_state=42) remaining_data = data.drop(train_data.index) validation_data = remaining_data.sample(frac=0.5, random_state=42) test_data = remaining_data.drop(validation_data.index) # 预处理数据集 train_dataset = dataset_processor.load_and_preprocess_data(train_data) eval_dataset = dataset_processor.load_and_preprocess_data(validation_data) test_dataset = dataset_processor.load_and_preprocess_data(test_data) # 训练参数 training_params = { 'num_train_epochs': 10, 'per_device_train_batch_size': 4, 'per_device_eval_batch_size': 4, 'output_dir': output_dir, 'evaluation_strategy': 'epoch', 'save_strategy': 'epoch', } # 优化器参数 optimizer_params = { 'optimizer_type': 'adafactor', 'scheduler': False, } # 测试参数 test_params = { 'per_device_eval_batch_size': 4, 'output_dir': output_dir, } num_labels = 4 # 假设进行四分类任务 # 初始化分类训练器 model_trainer = TrainerForClassification( model_name=model_name, num_labels=num_labels, task='classification', optimizer_params=optimizer_params, training_params=training_params, model_save_path="hotel_reviews_classification_model", test_params=test_params ) # 训练并评估模型 trainer, model = model_trainer.train_and_evaluate(train_dataset, eval_dataset, test_dataset) # 保存训练好的模型和分词器 model.save_pretrained("hotel_reviews_classification_model") tokenizer.save_pretrained("hotel_reviews_classification_model") # 使用分类评估器评估模型 evaluator = EvaluatorForClassification( model_save_path="hotel_reviews_classification_model", model_name=model_name, task='classification', test_params=test_params, num_labels=num_labels ) # 在测试集上评估模型 results = evaluator.evaluate_model(test_dataset) # 将评估结果转为DataFrame results_df = pd.DataFrame(results) # 将结果保存为CSV文件 results_df.to_csv('evaluation_results.csv', index=False) print("Evaluation results saved to evaluation_results.csv.") # 查看当前工作目录 print("Current Working Directory:", os.getcwd())
错误日志
Traceback (most recent call last): File "C:\Users\Ata Onur Özdemir\PycharmProjects\Emotion_Detection\main.py", line 101, in <module> trainer, model = model_trainer.train_and_evaluate(train_dataset, eval_dataset, test_dataset) File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\turkish_lm_tuner\trainer.py", line 195, in train_and_evaluate trainer.train() File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\transformers\trainer.py", line 1885, in train return inner_training_loop( File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\transformers\trainer.py", line 2147, in _inner_training_loop self.control = self.callback_handler.on_train_begin(args, self.state, self.control) File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\transformers\trainer_callback.py", line 454, in on_train_begin return self.call_event("on_train_begin", args, state, control) File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\transformers\trainer_callback.py", line 498, in call_event result = getattr(callback, event)( File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\transformers\integrations\integration_utils.py", line 629, in on_train_begin self._init_summary_writer(args, log_dir) File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\transformers\integrations\integration_utils.py", line 615, in _init_summary_writer self.tb_writer = self._SummaryWriter(log_dir=log_dir) File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\torch\utils\tensorboard\writer.py", line 249, in __init__ self._get_file_writer() File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\torch\utils\tensorboard\writer.py", line 281, in _get_file_writer self.file_writer = FileWriter( File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\torch\utils\tensorboard\writer.py", line 75, in __init__ self.event_writer = EventFileWriter( File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\tensorboard\summary\writer\event_file_writer.py", line 72, in __init__ tf.io.gfile.makedirs(logdir) File "C:\Users\Ata Onur Özdemir\venv\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 513, in recursive_create_dir_v2 _pywrap_file_io.RecursivelyCreateDir(compat.path_to_bytes(path)) tensorflow.python.framework.errors_impl.FailedPreconditionError: C:\Users\Ata Onur Özdemir\PycharmProjects\Emotion_Detection\output is not a directory
额外信息
执行tree PycharmProjects命令返回:
D:\TEMP>tree PycharmProjects Folder PATH listing Volume serial number is A544-D3FB D:\TEMP\PYCHARMPROJECTS Invalid path - \TEMP\PYCHARMPROJECTS No subfolders exist
内容的提问来源于stack exchange,提问作者Ata Onur Özdemir
相关产品推荐
相关产品推荐

