Использование TfidfVectorizer с Punkt в облачной функции - PullRequest
0 голосов
/ 26 января 2020

Мое текущее понимание TfidfVectorizer состоит в том, что требуется nltk.download("punkt") для запуска перед преобразованием входных данных, поскольку все токенизаторы по умолчанию доступны в punkt. В настоящее время, поскольку я использую TfidfVectorizer в своей облачной функции, я запускаю nltk.download("punkt") внутри контейнера облачной функции, который загружает punkt в /tmp. Моя проблема заключается в том, что я не могу гарантировать доступ к одному и тому же содержимому файловой системы при каждом вызове моей облачной функции Google, потому что «последующие вызовы той же функции иногда выполняются в другом контейнере, поэтому они будут иметь разные /tmp монтируется. Таким образом, вы не можете использовать /tmp для связи между функциями "(с этот вопрос ). Это приводит к необходимости повторной загрузки punkt при каждом переключении контейнера, и это отображается в журналах моей облачной функции.

Я попытался создать десериализованный токенайзер из english.pickle, который является частью punkt. Даже при передаче функции tokenize этого пользовательского токенизатора от tokenizer до TfidVectorizer преобразование входных данных позднее завершается неудачей из-за отсутствующей загрузки punkt.

Есть ли способ загрузить punkt в доступную память Python, чтобы он не сохранялся в файловой системе и не стирался при переключении контейнера? Похоже, мне нужно punkt для загрузки в файловую систему независимо от того, передам ли я пользовательский токенизатор или позволю TfidfVectorizer выбрать собственный токенайзер по умолчанию.

1 Ответ

1 голос
/ 26 января 2020

Вы, конечно, можете загрузить файлы в / tmp и ожидать их там для будущих вызовов функций , которые будут использовать тот же экземпляр сервера . У вас просто нет гарантии, какой экземпляр сервера будет использоваться для обработки любого данного события. Экземпляры сервера будут повторно использоваться, как сочтут целесообразными облачные функции, но они также могут освобождать экземпляр сервера без предупреждения.

Но вы можете просто проверить, присутствует ли нужный файл из предыдущего выполнения прежде чем что-либо делать. Если файл присутствует, загрузка не требуется - просто используйте файл. Если нет, выполните загрузку.

...