🚀 {MODEL_NAME}
這是一個LinkTransformer模型。本質上,它是一個句子轉換器模型,基於sentence-transformers模型,只是對其類進行了封裝。該模型旨在通過LinkTransformer包實現快速便捷的記錄鏈接(實體匹配),相關任務包括聚類、去重、鏈接、聚合等。此外,它也可用於sentence-transformers框架內的任何句子相似度任務。它能將句子和段落映射到768維的密集向量空間,可用於聚類或語義搜索等任務。如果你想將此模型用於我們應用支持範圍之外的場景,請查看sentence-transformers的文檔。
此模型在multi-qa-mpnet-base-dot-v1
模型的基礎上進行了微調,預訓練語言為英語。該模型使用LinkTransformer框架,在包含維基數據中公司別名的數據集上進行訓練,共訓練了100個週期,其他默認參數可在倉庫的LinkTransformer配置文件LT_training_config.json
中找到。
🚀 快速開始
✨ 主要特性
- 基於LinkTransformer和sentence-transformers框架,可實現快速便捷的記錄鏈接。
- 適用於多種句子相似度任務,如聚類、去重、鏈接、聚合等。
- 能將句子和段落映射到768維的密集向量空間,用於語義搜索。
📦 安裝指南
當你安裝了LinkTransformer後,使用此模型會變得很簡單:
pip install -U linktransformer
💻 使用示例
基礎用法
import linktransformer as lt
import pandas as pd
df1=pd.read_csv("data/df1.csv")
df2=pd.read_csv("data/df2.csv")
df_merged = lt.merge(df1, df2, on="CompanyName", how="inner")
📚 詳細文檔
訓練你自己的LinkTransformer模型
任何句子轉換器都可以通過簡單添加池化層作為主幹模型。HuggingFace上的其他轉換器也可以通過指定add_pooling_layer==True
選項來使用。該模型使用SupCon損失進行訓練,具體用法可在包文檔中找到。訓練配置可在倉庫中名為LT_training_config.json
的文件中找到。若要復現訓練過程,你可以下載該文件並在訓練函數的config_path
參數中指定路徑,也可以通過指定training_args
參數來覆蓋配置。以下是一個示例:
saved_model_path = train_model(
model_path="hiiamsid/sentence_similarity_spanish_es",
dataset_path=dataset_path,
left_col_names=["description47"],
right_col_names=['description48'],
left_id_name=['tariffcode47'],
right_id_name=['tariffcode48'],
log_wandb=False,
config_path=LINKAGE_CONFIG_PATH,
training_args={"num_epochs": 1}
)
你還可以使用此包進行去重(根據提供的關鍵列對數據框進行聚類),也可以將細分類別(如產品)合併到粗分類別(如HS代碼)。更多信息請閱讀我們的論文和文檔。
評估結果
你可以使用LinkTransformer包的推理函數對模型進行評估。我們在包中提供了一些數據集供你嘗試,計劃在Huggingface和我們的網站上提供更多數據集(即將推出)。
訓練
該模型的訓練參數如下:
數據加載器:
torch.utils.data.dataloader.DataLoader
,長度為2087,參數如下:
{'batch_size': 64, 'sampler': 'torch.utils.data.dataloader._InfiniteConstantSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
損失函數:
linktransformer.modified_sbert.losses.SupConLoss_wandb
fit()
方法的參數:
{
"epochs": 100,
"evaluation_steps": 1044,
"evaluator": "sentence_transformers.evaluation.SequentialEvaluator.SequentialEvaluator",
"max_grad_norm": 1,
"optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
"optimizer_params": {
"lr": 2e-05
},
"scheduler": "WarmupLinear",
"steps_per_epoch": null,
"warmup_steps": 208700,
"weight_decay": 0.01
}
模型結構:
LinkTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: MPNetModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False})
)
📄 許可證
引用與作者
@misc{arora2023linktransformer,
title={LinkTransformer: A Unified Package for Record Linkage with Transformer Language Models},
author={Abhishek Arora and Melissa Dell},
year={2023},
eprint={2309.00789},
archivePrefix={arXiv},
primaryClass={cs.CL}
}