| from __future__ import annotations | |
| from sentence_transformers import ( | |
| SentenceTransformer | |
| ) | |
| import numpy as np | |
| class LegalEmbedder: | |
| def __init__( | |
| self, | |
| model_name: str = | |
| "BAAI/bge-large-en-v1.5" | |
| ): | |
| self.model = ( | |
| SentenceTransformer( | |
| model_name | |
| ) | |
| ) | |
| # ========================================== | |
| # SINGLE TEXT | |
| # ========================================== | |
| def embed_query( | |
| self, | |
| text: str | |
| ) -> np.ndarray: | |
| return self.model.encode( | |
| text, | |
| normalize_embeddings=True, | |
| convert_to_numpy=True | |
| ) | |
| # ========================================== | |
| # BATCH TEXTS | |
| # ========================================== | |
| def embed( | |
| self, | |
| texts: list[str] | |
| ) -> np.ndarray: | |
| return self.model.encode( | |
| texts, | |
| normalize_embeddings=True, | |
| convert_to_numpy=True, | |
| show_progress_bar=False | |
| ) | |
| # ========================================== | |
| # VECTOR DIMENSION | |
| # ========================================== | |
| def dimension( | |
| self | |
| ) -> int: | |
| return ( | |
| self.model | |
| .get_sentence_embedding_dimension() | |
| ) | |
| # ===================================================== | |
| # TEST | |
| # ===================================================== | |
| if __name__ == "__main__": | |
| embedder = LegalEmbedder() | |
| vec = embedder.embed_query( | |
| "punishment for trafficking" | |
| ) | |
| print( | |
| "Dimension:", | |
| len(vec) | |
| ) | |
| print( | |
| vec[:10] | |
| ) |