You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行土耳其语酒店评论情感分析代码遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:27:33