pipeline_tag: 句子相似度
language:
- 德语
- 英语
- 中文
- 日语
- 印地语
- 阿拉伯语
- 孟加拉语
- 葡萄牙语
- 俄语
- 西班牙语
- 法语
- 韩语
tags:
- 链接转换器
- 句子转换器
- 句子相似度
- 表格分类
{MODEL_NAME}
这是一个LinkTransformer模型。其核心是基于sentence-transformers框架的句子转换模型——实质上是对该类的封装。
该模型专为通过LinkTransformer包实现快速便捷的记录链接(实体匹配)而设计,支持聚类、去重、关联、聚合等任务。
当然,它同样适用于sentence-transformers框架内的任何句子相似度任务,能够将句子和段落映射到768维稠密向量空间,可用于聚类或语义搜索等场景。
如需超越我们应用支持范围的功能,请参阅sentence-transformers文档。
本模型基于sentence-transformers/paraphrase-multilingual-mpnet-base-v2微调,预训练语言包括:德语、英语、中文、日语、印地语、阿拉伯语、孟加拉语、葡萄牙语、俄语、西班牙语、法语和韩语。
该模型使用LinkTransformer框架在维基数据公司别名数据集上训练完成,训练70个epoch,其他默认参数参见仓库中的LT_training_config.json配置文件。
使用方式(LinkTransformer)
安装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模型
任何Sentence Transformers模型只需添加池化层即可作为基础模型,HuggingFace上的其他Transformer模型也可通过设置add_pooling_layer=True来使用。
本模型采用SupCon损失函数训练,具体用法见包文档。训练配置见仓库中的LT_training_config.json文件。
以下为训练示例:
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和官网。
训练参数
数据加载器:
长度5966的torch.utils.data.dataloader.DataLoader
,参数:
{'batch_size': 64, 'sampler': 'torch.utils.data.dataloader._InfiniteConstantSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
损失函数:
linktransformer.modified_sbert.losses.SupConLoss_wandb
训练方法参数:
{
"epochs": 70,
"evaluation_steps": 2983,
"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": 417620,
"weight_decay": 0.01
}
模型结构:
LinkTransformer(
(0): Transformer({'max_seq_length': 128, '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})
)
引用与作者
@misc{arora2023linktransformer,
title={LinkTransformer: 基于Transformer语言模型的统一记录链接工具包},
author={Abhishek Arora and Melissa Dell},
year={2023},
eprint={2309.00789},
archivePrefix={arXiv},
primaryClass={cs.CL}
}