Views
No views yet
pip install hf-hub-ctranslate2>=2.12.0 ctranslate2>=3.17.11# from transformers import AutoTokenizer
2model_name = "michaelfeil/ct2fast-LaBSE"
3model_name_orig="setu4993/LaBSE"
4
5from hf_hub_ctranslate2 import EncoderCT2fromHfHub
6model = EncoderCT2fromHfHub(
7 # load in int8 on CUDA
8 model_name_or_path=model_name,
9 device="cuda",
10 compute_type="int8_float16"
11)
12outputs = model.generate(
13 text=["I like soccer", "I like tennis", "The eiffel tower is in Paris"],
14 max_length=64,
15) # perform downstream tasks on outputs
16outputs["pooler_output"]
17outputs["last_hidden_state"]
18outputs["attention_mask"]
19
20# alternative, use SentenceTransformer Mix-In
21# for end-to-end Sentence embeddings generation
22# (not pulling from this CT2fast-HF repo)
23
24from hf_hub_ctranslate2 import CT2SentenceTransformer
25model = CT2SentenceTransformer(
26 model_name_orig, compute_type="int8_float16", device="cuda"
27)
28embeddings = model.encode(
29 ["I like soccer", "I like tennis", "The eiffel tower is in Paris"],
30 batch_size=32,
31 convert_to_numpy=True,
32 normalize_embeddings=True,
33)
34print(embeddings.shape, embeddings)
35scores = (embeddings @ embeddings.T) * 100
36
37# Hint: you can also host this code via REST API and
38# via github.com/michaelfeil/infinity
39
40compute_type=int8_float16 for device="cuda"compute_type=int8 for device="cpu"LLama-2 -> removed <pad> token.1import torch
2from transformers import BertModel, BertTokenizerFast
3
4
5tokenizer = BertTokenizerFast.from_pretrained("setu4993/LaBSE")
6model = BertModel.from_pretrained("setu4993/LaBSE")
7model = model.eval()
8
9english_sentences = [
10 "dog",
11 "Puppies are nice.",
12 "I enjoy taking long walks along the beach with my dog.",
13]
14english_inputs = tokenizer(english_sentences, return_tensors="pt", padding=True)
15
16with torch.no_grad():
17 english_outputs = model(**english_inputs)english_embeddings = english_outputs.pooler_output1italian_sentences = [
2 "cane",
3 "I cuccioli sono carini.",
4 "Mi piace fare lunghe passeggiate lungo la spiaggia con il mio cane.",
5]
6japanese_sentences = ["犬", "子犬はいいです", "私は犬と一緒にビーチを散歩するのが好きです"]
7italian_inputs = tokenizer(italian_sentences, return_tensors="pt", padding=True)
8japanese_inputs = tokenizer(japanese_sentences, return_tensors="pt", padding=True)
9
10with torch.no_grad():
11 italian_outputs = model(**italian_inputs)
12 japanese_outputs = model(**japanese_inputs)
13
14italian_embeddings = italian_outputs.pooler_output
15japanese_embeddings = japanese_outputs.pooler_output1import torch.nn.functional as F
2
3
4def similarity(embeddings_1, embeddings_2):
5 normalized_embeddings_1 = F.normalize(embeddings_1, p=2)
6 normalized_embeddings_2 = F.normalize(embeddings_2, p=2)
7 return torch.matmul(
8 normalized_embeddings_1, normalized_embeddings_2.transpose(0, 1)
9 )
10
11
12print(similarity(english_embeddings, italian_embeddings))
13print(similarity(english_embeddings, japanese_embeddings))
14print(similarity(italian_embeddings, japanese_embeddings))1@misc{feng2020languageagnostic,
2 title={Language-agnostic BERT Sentence Embedding},
3 author={Fangxiaoyu Feng and Yinfei Yang and Daniel Cer and Naveen Arivazhagan and Wei Wang},
4 year={2020},
5 eprint={2007.01852},
6 archivePrefix={arXiv},
7 primaryClass={cs.CL}
8}