ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

spaCy 在 Windows 的 Git 环境加载模型时出现 “unhashable type: list“ 怎么排查?

spaCy 在 Windows 的 Git 环境加载模型时出现 “unhashable type: list“ 怎么排查? spaCy 在 Windows 的 Git 环境加载模型时出现 unhashable type: list 怎么排查【免费下载链接】spaCy Industrial-strength Natural Language Processing (NLP) in Python项目地址: https://gitcode.com/GitHub_Trending/sp/spaCy如果你训练了一个 spaCy 模型把它写到磁盘后用 git 做版本管理然后在 Windows 环境下使用 Git for Windows尝试加载这个模型加载时可能会抛出TypeError: unhashable type: list这条报错并不是模型本身训练失败或代码写错而是 git 在 checkout 文件时改动了指向 Windows 的换行符破坏了模型里的二进制文件。本文说明如何确认这是不是你遇到的问题以及如何修复。完整原文参见安装文档的 Troubleshooting guide。先判断是否属于这一类问题官方排查指南对这个错误给出了明确的适用条件。只有当以下情况同时成立时才走本文的修复路径你训练了模型并将其写到磁盘上该模型目录被纳入git 版本管理你使用的是Windows 环境且 git 是 Git for Windows 的默认安装报错发生在加载模型这一步。原因链条是这样的Git for Windows 的默认配置会在 checkout 文件时自动把 Unix 风格的换行符LF转成 Windows 风格的CRLF提交时再转回去。对文本文件这基本无害但训练好的模型写到磁盘后包含一些不应经过这种转换的二进制文件——一旦这些二进制文件被 LF/CRLF 转换处理过加载时就会得到unhashable type: list。如果你的场景不满足上述条件例如模型并没有经过 git 仓库流转、或加载的是通过python -m spacy download安装的预训练管线包那么这不是本问题的成因需要回到其他排查条目。修复方式一关闭 git 的 CRLF 自动转换把core.autocrlf设置为false。对应的 git 命令为git config core.autocrlf false注意这是修改 git 的配置项只改变 checkout/commit 时的换行符转换行为不会删除或改写你仓库中已有的文件。它作用于执行该命令的机器上的 git 配置属于本机层面的修复。修复方式二在仓库中提交 .gitattributes 文件另一种做法是把一个.gitattributes文件提交到仓库里明确告诉 git 哪些文件或目录不做 LF 转 CRLF。文档给出的条目写法是path/to/spacy/model/** -text其中path/to/spacy/model/是占位路径需要你替换成自己仓库中模型目录的实际相对路径模型通过nlp.to_disk保存后的那个目录-text表示该目录下的文件不做文本换行转换。两种方式的区别在于作用范围改core.autocrlf是本地 git 配置只影响当前机器提交.gitattributes是写进仓库的内容对后续所有 clone 该仓库的人生效。如果模型仓库只有你一个人用方式一即可如果是团队共享的仓库方式二更能保证其他成员 checkout 后也不会复现这个问题。验证重新 clone 后再加载无论你选了哪种方式官方文档都要求做同一步收尾修改完成后把仓库重新 clone 一遍原来的 checkout 副本里已经被转换过的文件不会自动恢复需要重新拉取。然后按原来的方式加载模型确认不再抛出TypeError: unhashable type: list。加载入口与 spaCy 常规的模型加载一致例如从本地目录加载import spacy # 换成你仓库中模型目录的实际路径 nlp spacy.load(/path/to/model)能正常拿到nlp对象、继续处理文本说明二进制文件已经完整还原。模型保存/加载的更多细节可以参考 Saving and loading。限制与边界该报错只在「训练 → 写盘 → git 版本管理 → Windows 环境加载」这条链路上才会出现其他环境下出现同样的报错信息时应按其他原因排查。修复必须在重新 clone 之后才生效在旧的 checkout 目录上直接改配置不会让已被转换的文件恢复原样。.gitattributes中的路径要覆盖模型目录下所有文件文档示例用**通配整个目录漏写子目录仍会导致同样的问题。【免费下载链接】spaCy Industrial-strength Natural Language Processing (NLP) in Python项目地址: https://gitcode.com/GitHub_Trending/sp/spaCy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表