--- license: apache-2.0 datasets: - truro7/vn-law-questions-and-corpus language: - vi base_model: hiieu/halong_embedding library_name: sentence-transformers metrics: - cosine_accuracy@1 - cosine_accuracy@3 - cosine_accuracy@5 - cosine_accuracy@10 - cosine_precision@1 - cosine_precision@3 - cosine_precision@5 - cosine_precision@10 - cosine_recall@1 - cosine_recall@3 - cosine_recall@5 - cosine_recall@10 - cosine_ndcg@10 - cosine_mrr@10 - cosine_map@100 pipeline_tag: sentence-similarity tags: - legal - sentence-transformers - sentence-similarity - feature-extraction - generated_from_trainer - loss:MatryoshkaLoss - loss:MultipleNegativesRankingLoss model-index: - name: VN Law Embedding results: - task: type: information-retrieval name: Information Retrieval metrics: - type: cosine_accuracy@1 value: 0.623 name: Cosine Accuracy@1 - type: cosine_accuracy@3 value: 0.792 name: Cosine Accuracy@3 - type: cosine_accuracy@5 value: 0.851 name: Cosine Accuracy@5 - type: cosine_accuracy@10 value: 0.900 name: Cosine Accuracy@10 - type: cosine_precision@1 value: 0.623 name: Cosine Precision@1 - type: cosine_precision@3 value: 0.412 name: Cosine Precision@3 - type: cosine_precision@5 value: 0.310 name: Cosine Precision@5 - type: cosine_precision@10 value: 0.184 name: Cosine Precision@10 - type: cosine_recall@1 value: 0.353 name: Cosine Recall@1 - type: cosine_recall@3 value: 0.608 name: Cosine Recall@3 - type: cosine_recall@5 value: 0.722 name: Cosine Recall@5 - type: cosine_recall@10 value: 0.823 name: Cosine Recall@10 - type: cosine_ndcg@10 value: 0.706 name: Cosine Ndcg@10 - type: cosine_mrr@10 value: 0.717 name: Cosine Mrr@10 - type: cosine_map@100 value: 0.645 name: Cosine Map@100 --- # VN Law Embedding VN Law Embedding is a Vietnamese text embedding model designed for Retrieval-Augmented Generation (RAG), specifically to retrieve precise legal documents in response to legal questions. The model is trained on a dataset of Vietnamese legal questions and corresponding legal documents and evaluated using an Information Retrieval Evaluator. It uses Matryoshka loss during training and can be truncated to smaller dimensions, allowing for faster comparisons between queries and documents without sacrificing performance. # Usage ## Direct usage ```python from sentence_transformers import SentenceTransformer import torch import torch.nn.functional as F model = SentenceTransformer("truro7/vn-law-embedding", truncate_dim = 128) query = "Trộm cắp sẽ bị xử lý như thế nào?" corpus = """ [100_2015_QH13] LUẬT HÌNH SỰ Điều 173. Tội trộm cắp tài sản Khoản 1: 1. Người nào trộm cắp tài sản của người khác trị giá từ 2.000.000 đồng đến dưới 50.000.000 đồng hoặc dưới 2.000.000 đồng nhưng thuộc một trong các trường hợp sau đây, thì bị phạt cải tạo không giam giữ đến 03 năm hoặc phạt tù từ 06 tháng đến 03 năm: a) Đã bị xử phạt vi phạm hành chính về hành vi chiếm đoạt tài sản mà còn vi phạm; b) Đã bị kết án về tội này hoặc về một trong các tội quy định tại các điều 168, 169, 170, 171, 172, 174, 175 và 290 của Bộ luật này, chưa được xóa án tích mà còn vi phạm; c) Gây ảnh hưởng xấu đến an ninh, trật tự, an toàn xã hội; d) Tài sản là phương tiện kiếm sống chính của người bị hại và gia đình họ; tài sản là kỷ vật, di vật, đồ thờ cúng có giá trị đặc biệt về mặt tinh thần đối với người bị hại. """ embedding = torch.tensor([model.encode(query)]) corpus_embeddings = torch.tensor([model.encode(corpus)]) cosine_similarities = F.cosine_similarity(embedding, corpus_embeddings) print(cosine_similarities.item()) #0.81 ``` ## Retrieve top k documents ```python from sentence_transformers import SentenceTransformer import torch import torch.nn.functional as F model = SentenceTransformer("truro7/vn-law-embedding", truncate_dim = 128) all_docs = read_all_docs() # Read all legal documents -> list of document contents top_k = 3 embedding_docs = torch.load(vectordb_path, weights_only=False).to(self.device) # Vector database query = "Trộm cắp sẽ bị xử lý như thế nào?" embedding = torch.tensor(model.encode(query)) cosine_similarities = F.cosine_similarity(embedding.unsqueeze(0).expand(self.embedding_docs.shape[0], 1, 128), self.embedding_docs, dim = -1).view(-1) top_k = cosine_similarities.topk(k) top_k_indices = top_k.indices top_k_values = top_k.values print(top_k_values) #Similarity scores for i in top_k_indices: #Show top k relevant documents print(all_docs[i]) print("___________________________________________") ```