Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 17
How to use swardiantara/bert-tiny-yelp-k5-fixed-cosine with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("swardiantara/bert-tiny-yelp-k5-fixed-cosine")
sentences = [
"I wish I could return a haircut.\\n\\nUnfortunately Kelly, Melissa, and Jen were not there so I settled for whoever was free at the time. \\n\\nWorst trim of my life:\\nshe cut off over an inch more than just the dead/split ends\\nshe did not cut the hair how I described initially\\nshe did not change the cut to how I repeated during the cut when I noticed she was cutting it straight across instead of curving it in the back, which does NOT mix well with my curly hair\\nafter retelling her how I wanted it cut, she compared this tragedy to deaths of family/friends and how I should get over it\\nthe beautiful long layers I had and wanted again are now choppy, medium layers\\nmy left side is even choppier than the right side of my hair\\nI fear straightening my hair to make this unevenness less evident\\n\\nI regret tipping her because I understand how the service industry works because my minimum tip of 20% for all service people is undeserved for her lack of work.\\n\\nI want everyone to know how the only good hair stylists there are Kelly (who moved to Philly), Melissa and Jen. If they are not available, do NOT risk going.\\n\\nAlso, the Supercuts Oakland location is horrible at waxing eyebrows unless you are lucky to get the only woman of color there.\\n\\nWhile it was a $20 cut (after the 20% tip), I know had to buy biotin to grow my hair faster so it is more expensive to me in the end. I hope this proves helpful to all perspective customers!",
"Video link at bottom review. Worst service I have ever had. I am 22 years old I don't want to be treated with any disrespect because I wear a hat. I have lived here for 5 days and new to the area they will really short with me had an a problem because I did not understand there menu and had to ask for a menu. No help at all. So on top if the bad service the pizza was horrible. I called Enzo back (the owner) to say I was unhappy with the pizza and service and her swore and yelled on the phone. So I went in to talk to him and he swore at me in person telling me to f****n leave. Only wanted to pay me back for half the price. Worst place I have been to here in the area. I have a video of him yelling at me. He refused to give me his name and wanted to hear nothing I had to say. http://www.youtube.com/watch?v=Kuq5w_GpZTo&feature=youtu.be please check it out.",
"After a long night of clubbing, we were up for some breakfast at 4am. While hailing a taxi cab, our attendant convinced us to go to this place (instead of another we had in mind). Big Joe told us it was the best place to get some steak and eggs. Well Big Joe, you were wrong.\\n\\nGranted, the food was decent. The eggs weren't dry, and with a little salt and pepper, it made it just right. Potato pieces always a plus. I ordered my steak medium rare, which usually let's my meat be just the right texture - not too dry, and not too bloody. Well, my meat was a bit on the dry side, so one can only imagine if I had even fathomed to order my meat well done.\\n\\nThen again, you get what you pay for.\\n\\nMy main complaint about this place was the service we received. After a long wait to get our food (maybe I'm too used to the fast service I get in California?), we finished our food, and waited for the check. I guess I'm used to getting the check before I'm done eating. But we waited. And waited....................... AND WAITED.\\n\\nWe tried asking the hostess for the check, but she just rudely stated she didn't know who our server was, and she simply couldn't help us. From what I could see, there were only two servers at the time, so how hard was it to figure it out. If the first one said no, THEN ASK THE OTHER! And yes, we did try to get our waiter's attention. Luck had it that he was serving two large groups.\\n\\nHowever, that is not an excuse for a good 30 minute long wait (or at least what felt like 30 minutes) for our check.\\n\\nReady to go to sleep, exhausted from a night of clubbing and suffering from a food coma, we decided to do the right thing and leave money on the table before we left. Yes, that's right, we never got our check. At least we had the decency to leave money for our meal. I know we could've just walked out and left, but we took the high road.\\n\\nWell, except for leaving this one star review that is.",
"Will not come back. Food is average but the service is terrible. \\n\\nThe Pho is not impressive but OK and their egg rolls are made from refrigerated product with some unrecognizable stuff inside!!\\n\\nThe service is among the worst I've ever experienced. The waitress/owner gave a face like a stone and didn't even say a word when taking our order. The only one word we got there was a \\\"Thanks\\\" when she bring the check.... Since we were the only Asian customers there and all others were getting normal service, I may have to establish an assumption that the way you are treated is correlated to your looking. Unbelievable!"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from google/bert_uncased_L-2_H-128_A-2. It maps sentences & paragraphs to a 128-dimensional dense vector space and can be used for retrieval.
SentenceTransformer(
(0): Transformer({'transformer_task': 'feature-extraction', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'last_hidden_state'}}, 'module_output_name': 'token_embeddings', 'architecture': 'BertModel'})
(1): Pooling({'embedding_dimension': 128, 'pooling_mode': 'mean', 'include_prompt': True})
)
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
from sentence_transformers import SentenceTransformer
# Download from the 🤗 Hub
model = SentenceTransformer("swardiantara/bert-tiny-yelp-k5-fixed-cosine")
# Run inference
sentences = [
"Everytime I eat at this location I end up with a sick stomach. I don't have that problem at other Arby's. The dining area is clean and everything else seems ok but I always get a sick stomach. Maybe they should relook at their food prep.",
"Let me start by saying I have no idea about the food here, it could be amazing and knock my socks off, but I will not be back to find out.\\n\\nWe came here on a Saturday night and it was annoying. The service was decent, the drinks pretty strong....that's all that I can say in the good arena here. \\n\\nThe atmosphere is boring and uninspired, the decor blah and the clientele douchey. (if that's even a word) Prime example: a 45 year old guy in an Affliction shirt with a sparkly peace sign on the back...what?! There have to be better places to hang out in Scottsdale.",
'WOW.... So I received a coupon in the mail for a buy one get one buffet, so me and the BF decided to go out and try it. Well, we walk in on a Sunday night and that might have been our first mistake. All of the food seemed like it had been sitting there since lunch time. It was old, and cold, and honestly, we were both worried about getting sick afterward. The place was empty, and our server still left our drinks empty and dirty plates on the table.\\n\\nPeople were PILING on the crab legs, and so I gave them a try... overcooked and watery. The \\"clarified butter\\" next to it was margarine, and honestly, I walked away thanking GOD that we didn\'t pay full price. I think McDonalds would have been a better choice.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 128]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.9969, 0.9967],
# [0.9969, 1.0000, 0.9983],
# [0.9967, 0.9983, 1.0000]])
text_a, text_b, and label| text_a | text_b | label | |
|---|---|---|---|
| type | string | string | list |
| modality | text | text | |
| details |
|
|
|
| text_a | text_b | label |
|---|---|---|
dr. goldberg offers everything i look for in a general practitioner. he's nice and easy to talk to without being patronizing; he's always on time in seeing his patients; he's affiliated with a top-notch hospital (nyu) which my parents have explained to me is very important in case something happens and you need surgery; and you can get referrals to see specialists without having to see him first. really, what more do you need? i'm sitting here trying to think of any complaints i have about him, but i'm really drawing a blank. |
OMG, DELICIOUS!\nMy husband and I were in Vegas for a friend's graduation and I needed to come here. I'm pretty sure this place was on TV. We actually drove totally out of our way on the way to the actual graduation, and after a big brunch, just to have some custard. \nThey have a variety of custard flavors, which change daily, and a variety of toppings to put on. You can make up your own combo or pick from the board. They also do a standard size unless you tell them you want something else. \nWe ordered the Western Sundae and goggled it up in the car within five minutes. The custard is thick and creamy and the toppings were good. They did skimp on the hot fudge sauce, but I'm not even mad because everything else was so good. |
[1.0, 0.0] |
Unfortunately, the frustration of being Dr. Goldberg's patient is a repeat of the experience I've had with so many other doctors in NYC -- good doctor, terrible staff. It seems that his staff simply never answers the phone. It usually takes 2 hours of repeated calling to get an answer. Who has time for that or wants to deal with it? I have run into this problem with many other doctors and I just don't get it. You have office workers, you have patients with medical needs, why isn't anyone answering the phone? It's incomprehensible and not work the aggravation. It's with regret that I feel that I have to give Dr. Goldberg 2 stars. |
Let me start by saying I have no idea about the food here, it could be amazing and knock my socks off, but I will not be back to find out.\n\nWe came here on a Saturday night and it was annoying. The service was decent, the drinks pretty strong....that's all that I can say in the good arena here. \n\nThe atmosphere is boring and uninspired, the decor blah and the clientele douchey. (if that's even a word) Prime example: a 45 year old guy in an Affliction shirt with a sparkly peace sign on the back...what?! There have to be better places to hang out in Scottsdale. |
[1.0, 0.0] |
Been going to Dr. Goldberg for over 10 years. I think I was one of his 1st patients when he started at MHMG. He's been great over the years and is really all about the big picture. It is because of him, not my now former gyn Dr. Markoff, that I found out I have fibroids. He explores all options with you and is very patient and understanding. He doesn't judge and asks all the right questions. Very thorough and wants to be kept in the loop on every aspect of your medical health and your life. |
Yeah, this place is pretty good.\n\nWe live in Glendale (shut it, we know) and the food is definitely worth the drive to Tempe. While I am sure this spot was always popular due to the food and location in the heart of ASU, its cameo on Man vs. Food has done nothing if made Chompie's a must visit for out-of-towners. Have no fear, as the food does not disappoint, ESPECIALLY the sliders. I cannot say enough about how good those stupid mini-sandwiches are. They receive top billing and completely deserve it.\n\nThis is a deli and bakery in the truest sense of the word. There are several menu options, but sandwiches and baked goods are the stars here. Come hungry because Chompie's does not know the meaning of the phrase "manageable portion." Depending on the time, you may be forced to wait for seating, but that should reinforce the notion that you came to the right place. To give you perspective, we came in July and gladly sat outside just so we could eat sooner, desert sun be dam... |
[1.0, 0.0] |
main.OrdinalProxyContrastiveLossper_device_train_batch_size: 1024num_train_epochs: 10learning_rate: 2e-05load_best_model_at_end: Trueper_device_train_batch_size: 1024num_train_epochs: 10max_steps: -1learning_rate: 2e-05lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_steps: 0optim: adamw_torchoptim_args: Noneweight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08optim_target_modules: Nonegradient_accumulation_steps: 1average_tokens_across_devices: Truemax_grad_norm: 1.0label_smoothing_factor: 0.0bf16: Falsefp16: Falsebf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonegradient_checkpointing: Falsegradient_checkpointing_kwargs: Nonetorch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneuse_liger_kernel: Falseliger_kernel_config: Noneuse_cache: Falseneftune_noise_alpha: Nonetorch_empty_cache_steps: Noneauto_find_batch_size: Falselog_on_each_node: Truelogging_nan_inf_filter: Trueinclude_num_input_tokens_seen: nolog_level: passivelog_level_replica: warningdisable_tqdm: Falseproject: huggingfacetrackio_space_id: Nonetrackio_bucket_id: Nonetrackio_static_space_id: Noneper_device_eval_batch_size: 8prediction_loss_only: Trueeval_on_start: Falseeval_do_concat_batches: Trueeval_use_gather_object: Falseeval_accumulation_steps: Noneinclude_for_metrics: []batch_eval_metrics: Falsesave_only_model: Falsesave_on_each_node: Falseenable_jit_checkpoint: Falsepush_to_hub: Falsehub_private_repo: Nonehub_model_id: Nonehub_strategy: every_savehub_always_push: Falsehub_revision: Noneload_best_model_at_end: Trueignore_data_skip: Falserestore_callback_states_from_checkpoint: Falsefull_determinism: Falseseed: 42data_seed: Noneuse_cpu: Falseaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedataloader_drop_last: Falsedataloader_num_workers: 0dataloader_pin_memory: Truedataloader_persistent_workers: Falsedataloader_prefetch_factor: Noneremove_unused_columns: Truelabel_names: Nonetrain_sampling_strategy: randomlength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falseddp_static_graph: Noneddp_backend: Noneddp_timeout: 1800fsdp: Nonefsdp_config: Nonedeepspeed: Nonedebug: []skip_memory_metrics: Truedo_predict: Falseresume_from_checkpoint: Nonewarmup_ratio: Nonelocal_rank: -1prompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss |
|---|---|---|
| 0.8741 | 500 | 0.0006 |
| 1.0 | 572 | - |
| 1.7483 | 1000 | 0.0001 |
| 2.0 | 1144 | - |
| 2.6224 | 1500 | 0.0001 |
| 3.0 | 1716 | - |
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
Base model
google/bert_uncased_L-2_H-128_A-2