--- library_name: peft --- ## Training procedure The following `bitsandbytes` quantization config was used during training: - quant_method: bitsandbytes - load_in_8bit: False - load_in_4bit: True - llm_int8_threshold: 6.0 - llm_int8_skip_modules: None - llm_int8_enable_fp32_cpu_offload: False - llm_int8_has_fp16_weight: False - bnb_4bit_quant_type: nf4 - bnb_4bit_use_double_quant: False - bnb_4bit_compute_dtype: float16 ### Framework versions - PEFT 0.5.0 ## Get it started ```python import torch from datasets import Dataset from huggingface_hub import login from peft import PeftModel, PeftConfig from transformers import AutoModelForCausalLM, AutoTokenizer, AddedToken # load model and tokenizer login("[YOUR HF TOKEN HERE FOR USING LLAMA]") config = PeftConfig.from_pretrained("ChangeIsKey/llama-7b-lexical-substitution") base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf", device_map='auto') tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf", use_fast=False, trust_remote_code=True) tokenizer.add_special_tokens({ "additional_special_tokens":[AddedToken("<|s|>"), AddedToken("<|answer|>"), AddedToken("<|end|>")]}) if tokenizer.pad_token is None: tokenizer.add_special_tokens({'pad_token': '[PAD]'}) tokenizer.padding_side = 'left' base_model.resize_token_embeddings(len(tokenizer)) model = PeftModel.from_pretrained(base_model, "ChangeIsKey/llama-7b-lexical-substitution") model.eval() # let's use this model def formatting_func(records): text_batch = [] for i in range(len(records['example'])): example = records[i]['example'] start, end = records[i]['start'], records[i]['end'] target = f'**{example[start:end]}**' input_text = f'{example[:start]} {target} {example[end:]}' text_batch.append(f"{input_text}<|answer|>") return text_batch def tokenization(dataset): return tokenizer(formatting_func(dataset), truncation=True, max_length=512, padding=True, return_tensors="pt").to("cuda") # a toy example examples = [{'example': 'The traffic jam on the highway made everyone late for work.', 'start': 12, 'end': 15}, {'example': 'I spread a generous layer of strawberry jam on my toast this morning', 'start': 40, 'end': 43}] dataset = Dataset.from_list(examples) batch_size = 32 output = list() with torch.no_grad(): for i in range(0, len(dataset), batch_size): model_input = tokenization(dataset.select(range(i, min(dataset.num_rows, i + batch_size)))) output_ids = model.generate(**model_input, do_sample=True, num_return_sequences=1, max_new_tokens=30, temperature=0.00001, repetition_penalty=1/0.85, top_k=40, top_p=0.1) answers = tokenizer.batch_decode(output_ids, skip_special_tokens=False) for answer in answers: answer = " ".join(answer.split('<|answer|>')[1:]) substitutes = [s.strip() for s in answer.split('<|end|>')[:-1] if s.strip() != ""] output.append(", ".join(substitutes)) # output dataset = dataset.add_column('substitutes', output) for row in dataset: target = row['example'][row['start']:row['end']] print(f"Target: {target}\nExample: {row['example']}\nSubstitutes: {row['substitutes']}\n") ```