spacy在load模型时出现KeyError: 'PUNCTSIDE_FIN'的情况的解法方法

文章目录

  • 报错情况
  • 原因及解决方法
  • 参考文献

报错情况

Python 3.7.6 (default, Jan  8 2020, 19:59:22)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import spacy
>>> nlp = spacy.load('en_core_web_lg')
Traceback (most recent call last):
  File "", line 1, in <module>
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/__init__.py", line 21, in load
    return util.load_model(name, **overrides)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/util.py", line 114, in load_model
    return load_model_from_package(name, **overrides)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/util.py", line 135, in load_model_from_package
    return cls.load(**overrides)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/en_core_web_lg/__init__.py", line 12, in load
    return load_model_from_init_py(__file__, **overrides)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/util.py", line 173, in load_model_from_init_py
    return load_model_from_path(data_path, meta, **overrides)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/util.py", line 156, in load_model_from_path
    return nlp.from_disk(model_path)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/language.py", line 647, in from_disk
    util.from_disk(path, deserializers, exclude)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/util.py", line 511, in from_disk
    reader(path / key)
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/language.py", line 643, in <lambda>
    deserializers[name] = lambda p, proc=proc: proc.from_disk(p, vocab=False)
  File "pipeline.pyx", line 643, in spacy.pipeline.Tagger.from_disk
  File "/home/share/liuyibing/Anaconda3/envs/py3_torch_v1.4/lib/python3.7/site-packages/spacy/util.py", line 511, in from_disk
    reader(path / key)
  File "pipeline.pyx", line 632, in spacy.pipeline.Tagger.from_disk.load_tag_map
  File "morphology.pyx", line 56, in spacy.morphology.Morphology.__init__
  File "attrs.pyx", line 147, in spacy.attrs.intify_attrs
KeyError: 'PUNCTSIDE_FIN'

原因及解决方法

出现的原因是由于spacy版本与加载的模型(这里是en_core_web_lg)版本不兼容:具体可以check一下二者的版本,我这里spacy是2.0左右,en_core_web_lg是2.2左右

spacy                     2.0.12           py37h8300f20_0
spacy-model-en_core_web_lg 2.2.5                      py_0    conda-forge
spacy-model-en_core_web_sm 2.2.5                      py_0    conda-forge

上面引用自别人发布的版本情况,来着anaconda。其中spacy安装时没有指定channel为conda-forge,而我的en_core_web_lg都是通过anaconda在conda-forge下载,所以不一致。

解决方法也很简单,先把装好的spacy删了,再用conda指定在conda-forge下进行下载即可确保版本问题:

conda remove spacy
conda install -c conda-forge spacy

参考文献

  • https://stackoverflow.com/questions/60068824/how-to-resolve-keyerror-punktside-fin

你可能感兴趣的:(nlp)