【问题标题】:Spacy fails to load model : en_core_web_md in Azure databricksSpacy 无法加载模型:Azure 数据块中的 en_core_web_md
【发布时间】:2020-11-19 15:59:26
【问题描述】:

因此 spacy 似乎已成功安装在 Azure databricks 集群中的 Notebooks 中使用。

%sh python -m spacy 下载 en_core_web_md

然后我在单元格中使用以下命令对其进行验证

%sh

python -m spacy validate

这将返回以下结果:

⠙ 正在加载兼容性表... ✔ 加载兼容性表

======================= 已安装型号(spaCy v2.3.2)================= ===== ℹ spaCy 安装: /databricks/conda/envs/databricks-ml/lib/python3.7/site-packages/spacy

类型名称型号版本
包 en-core-web-md en_core_web_md 2.3.1 ✔

因此中型英文模型出现加载。 但是在运行此命令时

nlp = spacy.load("en_core_web_md")

出现以下错误信息:

OSError:[E050] 找不到模型“en_core_web_md”。它似乎不是快捷链接、Python 包或数据目录的有效路径。

【问题讨论】:

    标签: azure model databricks spacy azure-databricks


    【解决方案1】:

    您可以按照以下步骤在 Azure Databricks 上安装和加载 spaCy 包。

    第一步:使用 pip 安装 spaCy 并下载 spaCy 模型。

    %sh
    /databricks/python3/bin/pip install spacy 
    /databricks/python3/bin/python3 -m spacy download en_core_web_sm
    

    笔记本输出:

    第 2 步:使用 spaCy 运行示例。

    import spacy
    
    # Load English tokenizer, tagger, parser, NER and word vectors
    nlp = spacy.load("en_core_web_sm")
    
    # Process whole documents
    text = ("When Sebastian Thrun started working on self-driving cars at "
            "Google in 2007, few people outside of the company took him "
            "seriously. “I can tell you very senior CEOs of major American "
            "car companies would shake my hand and turn away because I wasn’t "
            "worth talking to,” said Thrun, in an interview with Recode earlier "
            "this week.")
    doc = nlp(text)
    
    # Analyze syntax
    print("Noun phrases:", [chunk.text for chunk in doc.noun_chunks])
    print("Verbs:", [token.lemma_ for token in doc if token.pos_ == "VERB"])
    
    # Find named entities, phrases and concepts
    for entity in doc.ents:
        print(entity.text, entity.label_)
    

    笔记本输出:

    【讨论】:

      【解决方案2】:

      我解决了这个问题:

      在 Databricks 中定义 Spacy 库,确保不选择自动安装 蓝色的 spacy 链接应指向以下内容:https://pypi.org/project/spacy/

      启动版本 7 ML 集群。一旦开始。 导航到库并手动选择并单击集群上的安装。

      现在打开笔记本并运行单元格,

      %sh
      
      pip install 'jsonschema>=2.6.0,<3.1.0'
      

      在下一个单元格运行中

      %sh
      
      python -m spacy validate
      

      这证实 Spacy 存在于集群上但没有模型

      在下一个单元中安装模型

      %sh
      
       python -m spacy download en_core_web_md
      

      验证模型现已存在。

      %sh
      
      python -m spacy validate
      

      在下一个单元格中运行以下导入 python 代码

      import spacy
      
      import json
      

      8 .在下一个单元格运行并加载(在我的情况下)中等大小的英语模型中,您可能正在为您的应用程序加载和运行不同大小的模型和语言。具体名称请参见 Spacy 网站。

      nlp = spacy.load("en_core_web_md")
      

      9 .最后,失败的代码现在可以工作了。

      稍后,之前出错的代码现在可以工作了。

      row_step =20
      ALL_DATA = []
      for i  in  range (0,df.shape[0] , row_step) :
      
          start_pos = i 
          end_pos   = i  + row_step  
          print(f'{start_pos}   {end_pos}')
          text_tmp_ls   = df.iloc[start_pos:end_pos]['text'].to_list()
      
          ALL_DATA_tmp     = [parse_train_data_sorted(d) for d in nlp.pipe(text_tmp_ls) ]
          ALL_DATA = ALL_DATA  + ALL_DATA_tmp
          print(f'length ALL_DATA : {len(ALL_DATA)}')
      

      现在 Spacy 正在逐步遍历文本列表,并使用 Matcher 一次处理列表中的 20 个项目的子集来查找实体。这避免了内存泄露是一种方便的技术..

      我相信所有 shell pip 命令都应该在任何可能依赖于它们的 python 导入之前运行。

      【讨论】:

      • 很高兴知道您的问题已解决。您可以接受它作为答案(单击答案旁边的复选标记以将其从灰色切换为填充)。这对其他社区成员可能是有益的。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 2020-09-05
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多