我为电子邮件分类程序创建了自定义预测例程。在预处理时,我正在使用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'
答案 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。