Views
No views yet
| Huggingface Repo | Number of Layers |
|---|---|
| jfkback/hypencoder.2_layer | 2 |
| jfkback/hypencoder.4_layer | 4 |
| jfkback/hypencoder.6_layer | 6 |
| jfkback/hypencoder.8_layer | 8 |
1from hypencoder_cb.modeling.hypencoder import Hypencoder, HypencoderDualEncoder, TextEncoder
2from transformers import AutoTokenizer
3
4dual_encoder = HypencoderDualEncoder.from_pretrained("jfkback/hypencoder.6_layer")
5tokenizer = AutoTokenizer.from_pretrained("jfkback/hypencoder.6_layer")
6
7query_encoder: Hypencoder = dual_encoder.query_encoder
8passage_encoder: TextEncoder = dual_encoder.passage_encoder
9
10queries = [
11 "how many states are there in india",
12 "when do concussion symptoms appear",
13]
14
15passages = [
16 "India has 28 states and 8 union territories.",
17 "Concussion symptoms can appear immediately or up to 72 hours after the injury.",
18]
19
20query_inputs = tokenizer(queries, return_tensors="pt", padding=True, truncation=True)
21passage_inputs = tokenizer(passages, return_tensors="pt", padding=True, truncation=True)
22
23q_nets = query_encoder(input_ids=query_inputs["input_ids"], attention_mask=query_inputs["attention_mask"]).representation
24passage_embeddings = passage_encoder(input_ids=passage_inputs["input_ids"], attention_mask=passage_inputs["attention_mask"]).representation
25
26# The passage_embeddings has shape (2, 768), but the q_nets expect the shape
27# (num_queries, num_items_per_query, input_hidden_size) so we need to reshape
28# the passage_embeddings.
29
30# In the simple case where each q_net only takes one passage, we can just
31# reshape the passage_embeddings to (num_queries, 1, input_hidden_size).
32passage_embeddings_single = passage_embeddings.unsqueeze(1)
33scores = q_nets(passage_embeddings_single) # Shape (2, 1, 1)
34# [
35# [[-12.1192]],
36# [[-13.5832]]
37# ]
38
39# In the case where each q_net takes both passages we can reshape the
40# passage_embeddings to (num_queries, 2, input_hidden_size).
41passage_embeddings_double = passage_embeddings.repeat(2, 1).reshape(2, 2, -1)
42scores = q_nets(passage_embeddings_double) # Shape (2, 2, 1)
43# [
44# [[-12.1192], [-32.7046]],
45# [[-34.0934], [-13.5832]]
46# ]@misc{killingback2025hypencoderhypernetworksinformationretrieval,
title={Hypencoder: Hypernetworks for Information Retrieval},
author={Julian Killingback and Hansi Zeng and Hamed Zamani},
year={2025},
eprint={2502.05364},
archivePrefix={arXiv},
primaryClass={cs.IR},
url={https://arxiv.org/abs/2502.05364},
}