data_processes/p3_words_embedder.py
2025-08-25 19:54:35 +03:30

80 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
ایجاد بردار جملات - امبدینگ
"""
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}')