Views
No views yet
1import torch
2from transformers import AutoTokenizer, AutoModel
3
4# trained layer-dimension sizes
5sizes = [(2, 32), (4, 64), (6, 128), (8, 256), (10, 512), (12, 768)]
6
7tokenizer = AutoTokenizer.from_pretrained("ielabgroup/Starbucks-msmarco")
8model = AutoModel.from_pretrained("ielabgroup/Starbucks-msmarco").eval()
9
10query = ["What is the capital of France?"]
11passages = ["The capital of France is Paris.", "China's capital is Beijing."]
12
13
14inputs = tokenizer(query, return_tensors="pt")
15outputs = model(**inputs, return_dict=True, output_hidden_states=True)
16
17# cls token embeddings of each layer-dimension size
18query_embeddings = [outputs.hidden_states[layer][:, 0, :dim] for layer, dim in sizes]
19
20passage_inputs = tokenizer(passages, return_tensors="pt", padding=True, truncation=True)
21passage_outputs = model(**passage_inputs, return_dict=True, output_hidden_states=True)
22
23passage_embeddings = [passage_outputs.hidden_states[layer][:, 0, :dim] for layer, dim in sizes]
24
25for (layer, dim), query_embedding, passage_embedding in zip(sizes, query_embeddings, passage_embeddings):
26 scores = torch.matmul(query_embedding, passage_embedding.T)
27 print(f"Layer {layer}, Dimension {dim}, Scores: {scores.tolist()}")
28Layer 2, Dimension 32, Scores: [[28.416101455688477, 18.783443450927734]]
Layer 4, Dimension 64, Scores: [[29.415122985839844, 20.81881332397461]]
Layer 6, Dimension 128, Scores: [[29.515695571899414, 20.07825469970703]]
Layer 8, Dimension 256, Scores: [[33.34524154663086, 23.34392738342285]]
Layer 10, Dimension 512, Scores: [[80.5205307006836, 63.31733322143555]]
Layer 12, Dimension 768, Scores: [[181.57217407226562, 171.1049346923828]]
1import torch
2from transformers import AutoTokenizer, AutoModel, AutoConfig
3
4# extracted layer-dimension sizes
5num_layer = 2
6dim = 32
7
8tokenizer = AutoTokenizer.from_pretrained("ielabgroup/Starbucks-msmarco")
9config = AutoConfig.from_pretrained("ielabgroup/Starbucks-msmarco", num_hidden_layers=num_layer)
10model = AutoModel.from_pretrained("ielabgroup/Starbucks-msmarco", config=config).eval()
11
12print(len(model.encoder.layer)) # only has 2 layers
13
14query = ["What is the capital of France?"]
15passages = ["The capital of France is Paris.", "China's capital is Beijing."]
16
17
18inputs = tokenizer(query, return_tensors="pt")
19query_embeddings = model(**inputs, return_dict=True)[0][:, 0, :dim]
20
21print(query_embeddings.shape) # torch.Size([1, 32])
22
23passage_inputs = tokenizer(passages, return_tensors="pt", padding=True, truncation=True)
24passage_embeddings = model(**passage_inputs, return_dict=True)[0][:, 0, :dim]
25
26scores = torch.matmul(query_embeddings, passage_embeddings.T)
27
28print(scores.tolist())[[28.416101455688477, 18.783443450927734]]