data_processes/p3_words_embedder.py
2025-08-16 14:24:11 +03:30

57 lines
2.6 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
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
def single_section_embedder(sentence):
"""
این متد، متن ورودی را تبدیل به بردار متناظر آن می کند
**Args:
sentence (str): متن یک سکشن
**Returns:
embeddings: لیست بردار متناظر با متن ورودی
"""
embeddings = model.encode(sentence)
return embeddings
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}')