File size: 1,818 Bytes
b77c0a2
 
 
01ae535
b77c0a2
 
 
 
 
01ae535
b77c0a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
01ae535
b77c0a2
 
 
 
 
 
 
 
 
 
 
 
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import pickle
from config import (
    MODEL_NAME, 
    SENTENCE_EMBEDDING_FILE,  
    SAMPLE_DATA_FILE, SUBJECT_DATA_FILE
)
from sentence_transformer_lib.sentence_transformer_helper import SentenceTransformerHelper
from data_lib.subject_data import SubjectData
from data_lib.sample_name_data import SampleNameData


class SentenceTransformerService:
    def __init__(self):
        self.sentenceTransformerHelper = None
        self.dic_standard_subject = None
        self.sample_name_sentence_embeddings = None
        self.sampleData = None

    def load_model_data(self):
        """Load model and data only once at startup"""
        if self.sentenceTransformerHelper is not None:
            print("Model already loaded. Skipping reload.")
            return  # Không load lại nếu đã có model

        print("Loading models and data...")
        # Load sentence transformer model
        self.sentenceTransformerHelper = SentenceTransformerHelper(
            convert_to_zenkaku_flag=True, replace_words=None, keywords=None
        )
        self.sentenceTransformerHelper.load_model_by_name(MODEL_NAME)

        # Load standard subject dictionary
        self.dic_standard_subject = SubjectData.create_standard_subject_dic_from_file(SUBJECT_DATA_FILE)

        # Load pre-computed embeddings and similarities
        with open(SENTENCE_EMBEDDING_FILE, "rb") as f:
            self.sample_name_sentence_embeddings = pickle.load(f)

        # Load and process sample data
        self.sampleData = SampleNameData()
        self.sampleData.load_data_from_csv(SAMPLE_DATA_FILE)
        self.sampleData.process_data()
        self.sampleData.build_search_tree()

        print("Models and data loaded successfully")

# Global instance (singleton)
sentence_transformer_service = SentenceTransformerService()