Views
No views yet
1>>> import scipy
2>>> import torch
3>>> from transformers import AutoModel, AutoTokenizer
4>>>
5>>> model = AutoModel.from_pretrained('rmihaylov/roberta-base-nli-stsb-bg')
6>>> tokenizer = AutoTokenizer.from_pretrained('rmihaylov/roberta-base-nli-stsb-bg')
7>>>
8>>> def embed(text):
9>>> inputs = tokenizer.encode_plus(text, return_tensors='pt')
10>>> outputs = model(**inputs)
11>>> sequence_output = outputs[0]
12>>> input_mask_expanded = inputs['attention_mask'].unsqueeze(-1).expand(sequence_output.size()).float()
13>>> embeddings = torch.sum(sequence_output * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
14>>> return embeddings.detach().numpy()[0]
15>>>
16>>>
17>>> query_embedding = embed("Какви са съставките на бисквитките?")
18>>>
19>>> questions = [
20>>> "Какво е бисквитка?",
21>>> "От какво са направени бисквитките?",
22>>> "Използват ли в Англия думата бисквитки?",
23>>> "Къде се правят бисквитките?",
24>>> "Какви видове бисквитки има?",
25>>> "Къде човек може да купи бисквитки?",
26>>> "Откъде дойде думата бисквитка?",
27>>> "Кое е чудовището на бисквитките?",
28>>> "Как да си направите бисквитки у дома?",
29>>> "Колко калории има типичната бисквитка?",
30>>> "Какви напитки вървят добре с бисквитките?",
31>>> "Бисквитките наричат ли се също сладки?"
32>>> ]
33>>>
34>>> corpus, corpus_embeddings = [], []
35>>> for question in questions:
36>>> embedding = embed(question)
37>>> corpus.append(question)
38>>> corpus_embeddings.append(embedding)
39>>>
40>>> distances = scipy.spatial.distance.cdist([query_embedding], corpus_embeddings, "cosine")[0]
41>>>
42>>> results = zip(range(len(distances)), distances)
43>>> results = sorted(results, key=lambda x: x[1])
44>>>
45>>> print([[corpus[idx].strip(), (1.0 - distance)] for idx, distance in results])
46
47[['Какви видове бисквитки има?', 0.9749538412820795],
48 ['От какво са направени бисквитките?', 0.9720467855849998],
49 ['Къде се правят бисквитките?', 0.9622582076645853],
50 ['Какво е бисквитка?', 0.9352896865855094],
51 ['Използват ли в Англия думата бисквитки?', 0.8981422328370646],
52 ['Откъде дойде думата бисквитка?', 0.8955433698658758],
53 ['Кое е чудовището на бисквитките?', 0.8902666858687854],
54 ['Бисквитките наричат ли се също сладки?', 0.8839303534407483],
55 ['Какви напитки вървят добре с бисквитките?', 0.8582087653310524],
56 ['Къде човек може да купи бисквитки?', 0.8570532540073935],
57 ['Колко калории има типичната бисквитка?', 0.8387529949080176],
58 ['Как да си направите бисквитки у дома?', 0.8243675958097614]]