spaCy 对于es-core-web-sm的配置验证错误,

tgabmvqs  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(66)

如何重现行为

使用西班牙语模型es-core-web-sm训练NER模型,并使用cloudpickle.dumps()将管道保存。在反序列化时,通过.get("config")方法出现以下错误。

Bad value substitution: option 'width' in section 'components.morphologizer.model.tok2vec' contains an interpolation key 'components.tok2vec.model.encode:width' which is not a valid option name. Raw value: '${components.tok2vec.model.encode:width}'

在检查模型初始化时的配置时,'${components.tok2vec.model.encode:width}'是mophologizer组件中的tok2vec宽度选项。这似乎只适用于西班牙语模型,英语模型的宽度为96。

您的环境

  • 操作系统:Windows 11
  • Python版本:3.10
  • spaCy版本:3.7.2
  • 环境信息:
kh212irz

kh212irz1#

这个问题似乎是由于西班牙语模型(es-core-web-sm)与英语模型(en-core-web-sm)在处理组件配置方面的方式不同,尤其是在morphologizer组件中设置宽度参数的方式不同。

以下是一些可能帮助您的步骤:

  1. 验证并更新Spacy版本
  2. 正确加载和保存模型
    示例代码:
import spacy

# Load the Spanish model
nlp = spacy.load("es_core_news_sm")

# Save the model to a directory
nlp.to_disk("path/to/model")

# Load the model from the directory
nlp = spacy.load("path/to/model")
  1. 处理配置插值:使用cloudpickle进行序列化和反序列化,手动处理配置插值以避免错误。
    示例代码:
import spacy
import cloudpickle

# Load the model
nlp = spacy.load("es_core_news_sm")

# Extract the config and resolve interpolation keys
config = nlp.config.interpolate()

# Serialize the model with resolved config
serialized_nlp = cloudpickle.dumps(nlp)

# Deserialize the model
nlp = cloudpickle.loads(serialized_nlp)

# Update the config after deserialization to resolve any issues
nlp.config = config
  1. 验证和调试配置
    希望这对您有所帮助,谢谢!

相关问题