""" ایجاد بردار جملات - امبدینگ """ from sentence_transformers import SentenceTransformer from fastapi import FastAPI import json import datetime import numpy as np date = datetime.datetime.now() today = f'{date.year}-{date.month}-{date.day}-{date.hour}' model_name = 'sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2'#89-25 # model_name = 'sentence-transformers/paraphrase-multilingual-mpnet-base-v2'#87-30 # model_name = 'sharif-dal/dal-bert'#90-41 # model_name = 'lifeweb-ai/shiraz'#97-67 # model_name = 'BAAI/bge-m3'#90-35 # model_name = 'jinaai/jina-embeddings-v3'#?? # model_name = 'jinaai/jina-embeddings-v4'#?? # model_name = 'HooshvareLab/bert-base-parsbert-uncased'#90-54 model = SentenceTransformer(model_name) def do_word_embedder(sections): for index, id in enumerate(sections): embeddings = single_section_embedder(sections[id]['content']) sections[id]['embeddings'] = embeddings.tolist() with open(f'./data/embeddings/sections_embeddings_{today}.json', 'w', encoding='utf-8') as output_file: data = json.dumps(sections, ensure_ascii=False) output_file.write(data) return sections # Create a FastAPI app instance # یک نمونه از برنامه FastAPI ایجاد می‌کنیم app = FastAPI() # Your method, wrapped in an API endpoint # متد شما که در یک نقطه پایانی API قرار گرفته @app.post("/single_section_embedder/") def single_section_embedder(sentence: str): """ این نقطه پایانی، متن ورودی را تبدیل به بردار متناظر آن می کند. **Args:** sentence (str): متن یک سکشن **Returns:** list: لیست بردار متناظر با متن ورودی """ # Use the loaded model to encode the sentence # برای تبدیل متن به بردار از مدلی که در بالا لود شده استفاده می‌کنیم embeddings = model.encode(sentence) # The output of model.encode is a NumPy array, which needs to be converted # to a list to be returned as a JSON response. # خروجی model.encode یک آرایه NumPy هست که باید به لیست تبدیل بشه # تا به عنوان یک پاسخ JSON برگردانده بشه. return {"embeddings": embeddings.tolist()} def cosine_similarity(vec1, vec2): dot_product = np.dot(vec1, vec2) # ضرب داخلی دو بردار norm_vec1 = np.linalg.norm(vec1) # نُرم بردار اول norm_vec2 = np.linalg.norm(vec2) # نُرم بردار دوم return dot_product / (norm_vec1 * norm_vec2) if __name__ == '__main__': embd1 = single_section_embedder("۲ – درصد مشارکت و سهم پرداختی کارفرما نسبت به مأخذ کسر حق بیمه به صندوقهای فعال در سطح همگانی بیمههای اجتماعی و درمانی یکسان خواهد بود.") embd2 = single_section_embedder("۳ – درصد مشارکت و سهم پرداختی بیمهشده نسبت به مأخذ کسر حق بیمه به صندوقهای فعال در سطح همگانی بیمههای اجتماعی و درمانی یکسان خواهد بود.") # embd2 = get_sentence_embeddings("تو کم گذاشتی وگرنه شکست نمی خوردی") similarity = cosine_similarity(embd1, embd2) print(f'similarity: {similarity}')