🚀 NaSE (News-adapted Sentence Encoder)
このモデルはニュースに特化した文エンコーダで、事前学習された大規模多言語文エンコーダ LaBSE をベースにドメイン特化されています。
🚀 クイックスタート
このモデルは、入力されたテキストの意味情報を捉えたベクトルを出力する文エンコーダです。特にニュース分野に特化しています。
✨ 主な機能
- 多言語対応: 多数の言語に対応しています。
- 文の類似度計算: 文の埋め込みを用いて、文間の類似度を計算できます。
- 情報検索やクラスタリング: 文のベクトルを利用して、情報検索やクラスタリングタスクに使用できます。
📦 インストール
このモデルを使用するには、HuggingFace Transformersライブラリが必要です。以下のコマンドでインストールできます。
pip install transformers
💻 使用例
基本的な使用法
以下は、与えられたテキストの文埋め込みを取得するためのPyTorchでの使用例です。
from transformers import BertModel, BertTokenizerFast
tokenizer = BertTokenizerFast.from_pretrained('aiana94/NaSE')
model = BertModel.from_pretrained('aiana94/NaSE')
sentences = ["This is an example sentence", "Dies ist auch ein Beispielsatz in einer anderen Sprache."]
encoded_input = tokenizer(sentences, return_tensors='pt', padding=True)
with torch.no_grad():
output = model(**encoded_input)
sentence_embeddings = output.pooler_output
高度な使用法
TensorFlowでの使用例です。
from transformers import TFBertModel, BertTokenizerFast
tokenizer = BertTokenizerFast.from_pretrained('aiana94/NaSE')
model = TFBertModel.from_pretrained('aiana94/NaSE')
sentences = ["This is an example sentence", "Dies ist auch ein Beispielsatz in einer anderen Sprache."]
encoded_input = tokenizer(sentences, return_tensors='tf', padding=True)
with torch.no_grad():
output = model(**encoded_input)
sentence_embeddings = output.pooler_output
文間の類似度を計算する場合、類似度を計算する前にL2正規化を行うことをお勧めします。
import torch
import torch.nn.functional as F
def cos_sim(a: torch.Tensor, b: torch.Tensor):
a_norm = F.normalize(a, p=2, dim=1)
b_norm = F.normalize(b, p=2, dim=1)
return torch.mm(a_norm, b_norm.transpose(0, 1))
📚 ドキュメント
モデルの詳細
モデルの説明
NaSEは、事前学習された LaBSE を初期化した、ドメイン適応型の多言語文エンコーダです。2つの多言語コーパス Polynews と PolyNewsParallel を使用して、ニュース分野に特化されています。具体的には、NaSEはノイズ除去オートエンコーディングとシーケンス-to-シーケンスの機械翻訳という2つの目的で事前学習されています。
想定される用途
このモデルは、文エンコーダとして、特にニュースエンコーダとして使用することを想定しています。入力テキストが与えられると、その意味情報を捉えたベクトルを出力します。この文ベクトルは、文の類似度計算、情報検索、またはクラスタリングタスクに使用できます。
学習の詳細
学習データ
NaSEは、2つの多言語データセット Polynews と並列データセット PolyNewsParallel を使用してドメイン適応されています。
モデル学習のサンプリング時に、言語ごとの分布を平滑化するために以下の手順を使用しています。
- PolyNewsとPolyNewsParallelにそれぞれ少なくとも100のテキストを含む言語と言語ペアのみをサンプリングします。
- 言語 L からテキストをサンプリングする際に、修正された分布 p(L) ~ |L| * alpha からサンプリングします。ここで |L| は例の数、alpha は平滑化率で、alpha=0.3 を使用しています(つまり、低リソース言語をアップサンプリングし、高リソース言語をダウンサンプリングします)。
学習手順
NaSEは、多言語文エンコーダ LaBSE の事前学習された重みで初期化されています。事前学習手順の詳細については、その モデルカード または対応する 論文 を参照してください。
多言語文エンコーダをニュース分野に適応させるために、以下の2つの目的を使用しています。
- ノイズ除去オートエンコーディング (DAE): 離散的なノイズを加えて得られた破損バージョンから元の入力文を再構築します(詳細は TSDAE を参照)。
- 機械翻訳 (MT): ソース言語の入力文からターゲット言語の翻訳を生成します(つまり、ソース言語はターゲット言語のターゲット文 x の「破損」を構成し、これを「再構築」する必要があります)。
NaSEは、最初に再構築、次に翻訳の順で学習されます。つまり、DAE目的で得られたNaSEエンコーダを並列データでの翻訳に引き続き学習させます。
学習ハイパーパラメータ
- 学習方式: fp16混合精度
- 学習ステップ: 100k(目的ごとに50K)、5Kステップごとに検証
- 学習率: 3e-5
- オプティマイザ: AdamW
完全な学習スクリプトは 学習コード でアクセスできます。
🔧 技術詳細
このモデルは、1台の40GB NVIDIA A100 GPUで合計100kステップの事前学習が行われました。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。
📄 引用
@misc{iana2024news,
title={News Without Borders: Domain Adaptation of Multilingual Sentence Embeddings for Cross-lingual News Recommendation},
author={Andreea Iana and Fabian David Schmidt and Goran Glavaš and Heiko Paulheim},
year={2024},
eprint={2406.12634},
archivePrefix={arXiv},
url={https://arxiv.org/abs/2406.12634}
}