angle_embο
Submodulesο
Attributesο
Classesο
Predefined prompts. Follow the model usage to choose the corresponding prompt. |
|
AngleDataCollator. It will be implicitly used in AnglE.fit(). |
|
Using Pooler to obtain sentence embeddings. |
|
Custom Huggingface Trainer for AnglE. |
|
Custom Huggingface Trainer for AnglE Espresso. |
|
Configure AngleLoss. |
|
AnglE. Everything is hereπ |
|
Custom TrainerCallback for Angle. |
Functionsο
|
Compute categorical crossentropy |
|
Compute cosine loss |
|
Compute angle loss |
|
Compute in-batch negative loss, i.e., contrastive loss |
|
Compute contrastive with negative loss |
|
Compute angle loss |
|
Compute contrastive with negative loss |
|
Compute cosine loss |
|
Compute in-batch negative loss, i.e., contrastive loss |
|
Find all linear layer names |
|
Pooling the model outputs. |
|
Set device automatically |
|
Detect dataset format from raw data |
Package Contentsο
- angle_emb.categorical_crossentropy_loss(y_true: torch.Tensor, y_pred: torch.Tensor, from_logits: bool = True) torch.Tensor[source]ο
Compute categorical crossentropy
- Parameters:
y_true β torch.Tensor, ground truth
y_pred β torch.Tensor, model output
from_logits β bool, True means y_pred has not transformed by softmax, default True
- Returns:
torch.Tensor, loss value
- angle_emb.cosine_loss(y_true: torch.Tensor, y_pred: torch.Tensor, tau: float = 20.0) torch.Tensor[source]ο
Compute cosine loss
- Parameters:
y_true β torch.Tensor, ground truth. The y_true must be zigzag style, such as [x[0][0], x[0][1], x[1][0], x[1][1], β¦], where (x[0][0], x[0][1]) stands for a pair.
y_pred β torch.Tensor, model output. The y_pred must be zigzag style, such as [o[0][0], o[0][1], o[1][0], o[1][1], β¦], where (o[0][0], o[0][1]) stands for a pair.
tau β float, scale factor, default 20
- Returns:
torch.Tensor, loss value
- angle_emb.angle_loss(y_true: torch.Tensor, y_pred: torch.Tensor, tau: float = 1.0, pooling_strategy: str = 'sum')[source]ο
Compute angle loss
- Parameters:
y_true β torch.Tensor, ground truth. The y_true must be zigzag style, such as [x[0][0], x[0][1], x[1][0], x[1][1], β¦], where (x[0][0], x[0][1]) stands for a pair.
y_pred β torch.Tensor, model output. The y_pred must be zigzag style, such as [o[0][0], o[0][1], o[1][0], o[1][1], β¦], where (o[0][0], o[0][1]) stands for a pair.
tau β float, scale factor, default 1.0
- Returns:
torch.Tensor, loss value
- angle_emb.in_batch_negative_loss(y_true: torch.Tensor, y_pred: torch.Tensor, tau: float = 20.0, negative_weights: float = 0.0) torch.Tensor[source]ο
Compute in-batch negative loss, i.e., contrastive loss
- Parameters:
y_true β torch.Tensor, ground truth. The y_true must be zigzag style, such as [x[0][0], x[0][1], x[1][0], x[1][1], β¦], where (x[0][0], x[0][1]) stands for a pair.
y_pred β torch.Tensor, model output. The y_pred must be zigzag style, such as [o[0][0], o[0][1], o[1][0], o[1][1], β¦], where (o[0][0], o[0][1]) stands for a pair.
tau β float, scale factor, default 20.0
negative_weights β float, negative weights, default 0.0
- Returns:
torch.Tensor, loss value
- angle_emb.contrastive_with_negative_loss(text: torch.Tensor, pos: torch.Tensor, neg: torch.Tensor | None = None, tau: float = 20.0) torch.Tensor[source]ο
Compute contrastive with negative loss
- Parameters:
text β torch.Tensor, text.
pos β torch.Tensor, positive samples of text.
neg β torch.Tensor, negative samples of text.
tau β float, scale factor, default 20.0
- Returns:
torch.Tensor, loss value
- class angle_emb.CorrelationEvaluator(text1: List[str], text2: List[str], labels: List[float], batch_size: int = 32)[source]ο
Bases:
object- text1ο
- text2ο
- labelsο
- batch_size = 32ο
- __call__(model: angle_emb.base.AngleBase, show_progress: bool = True, **kwargs) dict[source]ο
Evaluate the model on the given dataset.
- Parameters:
model β AnglE, the model to evaluate.
show_progress β bool, whether to show a progress bar during evaluation.
kwargs β Additional keyword arguments to pass to the encode method of the model.
- Returns:
dict, The evaluation results.
- class angle_emb.CorrelationEvaluator(text1: List[str], text2: List[str], labels: List[float], batch_size: int = 32)[source]ο
Bases:
object- text1ο
- text2ο
- labelsο
- batch_size = 32ο
- __call__(model: angle_emb.base.AngleBase, show_progress: bool = True, **kwargs) dict[source]ο
Evaluate the model on the given dataset.
- Parameters:
model β AnglE, the model to evaluate.
show_progress β bool, whether to show a progress bar during evaluation.
kwargs β Additional keyword arguments to pass to the encode method of the model.
- Returns:
dict, The evaluation results.
- angle_emb.angle_loss(y_true: torch.Tensor, y_pred: torch.Tensor, tau: float = 1.0, pooling_strategy: str = 'sum')[source]ο
Compute angle loss
- Parameters:
y_true β torch.Tensor, ground truth. The y_true must be zigzag style, such as [x[0][0], x[0][1], x[1][0], x[1][1], β¦], where (x[0][0], x[0][1]) stands for a pair.
y_pred β torch.Tensor, model output. The y_pred must be zigzag style, such as [o[0][0], o[0][1], o[1][0], o[1][1], β¦], where (o[0][0], o[0][1]) stands for a pair.
tau β float, scale factor, default 1.0
- Returns:
torch.Tensor, loss value
- angle_emb.contrastive_with_negative_loss(text: torch.Tensor, pos: torch.Tensor, neg: torch.Tensor | None = None, tau: float = 20.0) torch.Tensor[source]ο
Compute contrastive with negative loss
- Parameters:
text β torch.Tensor, text.
pos β torch.Tensor, positive samples of text.
neg β torch.Tensor, negative samples of text.
tau β float, scale factor, default 20.0
- Returns:
torch.Tensor, loss value
- angle_emb.cosine_loss(y_true: torch.Tensor, y_pred: torch.Tensor, tau: float = 20.0) torch.Tensor[source]ο
Compute cosine loss
- Parameters:
y_true β torch.Tensor, ground truth. The y_true must be zigzag style, such as [x[0][0], x[0][1], x[1][0], x[1][1], β¦], where (x[0][0], x[0][1]) stands for a pair.
y_pred β torch.Tensor, model output. The y_pred must be zigzag style, such as [o[0][0], o[0][1], o[1][0], o[1][1], β¦], where (o[0][0], o[0][1]) stands for a pair.
tau β float, scale factor, default 20
- Returns:
torch.Tensor, loss value
- angle_emb.in_batch_negative_loss(y_true: torch.Tensor, y_pred: torch.Tensor, tau: float = 20.0, negative_weights: float = 0.0) torch.Tensor[source]ο
Compute in-batch negative loss, i.e., contrastive loss
- Parameters:
y_true β torch.Tensor, ground truth. The y_true must be zigzag style, such as [x[0][0], x[0][1], x[1][0], x[1][1], β¦], where (x[0][0], x[0][1]) stands for a pair.
y_pred β torch.Tensor, model output. The y_pred must be zigzag style, such as [o[0][0], o[0][1], o[1][0], o[1][1], β¦], where (o[0][0], o[0][1]) stands for a pair.
tau β float, scale factor, default 20.0
negative_weights β float, negative weights, default 0.0
- Returns:
torch.Tensor, loss value
- angle_emb.find_all_linear_names(model: transformers.PreTrainedModel, linear_type: object | None = None) List[str][source]ο
Find all linear layer names
- Parameters:
model β PreTrainedModel
linear_type β Optional[object] = None, linear type, such as nn.Linear and bnb.nn.Linear4bit.
- Returns:
List[str], linear layer names
- angle_emb.get_pooling(outputs: torch.Tensor, inputs: Dict, pooling_strategy: str, padding_side: str) torch.Tensor[source]ο
Pooling the model outputs.
- Parameters:
outputs β torch.Tensor. Model outputs (without pooling)
inputs β Dict. Model inputs
pooling_strategy β str. Pooling strategy [cls, cls_avg, cls_max, last, avg, mean, max, all, int]
padding_side β str. Padding strategy of tokenizers (left or right). It can be obtained by tokenizer.padding_side.
- angle_emb.detect_dataset_format(ds: datasets.Dataset) str[source]ο
Detect dataset format from raw data
- class angle_emb.Prompts[source]ο
Predefined prompts. Follow the model usage to choose the corresponding prompt.
Example:
from angle_emb import Prompts # list all pre-defined prompts print(Prompts.list_prompts()) # set prompt angle.encode(*, prompt=Prompts.A)
- A = 'Summarize sentence "{text}" in one word:"'ο
- B = 'You can only output one word. Summarize "{text}":"'ο
- C = 'Represent this sentence for searching relevant passages: {text}'ο
- class angle_emb.AngleDataCollator[source]ο
AngleDataCollator. It will be implicitly used in AnglE.fit(). It handles raw data, tokenizes it, and prepares batches.
- Parameters:
tokenizer β PreTrainedTokenizerBase
padding β Union[bool, str, PaddingStrategy], padding strategy
max_length β Optional[int], max length
return_tensors β str
filter_duplicate β bool. Whether filter duplicate data
text_prompt β Optional[str], prompt for text1 and text2 (format A only). Default None
query_prompt β Optional[str], prompt for query field. Default None
doc_prompt β Optional[str], prompt for positive/negative fields. Default None
dataset_format β Optional[str]. Specify dataset_format: βAβ, βBβ, or βCβ. Default None.
- tokenizer: transformers.tokenization_utils_base.PreTrainedTokenizerBaseο
- padding: bool | str | transformers.utils.PaddingStrategy = 'longest'ο
- max_length: int | None = Noneο
- return_tensors: str = 'pt'ο
- filter_duplicate: bool = Trueο
- text_prompt: str | None = Noneο
- query_prompt: str | None = Noneο
- doc_prompt: str | None = Noneο
- dataset_format: str | None = Noneο
- class angle_emb.Pooler(model: transformers.PreTrainedModel, pooling_strategy: int | str | None = None, padding_side: str | None = None)[source]ο
Using Pooler to obtain sentence embeddings.
- Parameters:
model β PreTrainedModel
pooling_strategy β Optional[str]. Currently support [cls, cls_avg, cls_max, last, avg, mean, max, all, int]. Default None.
padding_side β Optional[str]. left or right. Default None.
is_llm β bool. Default False
- modelο
- pooling_strategy = Noneο
- padding_side = Noneο
- __call__(inputs: Dict, layer_index: int = -1, embedding_start: int | None = None, embedding_size: int | None = None, return_all_layer_outputs: bool = False, pooling_strategy: int | str | None = None, return_mlm_logits: bool = False) torch.Tensor[source]ο
Get sentence embeddings.
- Parameters:
inputs β Dict. Model inputs.
layer_index β Optional[int]. Get embeddings from specific layer.
embedding_start β Optional[int]. Start index of embeddings.
embedding_size β int. Set embedding size for sentence embeddings.
return_all_layer_outputs β bool. Return all layer outputs or not. Default False.
pooling_strategy β Optional[str]. Currently support [cls, cls_avg, cls_max, last, avg, mean, max, all, int]. Default None.
return_mlm_logits β bool. Return logits or not. Default False.
- class angle_emb.AngleTrainer(pooler: Pooler, loss_kwargs: Dict | None = None, dataset_format: str = 'A', teacher_name_or_path: str | None = None, teacher_pooling_strategy: str = 'cls', pad_token_id: int = 0, model_kwargs: Dict | None = None, **kwargs)[source]ο
Bases:
transformers.TrainerCustom Huggingface Trainer for AnglE.
- Parameters:
pooler β Pooler. Required
loss_kwargs β Optional[Dict]. Default None.
dataset_format β str. Default βAβ
teacher_name_or_path β Optional[str]. For distribution alignment.
**kwargs β
other parameters of Trainer.
- poolerο
- pad_token_id = 0ο
- model_kwargs = Noneο
- loss_fctο
- teacher_name_or_path = Noneο
- teacher_pooling_strategy = 'cls'ο
- compute_distillation_loss(inputs: torch.Tensor, targets: torch.Tensor, mse_weight: float = 1.0, kl_temperature: float = 1.0) torch.Tensor[source]ο
Compute distillation loss.
- Parameters:
inputs β torch.Tensor. Input tensor.
targets β torch.Tensor. Target tensor.
mse_weight β float. MSE weight. Default 1.0.
kl_temperature β float. KL temperature. Default 1.0.
- Returns:
torch.Tensor. Distillation loss.
- class angle_emb.AngleESETrainer(pooler: Pooler, loss_kwargs: Dict | None = None, dataset_format: str = 'A', teacher_name_or_path: str | None = None, ese_kl_temperature: float = 1.0, ese_compression_size: int = 128, apply_ese_pca: bool = True, **kwargs)[source]ο
Bases:
AngleTrainerCustom Huggingface Trainer for AnglE Espresso.
- Parameters:
pooler β Pooler. Required
loss_kwargs β Optional[Dict]. Default None.
dataset_format β str. Default βAβ
teacher_name_or_path β Optional[str]. For distribution alignment.
**kwargs β
other parameters of Trainer.
- ese_kl_temperature = 1.0ο
- ese_compression_size = 128ο
- apply_ese_pca = Trueο
- n_layersο
- pca_compress(m: torch.Tensor, k: int) torch.Tensor[source]ο
Get topk feature via PCA.
- Parameters:
m β torch.Tensor. Input tensor.
k β int. Top-k feature size.
- Returns:
torch.Tensor. Top-k feature.
- class angle_emb.AngleLoss(cosine_w: float = 0.0, ibn_w: float = 1.0, cln_w: float = 1.0, angle_w: float = 0.02, cosine_tau: float = 20.0, ibn_tau: float = 20.0, angle_tau: float = 20.0, angle_pooling_strategy: str = 'sum', dataset_format: str | None = None, **kwargs)[source]ο
Configure AngleLoss.
- Parameters:
cosine_w β float. weight for cosine_loss. Default 1.0
ibn_w β float. weight for in batch negative loss. Default 1.0
cln_w β float. weight for contrastive learning with hard negative. Default 1.0
angle_w β float. weight for angle loss. Default 1.0
cosine_tau β float. tau for cosine loss. Default 20.0
ibn_tau β float. tau for in batch negative loss. Default 20.0
angle_tau β float. tau for angle loss. Default 20.0
angle_pooling_strategy β str. pooling strategy for angle loss. Defaultβsumβ.
dataset_format β Optional[str]. Default None.
- cosine_w = 0.0ο
- ibn_w = 1.0ο
- cln_w = 1.0ο
- angle_w = 0.02ο
- cosine_tau = 20.0ο
- ibn_tau = 20.0ο
- angle_tau = 20.0ο
- angle_pooling_strategy = 'sum'ο
- dataset_format = Noneο
- class angle_emb.AnglE(model_name_or_path: str, tokenizer_name_or_path: str | None = None, max_length: int = 512, model_kwargs: Dict | None = None, lora_config_kwargs: Dict | None = None, pooling_strategy: str | None = None, apply_lora: bool | None = None, train_mode: bool = True, load_kbit: int | None = None, is_llm: bool | None = None, pretrained_model_path: str | None = None, pretrained_lora_path: str | None = None, torch_dtype: torch.dtype | None = None, device: str | None = None, kbit_kwargs: Dict | None = None, tokenizer_padding_side: str | None = None, apply_billm: bool = False, billm_model_class: str | None = None, load_mlm_model: bool = False, **kwargs: Any)[source]ο
Bases:
angle_emb.base.AngleBaseAnglE. Everything is hereπ
- Parameters:
model_name_or_path β str, model name or path.
tokenizer_name_or_path β Optional[str]. Default None. When it set to None, it will use the same as model_name_or_path.
max_length β int. Default 512
model_kwargs β Optional[Dict]. kwargs for model.
lora_config_kwargs β Optional[Dict]. kwargs for peft lora_config. details refer to: https://huggingface.co/docs/peft/tutorial/peft_model_config
pooling_strategy β Optional[str]. Pooling strategy. Currently support [cls, cls_avg, cls_max, last, avg, mean, max, all, int]
apply_lora β Optional[bool]. Whether apply lora. Default None.
train_mode β bool. Whether load for training. Default True.
load_kbit β Optional[int]. Specify kbit training from [4, 8, 16]. Default None.
is_llm β Optional[bool]. Whether the model is llm. Must be set manually. Default None.
pretrained_model_path β Optional[str]. Default None.
pretrained_lora_path β Optional[str]. Default None.
torch_dtype β Optional[torch.dtype]. Specify torch_dtype. Default None.
device β Optional[str]. Specify device. Default None.
kbit_kwargs β Optional[Dict]. kwargs for kbit. Default None. details refer to: https://huggingface.co/docs/peft/package_reference/peft_model#peft.prepare_model_for_kbit_training
tokenizer_padding_side β Optional[str]. Specify tokenizer padding side from [left, right]. Default None.
apply_billm β bool. Whether apply billm. Default False.
billm_model_class β Optional[str]. Specify billm model class. Default None.
load_mlm_model β bool. Whether load mlm model. Default False. If set True, it will load model with AutoModelForMaskedLM.
**kwargs β
Any.
- cfg_file_name = 'angle_config.json'ο
- special_columns = ['labels']ο
- max_length = 512ο
- train_mode = Trueο
- pooling_strategy = Noneο
- load_kbit = Noneο
- is_llm = Noneο
- load_mlm_model = Falseο
- apply_lora = Noneο
- model_kwargsο
- tokenizerο
- poolerο
- __cfgο
- static from_pretrained(model_name_or_path: str, pretrained_model_path: str | None = None, pretrained_lora_path: str | None = None, is_llm: bool | None = None, pooling_strategy: str = 'cls', train_mode: bool = False, model_kwargs: Dict | None = None, **kwargs)[source]ο
Load AnglE from pretrained model.
- Parameters:
model_name_or_path β str, model name or path. Required.
pretrained_model_path β Optional[str].
pretrained_lora_path β Optional[str].
is_llm β Optional[bool].
pooling_strategy β str. Pooling Strategy. Default cls.
train_mode β bool. Default False.
kwargs β Other kwargs for AnglE.
- Returns:
AnglE object.
Example:
from angle_emb import AnglE angle = AnglE.from_pretrained(model_name_or_path) # fit angle.fit(*args, **kwargs) # inference angle.encode(*args, **kwargs)
- fit(train_ds: datasets.Dataset, valid_ds: datasets.Dataset | None = None, valid_ds_for_callback: datasets.Dataset | None = None, batch_size: int = 32, output_dir: str | None = None, epochs: int = 1, learning_rate: float = 1e-05, warmup_steps: int = 1000, logging_steps: int = 10, eval_steps: int = 1000, eval_strategy: str = 'steps', save_steps: int = 100, save_strategy: str = 'steps', save_total_limit: int = 1, gradient_accumulation_steps: int = 1, fp16: bool | None = None, bf16: bool | None = None, argument_kwargs: Dict | None = None, trainer_kwargs: Dict | None = None, loss_kwargs: Dict | None = None, apply_ese: bool = False, filter_duplicate: bool = True, push_to_hub: bool = False, hub_model_id: str | None = None, hub_private_repo: bool = True, padding: str = 'longest', text_prompt: str | None = None, query_prompt: str | None = None, doc_prompt: str | None = None)[source]ο
Fit using AnglE.
- Parameters:
train_ds β Dataset. Raw train dataset (not tokenized). Required.
valid_ds β Optional[Dataset]. Raw valid dataset (not tokenized). Default None.
valid_ds_for_callback β Optional[Dataset]. Raw valid dataset for callback use (not tokenized). The dataset format should be format A. The spearmansβ correlation will be computed after each epoch training and the best model will be saved. Default None.
batch_size β int. Default 32.
output_dir β Optional[str]. save dir. Default None.
epochs β int. Default 1.
learning_rate β float. Default 1e-5.
warmup_steps β int. Default 1000.
logging_steps β int. Default 10.
eval_steps β int. Default 1000.
eval_strategy β str. Default βstepsβ.
save_steps β int. Default 100.
save_strategy β str. Default steps.
save_total_limit β int. Default 10.
gradient_accumulation_steps β int. Default 1.
fp16 β Optional[bool]. Default None.
bf16 β Optional[bool]. Default None.
argument_kwargs β Optional[Dict]. kwargs for TrainingArguments. refer to: https://huggingface.co/docs/transformers/v4.37.0/en/main_classes/trainer#transformers.TrainingArguments
trainer_kwargs β Optional[Dict]. kwargs for AngleTrainer.
loss_kwargs β Optional[Dict]. kwargs for AngleLoss.
apply_ese β bool, whether apply ESE training.
filter_duplicate β bool, whether filter duplicate samples.
push_to_hub β bool, whether push to hub.
hub_model_id β Optional[str], hub model id.
hub_private_repo β bool, whether push to private repo.
padding β str, padding strategy of tokenizer. Default βlongestβ.
text_prompt β Optional[str], prompt for text1 and text2 (format A only). Default None.
query_prompt β Optional[str], prompt template for query. Default None.
doc_prompt β Optional[str], prompt template for documents (positive/negative). Default None.
- evaluate(ds: datasets.Dataset, batch_size: int = 32, metric: str = 'spearman_cosine', prompt: str | None = None) float[source]ο
evaluate
- Parameters:
data β Dataset, format A is required
batch_size β int. Default 32.
metric β str. Default βspearman_cosineβ.
- Returns:
float.
- truncate_layer(layer_index: int)[source]ο
truncate layer
- Parameters:
layer_index β int. layers after layer_index will be truncated.
- Returns:
self
- encode(inputs: List[str] | Tuple[str] | str, max_length: int | None = None, to_numpy: bool = True, embedding_start: int = 0, embedding_size: int | None = None, device: Any | None = None, prompt: str | None = None, normalize_embedding: bool = False, padding: str = 'longest')[source]ο
encode texts.
- Parameters:
inputs β Union[List[str], Tuple[str], List[Dict], str]. Input texts. Required.
max_length β Optional[int]. Default None.
to_numpy β bool. Default True.
embedding_start β int. Specify the start position of the embedding (for Espresso).
embedding_size β Optional[int]. Specify embedding size (for Espresso). The embeddings from embedding_start to embedding_start+embedding_size will be returned.
device β Optional[Any]. Default None.
prompt β Optional[str]. Default None.
normalize_embedding β bool. Default False.
padding β str. Padding strategy of tokenizer. Default βlongestβ.
- push_to_hub(hub_model_id: str, private: bool = True, exist_ok: bool = False, **kwargs)[source]ο
push model to hub
- Parameters:
hub_model_id β str, hub model id.
private β bool, whether push to private repo. Default True.
exist_ok β bool, whether allow overwrite. Default False.
kwargs β other kwargs for push_to_hub method.
- class angle_emb.EvaluateCallback(model: AnglE, valid_ds: datasets.Dataset, evaluate_fn: Callable, save_dir: str | None = None, push_to_hub: bool = False, hub_model_id: str | None = None, hub_private_repo: bool = True)[source]ο
Bases:
transformers.TrainerCallbackCustom TrainerCallback for Angle. This callback will compute corrcoef for each epoch.
- Parameters:
model β PreTrainedModel.
valid_ds β Dataset.
evaluate_fn β Callable. It will receive valid_ds as input like evaluate_fn(valid_ds).
save_dir β Optional[str]. specify dir to save model with best results.
- modelο
- valid_dsο
- evaluate_fnο
- save_dir = Noneο
- best_corrcoef = 0ο
- push_to_hub = Falseο
- hub_model_id = Noneο
- hub_private_repo = Trueο