Использование библиотеки Python ML для DJANGO APIView: загрузка модели при каждом запросе

Я пытаюсь использовать эту python ML библиотеку и превратить ее в APIView для моего проекта.

Хотя он работает должным образом, для получения ответа требуется около 20 секунд, в то время как ссылка huggingface выдает те же результаты за значительно меньшее время. Насколько я знаю, обнимающееся лицо работает на CPU, занимает ~20 секунд только при первой загрузке и затем только 1-2 секунды после этого.

Я думаю, что это может быть потому, что эта строка: kp_model = KeyPhraseTransformer() вызывается при каждом запросе, что не нужно, так как мне нужно инициировать объект только один раз.

Есть ли способ улучшить это?

services.py

from keyphrasetransformer import KeyPhraseTransformer

def extract_keyword(text):
    kp_model = KeyPhraseTransformer() 
    keyphrases = kp_model.get_key_phrases(text)
    return keyphrases

views.py

from .services import extract_keyword

class ExtractKeyphrase(APIView): def post(self, request, format=None): try: text = request.data["text"] keyphrases = extract_keyword(text) return JsonResponse(keyphrases, status=status.HTTP_200_OK, safe=False) except requests.exceptions.RequestException: Response("Request Failed", status=status.HTTP_400_BAD_REQUEST)

Решено использованием декоратора @lru_cache для части загрузки модели, которая занимала больше всего времени.

services.py

from functools import lru_cache
from keyphrasetransformer import KeyPhraseTransformer


@lru_cache(maxsize=2)
def load_model():
    kp_model = KeyPhraseTransformer()

    return kp_model


def extract_keyword(model, text):
    keyphrases = model.get_key_phrases(text)

    return keyphrases

views.py

from .services import load_model, extract_keyword

class ExtractKeyphrase(ApiAuthMixin, APIView):
    def post(self, request):
        try:
            text = request.data["text"]
            kp_model = load_model()
            keyphrases = extract_keyword(kp_model, text)

            return JsonResponse(keyphrases, status=status.HTTP_200_OK, safe=False)
        except requests.exceptions.RequestException:
            Response("Request Failed", status=status.HTTP_400_BAD_REQUEST)
Вернуться на верх