colbertflax96 / colbert.py
Nithish2410's picture
Upload 3 files
a43cb82 verified
Raw
History Blame Contribute Delete
1.6 kB
from transformers import FlaxAutoModel, AutoTokenizer
import flax.linen as nn
import jax.numpy as jnp
import jax.random as jr
from flax.serialization import from_bytes
import jax
hf_model = FlaxAutoModel.from_pretrained('answerdotai/answerai-colbert-small-v1')
hf_tokenizer = AutoTokenizer.from_pretrained('answerdotai/answerai-colbert-small-v1')
flax_module = hf_model.module
class FlaxVespaColBERTModule(nn.Module):
def setup(self):
self.bert = flax_module
self.linear = nn.Dense(96, use_bias=False)
def __call__(self, **inputs):
outputs = self.bert(**inputs).last_hidden_state
outputs = self.linear(outputs)
outputs = outputs / jnp.linalg.norm(outputs, axis=-1, keepdims=True)
return outputs
def get_flax_colbert_model():
model = FlaxVespaColBERTModule()
sample_text = hf_tokenizer(
'Hi, this is a colbert model', return_tensors="np", padding="max_length", truncation=True
)
init_params = model.init(jr.PRNGKey(0), **sample_text)
with open('colbert_flax.msgpack', 'rb') as f:
serialized = f.read()
custom_flax_params = from_bytes(init_params, serialized)
del init_params, sample_text, serialized
return model, custom_flax_params
class Colbert:
def __init__(self):
self.colbert_model, self.colbert_params = get_flax_colbert_model()
self.forward = jax.jit(self.colbert_model.apply)
self.tokenizer = hf_tokenizer
def __call__(self, **inputs):
return self.forward(self.colbert_params, **inputs)