| from __future__ import annotations | |
| from sentence_transformers import ( | |
| SentenceTransformer | |
| ) | |
| class LegalEmbedder: | |
| def __init__( | |
| self, | |
| model_name: str = | |
| "BAAI/bge-large-en-v1.5" | |
| ): | |
| print( | |
| f"Loading embedding model: " | |
| f"{model_name}" | |
| ) | |
| self.model = ( | |
| SentenceTransformer( | |
| model_name | |
| ) | |
| ) | |
| # ===================================================== | |
| # DOCUMENT EMBEDDINGS | |
| # ===================================================== | |
| def embed( | |
| self, | |
| texts: list[str] | |
| ): | |
| return self.model.encode( | |
| texts, | |
| normalize_embeddings=True, | |
| convert_to_numpy=True, | |
| batch_size=16, | |
| show_progress_bar=True | |
| ) | |
| # ===================================================== | |
| # QUERY EMBEDDING | |
| # ===================================================== | |
| def embed_query( | |
| self, | |
| query: str | |
| ): | |
| query = ( | |
| "Represent this sentence " | |
| "for searching relevant " | |
| f"passages: {query}" | |
| ) | |
| return self.model.encode( | |
| query, | |
| normalize_embeddings=True, | |
| convert_to_numpy=True | |
| ) | |
| # ===================================================== | |
| # VECTOR SIZE | |
| # ===================================================== | |
| def vector_size( | |
| self | |
| ) -> int: | |
| return ( | |
| self.model | |
| .get_sentence_embedding_dimension() | |
| ) | |
| # ========================================================= | |
| # TEST | |
| # ========================================================= | |
| if __name__ == "__main__": | |
| embedder = ( | |
| LegalEmbedder() | |
| ) | |
| texts = [ | |
| "Section 52. Facts of which Court shall take judicial notice.", | |
| "Article 21. Protection of life and personal liberty." | |
| ] | |
| vectors = ( | |
| embedder.embed( | |
| texts | |
| ) | |
| ) | |
| print() | |
| print( | |
| "Vectors:", | |
| len(vectors) | |
| ) | |
| print( | |
| "Dimension:", | |
| len(vectors[0]) | |
| ) | |
| query_vector = ( | |
| embedder.embed_query( | |
| "facts judicially noticed by court" | |
| ) | |
| ) | |
| print( | |
| "Query Dimension:", | |
| len(query_vector) | |
| ) | |
| print( | |
| "Model Dimension:", | |
| embedder.vector_size() | |
| ) |