GCP AI平台自定义预测例程无法下载nltk资源

时间:2020-06-22 17:44:26

标签: google-cloud-platform nltk google-cloud-ml

我为电子邮件分类程序创建了自定义预测例程。在预处理时,我正在使用nltk。模型创建成功,但是当我发送请求时,GCP无法下载所需的nltk文件。当我的预处理文件是这样的

import nltk

class MyPreprocess(object):
    def __init__(self):
        pass
    
    def to_sentences(self, text):
        sentences = nltk.sent_tokenize(text)

我遇到以下错误:

Resource [93mpunkt[0m not found.
Please use the NLTK Downloader to obtain the resource:
nltk.download('punkt')
Attempted to load [93mtokenizers/punkt/PY3/english.pickle[0m

如果我要在import语句后添加nltk.download('punkt'),则会收到另一个错误消息:

ERROR:root:Unexpected error when loading the model: problem in predictor - OSError: [Errno 30] Read-only file system: '/root/nltk_data'

1 个答案:

答案 0 :(得分:1)

更新:当前解决方案

显然,在ai平台模型中,工作目录为。该目录是只读的,您不能在此处下载任何内容。我只是将nltk punkt的下载路径更改为tmp,它可以正常工作。 nltk.download('punkt', download_dir='/tmp')

以前的临时解决方案

我做了一个临时的解决方法,但我不认为这是解决此问题的好方法:

在部署模型之前,我在本地下载了nltk punkt并找到了english.punkt文件。然后,在预处理代码中,我手动加载了它。

from nltk.data import load

class MyPreprocess(object):
    def __init__(self):
        self.nltk_tokenizer = load('english.punkt')
    
    def sentence_tokenizer(self, text):
        return self.nltk_tokenizer.tokenize(text)

通过这种方式,已经加载的令牌生成器将打包到pickle文件中,因此在部署期间无需下载punkt。