Views
No views yet
1from optimum.onnxruntime import ORTModelForFeatureExtraction
2from transformers import AutoTokenizer
3
4tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-m3") # Better to use the original tokenizer (very lightweight)
5model = ORTModelForFeatureExtraction.from_pretrained("MahradHosseini/bge-m3-onnx-int8")
6
7questions = ["What is your opening hour?", "Where are your offices?"]
8
9input_q = tokenizer(
10 questions,
11 padding=True,
12 truncation=True,
13 return_tensors="np"
14)
15print(f"Question input keys: {list(input_q.keys())}, shapes: {[v.shape for v in input_q.values()]}")
16
17output_q = self.model(**input_q)
18print(f"Question output keys: {list(output_q.keys())}, shapes: {[v.shape for v in output_q.values()]}")
19
20question_embeddings = {
21 "dense_vecs": mean_pooling(output_q["last_hidden_state"], input_q["attention_mask"]),
22}
23print(f"Embedded {len(question_embeddings['dense_vecs'])} questions from {self.data_file}")
24
25def mean_pooling(last_hidden_state, attention_mask):
26 # last_hidden_state: [batch_size, seq_len, hidden_size]
27 # attention_mask: [batch_size, seq_len]
28 input_mask_expanded = np.expand_dims(attention_mask, -1).astype(np.float32)
29 return np.sum(last_hidden_state * input_mask_expanded, axis=1) / np.clip(
30 input_mask_expanded.sum(axis=1), a_min=1e-9, a_max=None
31 )