--- base_model: intfloat/multilingual-e5-base datasets: [] language: - vi - en library_name: sentence-transformers license: apache-2.0 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: - sentence-transformers - sentence-similarity - feature-extraction - generated_from_trainer - loss:MatryoshkaLoss - loss:MultipleNegativesRankingLoss widget: - source_sentence: Bóng đá có lợi ích gì cho sức khỏe? sentences: - Bóng đá giúp cải thiện sức khỏe tim mạch và tăng cường sức bền. - Bóng đá là môn thể thao phổ biến nhất thế giới. - Bóng đá có thể giúp bạn kết nối với nhiều người hơn. model-index: - name: Halong Embedding results: - task: type: information-retrieval name: Information Retrieval dataset: name: dim 768 type: dim_768 metrics: - type: cosine_accuracy@1 value: 0.8294209702660407 name: Cosine Accuracy@1 - type: cosine_accuracy@3 value: 0.9233176838810642 name: Cosine Accuracy@3 - type: cosine_accuracy@5 value: 0.9436619718309859 name: Cosine Accuracy@5 - type: cosine_accuracy@10 value: 0.9687010954616588 name: Cosine Accuracy@10 - type: cosine_precision@1 value: 0.8294209702660407 name: Cosine Precision@1 - type: cosine_precision@3 value: 0.3145539906103286 name: Cosine Precision@3 - type: cosine_precision@5 value: 0.1931142410015649 name: Cosine Precision@5 - type: cosine_precision@10 value: 0.09906103286384975 name: Cosine Precision@10 - type: cosine_recall@1 value: 0.8145539906103286 name: Cosine Recall@1 - type: cosine_recall@3 value: 0.9178403755868545 name: Cosine Recall@3 - type: cosine_recall@5 value: 0.9389671361502347 name: Cosine Recall@5 - type: cosine_recall@10 value: 0.9640062597809077 name: Cosine Recall@10 - type: cosine_ndcg@10 value: 0.8976041381292648 name: Cosine Ndcg@10 - type: cosine_mrr@10 value: 0.879893558884169 name: Cosine Mrr@10 - type: cosine_map@100 value: 0.8763179130484675 name: Cosine Map@100 --- # Halong Embedding Halong Embedding is a Vietnamese text embedding focused on RAG and production efficiency: - 📚 Trained on a in house dataset consist of approximately 100,000 examples of question and related documents - 🪆 Trained with a Matryoshka loss, allowing you to truncate embeddings with minimal performance loss: smaller embeddings are faster to compare. This is a [sentence-transformers](https://www.SBERT.net) model finetuned from [intfloat/multilingual-e5-base](https://huggingface.co/intfloat/multilingual-e5-base). It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more. ## Model Details ### Model Description - **Model Type:** Sentence Transformer - **Base model:** [intfloat/multilingual-e5-base](https://huggingface.co/intfloat/multilingual-e5-base) - **Maximum Sequence Length:** 512 tokens - **Output Dimensionality:** 768 tokens - **Similarity Function:** Cosine Similarity - **Language:** vi-focused, multilingual - **License:** apache-2.0 ### Model Sources - **Documentation:** [Sentence Transformers Documentation](https://sbert.net) - **Repository:** [Sentence Transformers on GitHub](https://github.com/UKPLab/sentence-transformers) - **Hugging Face:** [Sentence Transformers on Hugging Face](https://huggingface.co/models?library=sentence-transformers) ### Full Model Architecture ``` SentenceTransformer( (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: XLMRobertaModel (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True}) (2): Normalize() ) ``` ## Usage ### Direct Usage (Sentence Transformers) First install the Sentence Transformers library: ```bash pip install -U sentence-transformers ``` Then you can load this model and run inference. ```python from sentence_transformers import SentenceTransformer import torch # Download from the 🤗 Hub model = SentenceTransformer("hiieu/halong_embedding") # Define query and documents query = "Bóng đá có lợi ích gì cho sức khỏe?" docs = [ "Bóng đá giúp cải thiện sức khỏe tim mạch và tăng cường sức bền.", "Bóng đá là môn thể thao phổ biến nhất thế giới.", "Chơi bóng đá giúp giảm căng thẳng và cải thiện tâm lý.", "Bóng đá có thể giúp bạn kết nối với nhiều người hơn.", "Bóng đá không chỉ là môn thể thao mà còn là cách để giải trí." ] # Encode query and documents query_embedding = model.encode([query]) doc_embeddings = model.encode(docs) similarities = model.similarity(query_embedding, doc_embeddings).flatten() # Sort documents by cosine similarity sorted_indices = torch.argsort(similarities, descending=True) sorted_docs = [docs[idx] for idx in sorted_indices] sorted_scores = [similarities[idx].item() for idx in sorted_indices] # Print sorted documents with their cosine scores for doc, score in zip(sorted_docs, sorted_scores): print(f"Document: {doc} - Cosine Similarity: {score:.4f}") # Document: Bóng đá giúp cải thiện sức khỏe tim mạch và tăng cường sức bền. - Cosine Similarity: 0.7318 # Document: Chơi bóng đá giúp giảm căng thẳng và cải thiện tâm lý. - Cosine Similarity: 0.6623 # Document: Bóng đá không chỉ là môn thể thao mà còn là cách để giải trí. - Cosine Similarity: 0.6102 # Document: Bóng đá có thể giúp bạn kết nối với nhiều người hơn. - Cosine Similarity: 0.4988 # Document: Bóng đá là môn thể thao phổ biến nhất thế giới. - Cosine Similarity: 0.4828 ``` ### Matryoshka Embeddings Inference ```python from sentence_transformers import SentenceTransformer import torch.nn.functional as F import torch matryoshka_dim = 64 model = SentenceTransformer( "hiieu/halong_embedding", truncate_dim=matryoshka_dim, ) # Define query and documents query = "Bóng đá có lợi ích gì cho sức khỏe?" docs = [ "Bóng đá giúp cải thiện sức khỏe tim mạch và tăng cường sức bền.", "Bóng đá là môn thể thao phổ biến nhất thế giới.", "Chơi bóng đá giúp giảm căng thẳng và cải thiện tâm lý.", "Bóng đá có thể giúp bạn kết nối với nhiều người hơn.", "Bóng đá không chỉ là môn thể thao mà còn là cách để giải trí." ] # Encode query and documents query_embedding = model.encode([query]) doc_embeddings = model.encode(docs) similarities = model.similarity(query_embedding, doc_embeddings).flatten() # Sort documents by cosine similarity sorted_indices = torch.argsort(similarities, descending=True) sorted_docs = [docs[idx] for idx in sorted_indices] sorted_scores = [similarities[idx].item() for idx in sorted_indices] # Print sorted documents with their cosine scores for doc, score in zip(sorted_docs, sorted_scores): print(f"Document: {doc} - Cosine Similarity: {score:.4f}") # Document: Bóng đá giúp cải thiện sức khỏe tim mạch và tăng cường sức bền. - Cosine Similarity: 0.8045 # Document: Chơi bóng đá giúp giảm căng thẳng và cải thiện tâm lý. - Cosine Similarity: 0.7676 # Document: Bóng đá không chỉ là môn thể thao mà còn là cách để giải trí. - Cosine Similarity: 0.6758 # Document: Bóng đá có thể giúp bạn kết nối với nhiều người hơn. - Cosine Similarity: 0.5931 # Document: Bóng đá là môn thể thao phổ biến nhất thế giới. - Cosine Similarity: 0.5105 ``` ## Evaluation ### Metrics #### Information Retrieval * Dataset: [Zalo legal retrieval dataet](https://huggingface.co/datasets/hiieu/legal_eval_label) * *note*: We sampled 20% of the Zalo Legal train dataset for fast testing; our model did not train on this dataset. * Evaluated with [InformationRetrievalEvaluator](https://sbert.net/docs/package_reference/sentence_transformer/evaluation.html#sentence_transformers.evaluation.InformationRetrievalEvaluator) | Model | Accuracy@1 | Accuracy@3 | Accuracy@5 | Accuracy@10 | Precision@1 | Precision@3 | Precision@5 | Precision@10 | Recall@1 | Recall@3 | Recall@5 | Recall@10 | NDCG@10 | MRR@10 | MAP@100 | |----------------------|------------|------------|------------|-------------|-------------|--------------|--------------|---------------|-----------|-----------|-----------|------------|---------|--------|---------| | vietnamese-bi-encoder | 0.8169 | 0.9108 | 0.9437 | 0.9640 | 0.8169 | 0.3099 | 0.1931 | 0.0987 | 0.8020 | 0.9045 | 0.9390 | 0.9601 | 0.8882 | 0.8685 | 0.8652 | | sup-SimCSE-VietNamese-phobert-base | 0.5540 | 0.7308 | 0.7981 | 0.8748 | 0.5540 | 0.2473 | 0.1621 | 0.0892 | 0.5446 | 0.7246 | 0.7903 | 0.8693 | 0.7068 | 0.6587 | 0.6592 | | halong_embedding (768) | 0.8294 | 0.9233 | 0.9437 | 0.9687 | 0.8294 | 0.3146 | 0.1931 | 0.0991 | 0.8146 | 0.9178 | 0.9390 | 0.9640 | 0.8976 | 0.8799 | 0.8763 | | halong_embedding (512) | 0.8138 | 0.9233 | 0.9390 | 0.9703 | 0.8138 | 0.3146 | 0.1922 | 0.0992 | 0.7989 | 0.9178 | 0.9343 | 0.9656 | 0.8917 | 0.8715 | 0.8678 | | halong_embedding (256) | 0.7934 | 0.8967 | 0.9280 | 0.9593 | 0.7934 | 0.3062 | 0.1900 | 0.0981 | 0.7786 | 0.8920 | 0.9233 | 0.9546 | 0.8743 | 0.8520 | 0.8489 | | halong_embedding (128) | 0.7840 | 0.8951 | 0.9264 | 0.9515 | 0.7840 | 0.3046 | 0.1894 | 0.0975 | 0.7707 | 0.8889 | 0.9210 | 0.9476 | 0.8669 | 0.8439 | 0.8412 | | halong_embedding (64) | 0.6980 | 0.8435 | 0.8920 | 0.9358 | 0.6980 | 0.2864 | 0.1815 | 0.0958 | 0.6854 | 0.8365 | 0.8842 | 0.9311 | 0.8145 | 0.7805 | 0.7775 | ## Citation You can cite our work as below: ```Plaintext @misc{HalongEmbedding, title={HalongEmbedding: A Vietnamese Text Embedding}, author={Ngo Hieu}, year={2024}, publisher={Huggingface}, } ``` ### BibTeX #### Sentence Transformers ```bibtex @inproceedings{reimers-2019-sentence-bert, title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks", author = "Reimers, Nils and Gurevych, Iryna", booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing", month = "11", year = "2019", publisher = "Association for Computational Linguistics", url = "https://arxiv.org/abs/1908.10084", } ``` #### MatryoshkaLoss ```bibtex @misc{kusupati2024matryoshka, title={Matryoshka Representation Learning}, author={Aditya Kusupati and Gantavya Bhatt and Aniket Rege and Matthew Wallingford and Aditya Sinha and Vivek Ramanujan and William Howard-Snyder and Kaifeng Chen and Sham Kakade and Prateek Jain and Ali Farhadi}, year={2024}, eprint={2205.13147}, archivePrefix={arXiv}, primaryClass={cs.LG} } ``` #### MultipleNegativesRankingLoss ```bibtex @misc{henderson2017efficient, title={Efficient Natural Language Response Suggestion for Smart Reply}, author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil}, year={2017}, eprint={1705.00652}, archivePrefix={arXiv}, primaryClass={cs.CL} } ```