File size: 1,373 Bytes
bdbbcf1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from sentence_transformers.cross_encoder import CrossEncoder
import torch

class SimilarityModelHandler:
    # HOLDING THE MODEL INSTANCE TO PREVENT RELOADING
    SIMILARITY_MODEL_INSTANCE = None

    def __init__(self):
        # CONSTRUCTOR: LOADING THE MODEL IF IT DOESN'T EXIST
        if not SimilarityModelHandler.SIMILARITY_MODEL_INSTANCE:
            print("INITIALIZING AND LOADING THE MODEL...")
            # CHECKING FOR GPU, FALLBACK TO CPU
            device = 'cuda' if torch.cuda.is_available() else 'cpu'
            print(f"SERVICE IS RUNNING ON DEVICE: {device}")
            
            # LOADING THE PRE-TRAINED CROSS-ENCODER MODEL
            model_Name = 'cross-encoder/stsb-roberta-large'
            SimilarityModelHandler.SIMILARITY_MODEL_INSTANCE = CrossEncoder(model_Name, device=device)
            print("MODEL LOADED SUCCESSFULLY.")

    def calculate_Similarity(self, text_One: str, text_Two: str) -> float:
        """

        CALCULATES THE SIMILARITY SCORE BETWEEN TWO TEXTS.

        """
        # GETTING THE SCORE FROM THE MODEL( 0-1 )
        finalScore = self.SIMILARITY_MODEL_INSTANCE.predict([(text_One, text_Two)])

        # CONVERTING FROM NUMPY ARRAY TO A SIMPLE FLOAT
        return finalScore.item()


# CREATING A SINGLE INSTANCE TO BE USED BY THE API
MODEL_HANDLER = SimilarityModelHandler()