Как правильно загрузить и использовать модель word2vec в веб-приложении через Flask RESTful API?

Я создал небольшой код для поиска аналогий с помощью word2vec, и он отлично работает как отдельное приложение. Вот рабочий код

import numpy as np

# Get the interactive Tools for Matplotlib
%matplotlib notebook


from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
import os
glove_file = os.path.abspath('glove.6B/glove.6B.100d.txt')
word2vec_glove_file = get_tmpfile("glove.6B.100d.word2vec.txt")
glove2word2vec(glove_file, word2vec_glove_file)
model = KeyedVectors.load_word2vec_format(word2vec_glove_file)
def analogy(x1, x2, y1):
    result = model.most_similar(positive=[y1, x2], negative=[x1])
    return result[0][0]
analogy('woman', 'queen', 'man')    

Теперь я планирую использовать flask для создания небольшого веб-приложения, чтобы пользователи могли находить аналогии через веб-страницу. Для этого у меня есть основной вопрос

  1. Я предполагаю, что мне нужно сохранить модель, а затем загрузить ее при запуске сервера. Пожалуйста, поправьте меня, я ошибаюсь.

Вот код, который работает с использованием Flask, но не могли бы вы предложить, требуется ли здесь сохранение модели? 2. Любые предложения по улучшению этого кода приветствуются!

import numpy as np



from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
import os 

from flask import Flask, request


app = Flask(__name__)
@app.route("/", methods=['GET'])
def welcome():
    return "Welcome to our Machine Learning REST API!"
@app.route("/analogy", methods=['GET'])
def analogy_route():
    word1 = request.args.get("word1")
    word2 = request.args.get("word2")
    word3 = request.args.get("word3")
    result = model.most_similar(positive=[word3, word2], negative=[word1])
    return str(result[0][0])
if __name__ == "__main__":
    glove_file = os.path.abspath('glove.6B/glove.6B.100d.txt')
    word2vec_glove_file = get_tmpfile("glove.6B.100d.word2vec.txt")
    glove2word2vec(glove_file, word2vec_glove_file)

    model = KeyedVectors.load_word2vec_format(word2vec_glove_file)
    app.run(host='0.0.0.0', port=5000, debug=True)

Новые приложения с использованием ChatGPT
Новые приложения с использованием ChatGPT
Я собираюсь вернуться к теме, которую уже освещал ранее, - чатгпт.
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
0
0
483
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы, вероятно, не хотите выполнять преобразование формата GLoVe в word2vec во временный файл каждый раз при запуске службы. (Вероятно, это занимает заметное количество времени и может привести к заполнению временного каталога избыточными копиями одних и тех же данных.)

Вместо этого выполните преобразование только один раз, во временное местоположение. Затем полностью игнорируйте исходный файл glove.6B.100d.txt — он больше не нужен. Вместо этого просто убедитесь, что преобразованный файл доступен для вашей веб-службы в стабильном месте.

Очень грубо это означает:

  1. Запустите один раз в любом месте:
glove2word2vec('glove.6B/glove.6B.100d.txt', `glove.6B.100d.word2vec.txt`)

(Обратите внимание, что использование absfile() вместо get_tmpfile() не является строго обязательным — вы можете указать пути к строке непосредственно в функцию glove2word2vec().)

  1. Убедитесь, что новый файл glove.6B.100d.word2vec.txt доступен в рабочем каталоге вашего веб-сервиса.

  2. Пусть ветка __main__ вашего веб-сервиса просто загрузит уже преобразованный файл, избегая избыточной повторной работы по преобразованию:

if __name__ == "__main__":
    model = KeyedVectors.load_word2vec_format('glove.6B.100d.word2vec.txt')
    app.run(host='0.0.0.0', port=5000, debug=True)

(Точный путь 'glove.6B.100d.word2vec.txt' может немного отличаться в зависимости от того, куда вы решите поместить полный файл.)

Другие вопросы по теме