🚀 {MODEL_NAME}
このモデルは、LinkTransformer モデルです。基本的には、sentence-transformers モデルをラップした文埋め込みモデルです。
LinkTransformerパッケージを通じて、迅速かつ簡単なレコードリンケージ(エンティティマッチング)を行うように設計されています。クラスタリング、重複排除、リンケージ、集約などのタスクに対応しています。
その上で、sentence-transformersフレームワーク内の任意の文類似度タスクにも使用できます。
文や段落を768次元の密ベクトル空間にマッピングし、クラスタリングや意味検索などのタスクに利用できます。
このモデルをアプリケーションでサポートしている以上の用途に使用する場合は、sentence-transformers のドキュメントを参照してください。
このモデルは、multi-qa-mpnet-base-dot-v1モデルをファインチューニングしたものです。英語(en)で事前学習されています。
このモデルは、LinkTransformerフレームワークを使用して、Wikiデータからの企業別名を含むデータセットで学習されました。
リポジトリ内のLinkTransformer設定ファイル(LT_training_config.json)に記載されている他のデフォルト設定を使用して、100エポックで学習されました。
🚀 クイックスタート
✨ 主な機能
- 迅速かつ簡単なレコードリンケージ(エンティティマッチング)を行うことができます。
- クラスタリング、重複排除、リンケージ、集約などのタスクに対応しています。
- 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モデルの学習
任意のSentence Transformersをバックボーンとして使用できます。ただし、プーリング層を追加する必要があります。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や当社のウェブサイトにより多くのデータセットを公開する予定です。
学習
このモデルは、以下のパラメータで学習されました。
DataLoader:
{'batch_size': 64, 'sampler': 'torch.utils.data.dataloader._InfiniteConstantSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
Loss:
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}
}