Views
No views yet
pip install -U sentence-transformers1from sentence_transformers import SentenceTransformer, util
2
3sentences = [
4 'какое состояние может определить тест с физической нагрузкой',
5 'Тест с физической нагрузкой разработан, чтобы выяснить, содержат ли одна или несколько коронарных артерий, питающих сердце, жировые отложения (бляшки), которые блокируют кровеносный сосуд на 70% или более. Для подтверждения результата часто требуется дополнительное тестирование. Результат испытаний.',
6 'Тест направлен на то, чтобы выяснить, не получает ли какой-либо участок сердечной мышцы достаточный кровоток во время тренировки. Он похож на тест с физической нагрузкой, фармакологический или химический стресс-тест. Он также известен при стресс-тесте таллием, сканировании перфузии миокарда или радионуклидном тесте.'
7]
8
9model = SentenceTransformer('DiTy/bi-encoder-russian-msmarco')
10embeddings = model.encode(sentences)
11results = util.semantic_search(embeddings[0], embeddings[1:])[0]
12
13print(f"Sentence similarity: {results}")
14# `Sentence similarity: [{'corpus_id': 0, 'score': 0.8545001149177551}, {'corpus_id': 1, 'score': 0.023047829046845436}]`1from transformers import AutoTokenizer, AutoModel
2import torch
3
4
5#Mean Pooling - Take attention mask into account for correct averaging
6def mean_pooling(model_output, attention_mask):
7 token_embeddings = model_output[0] #First element of model_output contains all token embeddings
8 input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
9 return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
10
11
12# Sentences we want sentence embeddings for
13sentences = [
14 'красный плоский лишай вызван стрессом',
15 'В большинстве случаев причину появления красного плоского лишая невозможно. Это не вызвано стрессом, но иногда эмоциональный стресс усугубляет ситуацию. Известно, что это заболевание возникает после контакта с определенными химическими веществами, такими как те, которые используются для проявления цветных фотографий. У некоторых людей определенные лекарства вызывают красный плоский лишай. Эти препараты включают лекарства от высокого кровяного давления, болезней сердца, диабета, артрита и малярии, антибиотики, нестероидные противовоспалительные обезболивающие и т. Д.',
16 'К сожалению для работодателей, в разных штатах страны есть несколько дел, по которым суды установили, что стресс, вызванный работой, может быть основанием для увольнения с работы, если стресс достигает уровня серьезного состояния здоровья, которое вызывает они не могут выполнять свою работу.',
17]
18
19# Load model from HuggingFace Hub
20tokenizer = AutoTokenizer.from_pretrained('DiTy/bi-encoder-russian-msmarco')
21model = AutoModel.from_pretrained('DiTy/bi-encoder-russian-msmarco')
22
23# Tokenize sentences
24encoded_input = tokenizer(sentences, max_length=512, padding='max_length', truncation=True, return_tensors='pt')
25
26# Compute token embeddings
27with torch.no_grad():
28 model_output = model(**encoded_input)
29
30# Perform pooling. In this case, mean pooling.
31sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
32
33print("Sentence embeddings:")
34print(sentence_embeddings)torch.utils.data.dataloader.DataLoader of length 1989041 with parameters:{'batch_size': 16, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}sentence_transformers.losses.MultipleNegativesRankingLoss.MultipleNegativesRankingLoss with parameters:{'scale': 20.0, 'similarity_fct': 'cos_sim'}{
"epochs": 5,
"evaluation_steps": 250000,
"evaluator": "sentence_transformers.evaluation.InformationRetrievalEvaluator",
"max_grad_norm": 1,
"optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
"optimizer_params": {
"lr": 2e-05
},
"scheduler": "WarmupLinear",
"steps_per_epoch": null,
"warmup_steps": 10000,
"weight_decay": 0.01
}SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
)