🚀 NB - SBERT - BASE
NB - SBERT - BASEは、[nb - bert - base](https://huggingface.co/NbAiLab/nb - bert - base) をベースに、[MNLIデータセットの機械翻訳バージョン](https://huggingface.co/datasets/NbAiLab/mnli - norwegian) で学習された SentenceTransformers モデルです。
このモデルは、文章や段落を768次元の密ベクトル空間にマッピングします。このベクトルは、クラスタリングや意味検索などのタスクに使用できます。以下では、このモデルの使用方法の例をいくつか紹介します。最も簡単な方法は、2つの文章間のコサイン距離を測定することです。意味が近い文章は、コサイン距離が小さく、類似度が1に近くなります。このモデルは、異なる言語の類似した文章も互いに近くなるように学習されています。理想的には、英語とノルウェー語の文章ペアは高い類似度を持つはずです。
🚀 クイックスタート
✨ 主な機能
- 文章や段落を768次元の密ベクトル空間にマッピングすることができます。
- クラスタリングや意味検索などのタスクに使用できます。
- 異なる言語の類似した文章も互いに近くなるように学習されています。
📦 インストール
Embeddings and Sentence Similarity (Sentence - Transformers)
pip install -U sentence-transformers
Keyword Extraction
pip install keybert
Similarity Search
pip install autofaiss sentence-transformers
💻 使用例
Embeddings and Sentence Similarity (Sentence - Transformers)
基本的な使用法
pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer, util
sentences = ["This is a Norwegian boy", "Dette er en norsk gutt"]
model = SentenceTransformer('NbAiLab/nb-sbert-base')
embeddings = model.encode(sentences)
print(embeddings)
cosine_scores = util.cos_sim(embeddings[0],embeddings[1])
print(cosine_scores)
from scipy import spatial
scipy_cosine_scores = 1 - spatial.distance.cosine(embeddings[0],embeddings[1])
print(scipy_cosine_scores)
Embeddings and Sentence Similarity (HuggingFace Transformers)
from transformers import AutoTokenizer, AutoModel
import torch
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
sentences = ["This is a Norwegian boy", "Dette er en norsk gutt"]
tokenizer = AutoTokenizer.from_pretrained('NbAiLab/nb-sbert-base')
model = AutoModel.from_pretrained('NbAiLab/nb-sbert-base')
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
print(embeddings)
from scipy import spatial
scipy_cosine_scores = 1 - spatial.distance.cosine(embeddings[0],embeddings[1])
print(scipy_cosine_scores)
Keyword Extraction
pip install keybert
from keybert import KeyBERT
from sentence_transformers import SentenceTransformer
sentence_model = SentenceTransformer("NbAiLab/nb-sbert-base")
kw_model = KeyBERT(model=sentence_model)
doc = """
De første nasjonale bibliotek har sin opprinnelse i kongelige samlinger eller en annen framstående myndighet eller statsoverhode.
Et av de første planene for et nasjonalbibliotek i England ble fremmet av den walisiske matematikeren og mystikeren John Dee som
i 1556 presenterte en visjonær plan om et nasjonalt bibliotek for gamle bøker, manuskripter og opptegnelser for dronning Maria I
av England. Hans forslag ble ikke tatt til følge.
"""
kw_model.extract_keywords(doc, stop_words=None)
Topic Modeling
topic_model = BERTopic(embedding_model='NbAiLab/nb-sbert-base').fit(docs)
Similarity Search
pip install autofaiss sentence-transformers
from autofaiss import build_index
import numpy as np
from sentence_transformers import SentenceTransformer, util
sentences = ["This is a Norwegian boy", "Dette er en norsk gutt", "A red house"]
model = SentenceTransformer('NbAiLab/nb-sbert-base')
embeddings = model.encode(sentences)
index, index_infos = build_index(embeddings, save_on_disk=False)
query = model.encode(["A young boy"])
_, index_matches = index.search(query, 1)
print(index_matches)
📚 ドキュメント
Evaluation
sts - testデータセットでの評価結果:
属性 |
詳細 |
コサイン類似度 |
Pearson: 0.8275 Spearman: 0.8245 |
マンハッタン距離 |
Pearson: 0.8193 Spearman: 0.8182 |
ユークリッド距離 |
Pearson: 0.8190 Spearman: 0.8180 |
ドット積類似度 |
Pearson: 0.8039 Spearman: 0.7951 |
Training
モデルは以下のパラメータで学習されました。
DataLoader:
sentence_transformers.datasets.NoDuplicatesDataLoader.NoDuplicatesDataLoader (長さ16471)
パラメータ: {'batch_size': 32}
Loss:
sentence_transformers.losses.MultipleNegativesRankingLoss.MultipleNegativesRankingLoss
パラメータ: {'scale': 20.0, 'similarity_fct': 'cos_sim'}
fit()メソッドのパラメータ:
{
"epochs": 1,
"evaluation_steps": 1647,
"evaluator": "sentence_transformers.evaluation.EmbeddingSimilarityEvaluator.EmbeddingSimilarityEvaluator",
"max_grad_norm": 1,
"optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
"optimizer_params": {
"lr": 2e-05
},
"scheduler": "WarmupLinear",
"steps_per_epoch": null,
"warmup_steps": 1648,
"weight_decay": 0.01
}
Full Model Architecture
SentenceTransformer(
(0): Transformer({'max_seq_length': 75, 'do_lower_case': False}) with Transformer model: BertModel
(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})
)
🔧 技術詳細
SetFitを使用して、少数のラベル付きトレーニング例でもNLPのタスクを解決できます。'nb - sbert - base'はSetFitライブラリに直接組み込むことができます。詳細は このチュートリアル を参照してください。
📄 ライセンス
このモデルは、Apache 2.0ライセンスの下で提供されています。
Citing & Authors
このモデルは、Rolv - Arild BraatenとPer Egil Kummervoldによって学習されました。ドキュメントは、Javier de la Rosa、Rov - Arild Braaten、Per Egil Kummervoldによって作成されました。