开发者社区> 问答> 正文

通过modelscope训练模型时报错, 'utf-8' codec can't decode

平台:win10+vscode+venvpython3.9.9
PyTorch version 1.9.1+cu111

使用模型网页给出的微调示例代码报错
网页连接:https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary
错误信息:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 89: invalid start byte

encode=gbk报错
image.png
encode=utf-8也报错
image.png
都停在了这里
image.png

代码:

import os
from modelscope.metainfo import Trainers
from modelscope.trainers import build_trainer
# from modelscope.msdatasets.audio.asr_dataset import ASRDataset
from modelscope.msdatasets.dataset_cls.custom_datasets import ASRDataset
###########coding=GB2312

def modelscope_finetune(params):
    if not os.path.exists(params.output_dir):
        os.makedirs(params.output_dir, exist_ok=True)    # dataset split ["train", "validation"]
    ds_dict = ASRDataset.load(params.data_path, namespace='speech_asr',)
    kwargs = dict(
        model=params.model,
        data_dir=ds_dict,
        dataset_type=params.dataset_type,
        work_dir=params.output_dir,
        batch_bins=params.batch_bins,
        max_epoch=params.max_epoch,
        lr=params.lr,
        #UnicodeEncodeError = 
        # encoding = "utf-8"
        )
    trainer = build_trainer(Trainers.speech_asr_trainer, default_args=kwargs)
    trainer.train()


if __name__ == '__main__':
    from funasr.utils.modelscope_param import modelscope_args
    params = modelscope_args(model='damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404')
    params.output_dir = "./checkpoint"                      # 模型保存路径
    params.data_path = "speech_asr_aishell1_trainsets"      # 数据路径,可以为modelscope中已上传数据,也可以是本地数据
    # params.data_path = "./data/example_data"      # 数据路径,可以为modelscope中已上传数据,也可以是本地数据
    # params.data_path = 'datatang/205People_MandarinSpeechDatainNoisyEnvironmentByMobilePhone'
    params.dataset_type = "small"                           # 小数据量设置small,若数据量大于1000小时,请使用large
    params.batch_bins = 2000                                # batch size,如果dataset_type="small",batch_bins单位为fbank特征帧数,如果dataset_type="large",batch_bins单位为毫秒,
    params.max_epoch = 5                                   # 最大训练轮数
    params.lr = 0.00005                                     # 设置学习率

    modelscope_finetune(params)

展开
收起
aliyun4508294211 2023-09-22 10:19:53 234 0
5 条回答
写回答
取消 提交回答
  • 这个报错后续有 模型配置文件编码不对,数据集文件编码不对,以及最重要的FunASR库 报 os.uname不存在。

    综上,个人判断是不适合直接在win10上经行模型微调。

    最后解决方案:换平台为 win10+decoker,用官方镜像。

    2023-10-12 11:08:34
    赞同 展开评论 打赏
  • 根据你提供的错误信息,'utf-8' codec can't decode,这通常是由于尝试使用UTF-8编码解码非UTF-8编码的数据导致的。在模型训练过程中,这可能涉及到读取或写入文件、处理文本数据等操作。

    以下是一些可能的原因和解决方案:

    文件编码问题:如果你正在读取或写入的文件不是UTF-8编码,那么解码时就会出现问题。
    解决方案:确定文件的正确编码,并在读取或写入文件时指定正确的编码。例如,如果你知道文件是使用GBK编码,你可以使用open(file, 'r', encoding='gbk')来读取文件。
    文本数据处理:如果你在处理文本数据(例如从网页抓取数据)时遇到这个问题,可能是因为抓取的数据包含非UTF-8字符。
    解决方案:在处理文本之前,确保文本是UTF-8编码。如果抓取的数据不是UTF-8编码,尝试转换编码或者清洗掉非UTF-8字符。
    外部依赖库或数据源问题:如果你从外部库或数据源获取数据,可能是他们提供的数据不正确。
    解决方案:检查外部数据源或库是否提供正确编码的数据。如果不确定,可以尝试使用不同的数据源或自己生成数据来测试。
    内部数据处理:如果在模型训练过程中涉及到数据处理步骤,可能是数据本身存在问题。
    解决方案:检查你的数据处理步骤,确保没有出现编码问题。如果可能的话,尝试将数据处理为基本ASCII字符集,看是否还有问题。
    其他库或工具的影响:如果你使用了其他库或工具,它们可能会影响数据的编码。
    解决方案:检查你使用的所有库和工具,确保它们没有引入编码问题。如果可能的话,尝试简化你的代码,去掉不必要的库或工具,然后逐步添加回来以找出问题所在。

    请根据你的具体情况检查上述可能的原因,并根据相应的解决方案尝试修复问题。

    2023-09-23 12:22:58
    赞同 1 展开评论 打赏
  • 数据集编码问题:数据集中包含非UTF-8编码的字符,导致模型训练时出现错误。解决方法是将数据集转换为UTF-8编码。

    模型训练代码问题:模型训练代码中可能包含非UTF-8编码的字符,导致模型训练时出现错误。解决方法是检查代码中的字符编码,并将其设置为UTF-8编码。

    系统环境问题:系统环境中的字符编码设置不正确,导致模型训练时出现错误。解决方法是检查系统环境中的字符编码设置,并将其设置为UTF-8编码。

    2023-09-22 18:00:20
    赞同 1 展开评论 打赏
  • 如果在使用ModelScope训练模型时出现'utf-8' codec can't decode的错误,这通常是由于输入数据中包含无法解码为UTF-8格式的字符引起的。下面是一些可能的解决方法:

    1. 检查输入数据的编码:确保输入数据是以正确的编码方式保存和加载的。UTF-8是一种常见的Unicode编码方式,但并不是所有数据都以UTF-8编码保存。尝试使用适当的编码方式重新加载数据。

    2. 处理特殊字符:如果输入数据中包含特殊或非标准字符,可能会导致解码错误。尝试将这些字符转换为合适的编码或删除它们,以避免解码问题。

    3. 使用try-except块处理异常:在代码中使用try-except块可以捕获解码错误,并提供相关的错误处理逻辑。这样可以防止程序因解码错误而崩溃,并输出有关错误的更详细的信息。

    示例代码:

    try:
        # 你的训练代码
        # ...
    except UnicodeDecodeError as e:
        print("解码错误:", e)
        # 其他错误处理逻辑
    
    1. 修改默认编码设置:在某些情况下,修改Python的默认编码设置也可能解决解码问题。你可以尝试在代码的开头添加以下行来修改默认编码设置:
      import sys
      sys.setdefaultencoding('utf-8')
      
      请注意,修改默认编码设置可能会对其他部分的代码产生意想不到的影响,因此请谨慎使用。
    2023-09-22 17:43:09
    赞同 1 展开评论 打赏
  • 全栈JAVA领域创作者

    根据您提供的错误信息,这个问题可能是由于数据集中包含非ASCII字符引起的。在您的代码中,您已经尝试了使用GBK和UTF-8编码进行解码,但是都失败了。建议您尝试使用其他编码方式进行解码,例如GB2312或者其他适合您数据集的编码方式。同时,您也可以尝试在数据预处理的过程中对非ASCII字符进行处理,例如使用正则表达式将其替换为空格或者其他合适的字符。希望这些方法能够帮助您解决问题。

    2023-09-22 13:09:48
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
视觉AI能力的开放现状及ModelScope实战 立即下载
ModelScope助力语音AI模型创新与应用 立即下载
低代码开发师(初级)实战教程 立即下载