python - 使用 spacy 加载自定义模型时出错

标签 python spacy msgpack

我正在尝试将名为“ru2”的自定义模型加载到 spacy 中(用于 npl 处理)。

可以在那里找到:https://github.com/buriy/spacy-ru

问题是当我调用该函数时

nlp = spacy.load('ru2')
doc = nlp(text)

我看到错误

C:\ProgramData\Anaconda3\lib\importlib\_bootstrap.py:205: RuntimeWarning: spacy.tokens.span.Span size changed, may indicate binary incompatibility. Expected 72 from C header, got 80 from PyObject
  return f(*args, **kwds)
Traceback (most recent call last):
  File "C://.../nlp/src/ie/main.py", line 125, in <module>
    main(examp_dict['Poroshenko'])
  File "C://.../nlp/src/ie/main.py", line 92, in main
    nlp = spacy.load('ru2')
  File "C:\ProgramData\Anaconda3\lib\site-packages\spacy\__init__.py", line 27, in load
    return util.load_model(name, **overrides)
  File "C:\ProgramData\Anaconda3\lib\site-packages\spacy\util.py", line 133, in load_model
    return load_model_from_path(Path(name), **overrides)
  File "C:\ProgramData\Anaconda3\lib\site-packages\spacy\util.py", line 173, in load_model_from_path
    return nlp.from_disk(model_path)
  File "C:\ProgramData\Anaconda3\lib\site-packages\spacy\language.py", line 791, in from_disk
    util.from_disk(path, deserializers, exclude)
  File "C:\ProgramData\Anaconda3\lib\site-packages\spacy\util.py", line 630, in from_disk
    reader(path / key)
  File "C:\ProgramData\Anaconda3\lib\site-packages\spacy\language.py", line 781, in <lambda>
    deserializers["tokenizer"] = lambda p: self.tokenizer.from_disk(p, exclude=["vocab"])
  File "tokenizer.pyx", line 391, in spacy.tokenizer.Tokenizer.from_disk
  File "tokenizer.pyx", line 432, in spacy.tokenizer.Tokenizer.from_bytes
  File "C:\ProgramData\Anaconda3\lib\site-packages\spacy\util.py", line 606, in from_bytes
    msg = srsly.msgpack_loads(bytes_data)
  File "C:\ProgramData\Anaconda3\lib\site-packages\srsly\_msgpack_api.py", line 29, in msgpack_loads
    msg = msgpack.loads(data, raw=False, use_list=use_list)
  File "C:\ProgramData\Anaconda3\lib\site-packages\srsly\msgpack\__init__.py", line 60, in unpackb
    return _unpackb(packed, **kwargs)
  File "_unpacker.pyx", line 191, in srsly.msgpack._unpacker.unpackb
TypeError: unhashable type: 'list'

我在互联网上搜索类似的问题:

但这些解决方案都不适合我。

我用

  • msgpack==0.5.6(甚至按照上面链接中的建议降级)
  • spacy==2.1.4

最佳答案

这里来自 https://spacy.io/usage#troubleshooting

如果您正在训练模型、将它们写入磁盘并使用 git 对其进行版本控制,则在尝试在 Windows 环境中加载它们时可能会遇到此错误。发生这种情况是因为 Windows 版 Git 的默认安装被配置为在文件 checkout 期间自动将 Unix 样式的行尾字符 (LF) 转换为 Windows 样式的行尾字符 (CRLF)(提交时则相反)。虽然这对于文本文件来说基本上没问题,但写入磁盘的经过训练的模型有一些不应经过此转换的二进制文件。当他们这样做时,您会收到上面的错误。您可以通过将 core.autocrlf 设置更改为“false”来修复它,或者通过将 .gitattributes 文件提交到您的存储库来告诉 git 不应该对哪些文件或文件夹进行 LF 到 CRLF 转换,并使用条目如path/to/spacy/model/** -text。完成其中任一操作后,再次克隆您的存储库。

关于python - 使用 spacy 加载自定义模型时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56307701/

相关文章:

java - MsgPack第三方对象序列化

JavaScript 将缓冲区中的十六进制字符串与 Python 进行比较

compression - MsgPack用于压缩json数据,为什么不使用gzip/deflate?

python - 当我希望它随每个实例而改变时,我的循环不断重复相同的值

python-3.x - 使用 spacy 和 textacy。需要在原始推文的语料库中找到 tf-idf 分数,但无法导入 textacy vectorizer

python - 为什么 PyQt5 给我这个 TypeError

python-3.x - Python : Spacy and memory consumption

machine-learning - 如何训练 NER 识别单词不是实体?

python - 交互式 IPython 终端中连续运行的 Tensorflow Op 命名

python - 解析包含JSON和文本结构的txt文件中的JSON结构