Loading...
HF多模态

sonoisa/sentence-bert-base-ja-mean-tokens-v2

This is a Japanese sentence...

标签:

This is a Japanese sentence-bert model.

日本語用Sentence-BERTモデル(バージョン2)です。

バージョン1よりも良いロス関数であるMultipleNegativesRankingLossを用いて学習した改良版です。
手元の非公開データセットでは、バージョン1よりも1.5〜2ポイントほど精度が高い結果が得られました。

事前学習済みモデルとしてcl-tohoku/bert-base-japanese-whole-word-maskingを利用しました。
従って、推論の実行にはfugashiとipadicが必要です(pip install fugashi ipadic)。


旧バージョンの解説

https://qiita.com/sonoisa/items/1df94d0a98cd4f209051

モデル名を”sonoisa/sentence-bert-base-ja-mean-tokens-v2″に書き換えれば、本モデルを利用した挙動になります。


使い方

from transformers import BertJapaneseTokenizer, BertModel
import torch
class SentenceBertJapanese:
    def __init__(self, model_name_or_path, device=None):
        self.tokenizer = BertJapaneseTokenizer.from_pretrained(model_name_or_path)
        self.model = BertModel.from_pretrained(model_name_or_path)
        self.model.eval()
        if device is None:
            device = "cuda" if torch.cuda.is_available() else "cpu"
        self.device = torch.device(device)
        self.model.to(device)
    def _mean_pooling(self, model_output, attention_mask):
        token_embeddings = model_output[0] #First element of model_output contains all token embeddings
        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)
    @torch.no_grad()
    def encode(self, sentences, batch_size=8):
        all_embeddings = []
        iterator = range(0, len(sentences), batch_size)
        for batch_idx in iterator:
            batch = sentences[batch_idx:batch_idx + batch_size]
            encoded_input = self.tokenizer.batch_encode_plus(batch, padding="longest", 
                                           truncation=True, return_tensors="pt").to(self.device)
            model_output = self.model(**encoded_input)
            sentence_embeddings = self._mean_pooling(model_output, encoded_input["attention_mask"]).to('cpu')
            all_embeddings.extend(sentence_embeddings)
        # return torch.stack(all_embeddings).numpy()
        return torch.stack(all_embeddings)
MODEL_NAME = "sonoisa/sentence-bert-base-ja-mean-tokens-v2"  # <- v2です。
model = SentenceBertJapanese(MODEL_NAME)
sentences = ["暴走したAI", "暴走した人工知能"]
sentence_embeddings = model.encode(sentences, batch_size=8)
print("Sentence embeddings:", sentence_embeddings)

数据统计

数据评估

sonoisa/sentence-bert-base-ja-mean-tokens-v2浏览人数已经达到429,如你需要查询该站的相关权重信息,可以点击"5118数据""爱站数据""Chinaz数据"进入;以目前的网站数据参考,建议大家请以爱站数据为准,更多网站价值评估因素如:sonoisa/sentence-bert-base-ja-mean-tokens-v2的访问速度、搜索引擎收录以及索引量、用户体验等;当然要评估一个站的价值,最主要还是需要根据您自身的需求以及需要,一些确切的数据则需要找sonoisa/sentence-bert-base-ja-mean-tokens-v2的站长进行洽谈提供。如该站的IP、PV、跳出率等!

关于sonoisa/sentence-bert-base-ja-mean-tokens-v2特别声明

本站Ai导航提供的sonoisa/sentence-bert-base-ja-mean-tokens-v2都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由Ai导航实际控制,在2023年5月9日 下午7:10收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,Ai导航不承担任何责任。

相关导航

暂无评论

暂无评论...