Views
No views yet
SentenceTransformer(
(0): Transformer({'max_seq_length': 64, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
(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})
(2): Asym(
(anchor-0): Dense({'in_features': 768, 'out_features': 1024, 'bias': True, 'activation_function': 'torch.nn.modules.activation.Tanh'})
(positive-0): Dense({'in_features': 768, 'out_features': 1024, 'bias': True, 'activation_function': 'torch.nn.modules.activation.Tanh'})
)
)pip install -U sentence-transformers1import torch
2import numpy as np
3from tqdm.auto import tqdm
4from sentence_transformers import SentenceTransformer
5from sentence_transformers.util import batch_to_device, cos_sim
6
7# Load the model
8model = SentenceTransformer("TechWolf/JobBERT-v3")
9
10def encode_batch(jobbert_model, texts):
11 features = jobbert_model.tokenize(texts)
12 features = batch_to_device(features, jobbert_model.device)
13 features["text_keys"] = ["anchor"]
14 with torch.no_grad():
15 out_features = jobbert_model.forward(features)
16 return out_features["sentence_embedding"].cpu().numpy()
17
18def encode(jobbert_model, texts, batch_size: int = 8):
19 # Sort texts by length and keep track of original indices
20 sorted_indices = np.argsort([len(text) for text in texts])
21 sorted_texts = [texts[i] for i in sorted_indices]
22
23 embeddings = []
24
25 # Encode in batches
26 for i in tqdm(range(0, len(sorted_texts), batch_size)):
27 batch = sorted_texts[i:i+batch_size]
28 embeddings.append(encode_batch(jobbert_model, batch))
29
30 # Concatenate embeddings and reorder to original indices
31 sorted_embeddings = np.concatenate(embeddings)
32 original_order = np.argsort(sorted_indices)
33 return sorted_embeddings[original_order]
34
35# Example usage
36job_titles = [
37 'Software Engineer',
38 '高级软件开发人员', # senior software developer
39 'Produktmanager', # product manager
40 'Científica de datos' # data scientist
41]
42
43# Get embeddings
44embeddings = encode(model, job_titles)
45
46# Calculate cosine similarity matrix
47similarities = cos_sim(embeddings, embeddings)
48print(similarities)tensor([[1.0000, 0.8087, 0.4673, 0.5669],
[0.8087, 1.0000, 0.4428, 0.4968],
[0.4673, 0.4428, 1.0000, 0.4292],
[0.5669, 0.4968, 0.4292, 1.0000]])anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
通信与培训专员 | deliver online training, liaise with educational support staff, interact with an audience, construct individual learning plans, lead a team, develop corporate training programmes, learning technologies, communication, identify with the company's goals, address an audience, learning management systems, use presentation software, motivate others, provide learning support, engage with stakeholders, identify skills gaps, meet expectations of target audience, develop training programmes |
Associate Infrastructure Engineer | create solutions to problems, design user interface, cloud technologies, use databases, automate cloud tasks, keep up-to-date to computer trends, work in teams, use object-oriented programming, keep updated on innovations in various business fields, design principles, Angular, adapt to changing situations, JavaScript, Agile development, manage stable, Swift (computer programming), keep up-to-date to design industry trends, monitor technology trends, web programming, provide mentorship, advise on efficiency improvements, adapt to change, JavaScript Framework, database management systems, stimulate creative processes |
客户顾问/出纳 | customer service, handle financial transactions, adapt to changing situations, have computer literacy, manage cash desk, attend to detail, provide customer guidance on product selection, perform multiple tasks at the same time, carry out financial transactions, provide membership service, manage accounts, adapt to change, identify customer's needs, solve problems |
CachedMultipleNegativesRankingLoss with these parameters:
1{
2 "scale": 20.0,
3 "similarity_fct": "cos_sim",
4 "mini_batch_size": 512
5}overwrite_output_dir: Trueper_device_train_batch_size: 2048per_device_eval_batch_size: 2048num_train_epochs: 1fp16: Trueoverwrite_output_dir: Truedo_predict: Falseeval_strategy: noprediction_loss_only: Trueper_device_train_batch_size: 2048per_device_eval_batch_size: 2048per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 5e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 1max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.0warmup_steps: 0log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Truesave_safetensors: Truesave_on_each_node: Falsesave_only_model: Falserestore_callback_states_from_checkpoint: Falseno_cuda: Falseuse_cpu: Falseuse_mps_device: Falseseed: 42data_seed: Nonejit_mode_eval: Falseuse_ipex: Falsebf16: Falsefp16: Truefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: 0ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Falsedataloader_num_workers: 0dataloader_prefetch_factor: Nonepast_index: -1disable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Falseignore_data_skip: Falsefsdp: []fsdp_min_num_params: 0fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}fsdp_transformer_layer_cls_to_wrap: Noneaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}deepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torchoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falsedataloader_pin_memory: Truedataloader_persistent_workers: Falseskip_memory_metrics: Trueuse_legacy_prediction_loop: Falsepush_to_hub: Falseresume_from_checkpoint: Nonehub_model_id: Nonehub_strategy: every_savehub_private_repo: Nonehub_always_push: Falsegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseinclude_for_metrics: []eval_do_concat_batches: Truefp16_backend: autopush_to_hub_model_id: Nonepush_to_hub_organization: Nonemp_parameters:auto_find_batch_size: Falsefull_determinism: Falsetorchdynamo: Noneray_scope: lastddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Nonedispatch_batches: Nonesplit_batches: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: Falseneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseeval_use_gather_object: Falseaverage_tokens_across_devices: Falseprompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportional| Epoch | Step | Training Loss |
|---|---|---|
| 0.0485 | 500 | 3.89 |
| 0.0969 | 1000 | 3.373 |
| 0.1454 | 1500 | 3.1715 |
| 0.1939 | 2000 | 3.0414 |
| 0.2424 | 2500 | 2.9462 |
| 0.2908 | 3000 | 2.8691 |
| 0.3393 | 3500 | 2.8048 |
| 0.3878 | 4000 | 2.7501 |
| 0.4363 | 4500 | 2.7026 |
| 0.4847 | 5000 | 2.6601 |
| 0.5332 | 5500 | 2.6247 |
| 0.5817 | 6000 | 2.5951 |
| 0.6302 | 6500 | 2.5692 |
| 0.6786 | 7000 | 2.5447 |
| 0.7271 | 7500 | 2.5221 |
| 0.7756 | 8000 | 2.5026 |
| 0.8240 | 8500 | 2.4912 |
| 0.8725 | 9000 | 2.4732 |
| 0.9210 | 9500 | 2.4608 |
| 0.9695 | 10000 | 2.4548 |
1@misc{decorte2025multilingualjobbertcrosslingualjob,
2 title={Multilingual JobBERT for Cross-Lingual Job Title Matching},
3 author={Jens-Joris Decorte and Matthias De Lange and Jeroen Van Hautte},
4 year={2025},
5 eprint={2507.21609},
6 archivePrefix={arXiv},
7 primaryClass={cs.CL},
8 url={https://arxiv.org/abs/2507.21609},
9}1@inproceedings{reimers-2019-sentence-bert,
2 title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
3 author = "Reimers, Nils and Gurevych, Iryna",
4 booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
5 month = "11",
6 year = "2019",
7 publisher = "Association for Computational Linguistics",
8 url = "https://arxiv.org/abs/1908.10084",
9}1@misc{gao2021scaling,
2 title={Scaling Deep Contrastive Learning Batch Size under Memory Limited Setup},
3 author={Luyu Gao and Yunyi Zhang and Jiawei Han and Jamie Callan},
4 year={2021},
5 eprint={2101.06983},
6 archivePrefix={arXiv},
7 primaryClass={cs.LG}
8}