Very simple hashing-based embedder. This is intended for lightweight demos and tests, not for high-quality retrieval.
| 266 | return embedding_function |
| 267 | |
| 268 | class SimpleEmbedder(BaseEmbedder): |
| 269 | """Very simple hashing-based embedder. |
| 270 | |
| 271 | This is intended for lightweight demos and tests, not for high-quality retrieval. |
| 272 | """ |
| 273 | |
| 274 | def __init__(self, vocab_size: int = 10000): |
| 275 | """Create a SimpleEmbedder. |
| 276 | |
| 277 | Args: |
| 278 | vocab_size: Size of the hashing vocabulary / embedding dimension. |
| 279 | """ |
| 280 | super().__init__() |
| 281 | |
| 282 | self.vocab_size = vocab_size |
| 283 | |
| 284 | def get_embedding_function(self) -> Callable[[str], np.ndarray]: |
| 285 | def embedding_function(text: str) -> np.ndarray: |
| 286 | embedding = np.zeros(self.vocab_size) |
| 287 | |
| 288 | for char in text: |
| 289 | hash_val = hash(char) % self.vocab_size |
| 290 | embedding[hash_val] += 1 |
| 291 | |
| 292 | if np.sum(embedding) > 0: |
| 293 | embedding = embedding / np.sum(embedding) |
| 294 | |
| 295 | return embedding |
| 296 | |
| 297 | return embedding_function |