ailia Tech BLOG

SentenceTransformer : テキストからEmbeddingを取得する言語処理モデル

ailia SDKで使用できる機械学習モデルである「SentenceTransformer」のご紹介です。エッジ向け推論フレームワークであるailia SDKailia MODELSに公開されている機械学習モデルを使用することで、簡単にAIの機能をアプリケーションに実装することができます。

SentenceTransformerの概要

SentenceTransformerはBERTをFineTuningしたモデルです。テキストからテキストの意味を示す特徴ベクトルであるEmbeddingを取得するのに最適な形でFineTuningされています。

テキストのEmbeddingを取得するAPIとしては、OpenAIのtext-embedding-ada-002が有名ですが、そこまでの精度が必要ない場合は、SentenceTransformerを使用することで、オフラインでAPI使用料不要で実行可能になります。

モデルサイズはマルチリンガルモデルで1.1GBです。

SentenceTransformer

sentence-transformers/paraphrase-multilingual-mpnet-base-v2 · Hugging FaceThis is a sentence-transformers model: It maps sentences & paragraphs to a 768 dimensional dense vector space and can…huggingface.co

SentenceTransformerのアーキテクチャ

SentenceTransformerでは、BERTのトークンごとのEmbeddingをPoolingすることで、テキストのEmbeddingを計算し、同じ意味のテキスト間のEmbeddingの距離を最小化するようにFine Tuningされています。

出典:https://arxiv.org/pdf/1908.10084.pdf

単純にBERTのトークンごとのEmbeddingの平均を使用した場合はAvgで54.81の精度ですが、Fine Tuningすることで、76.68まで精度が改善しています。

出典:https://arxiv.org/pdf/1908.10084.pdf

Sentence-BERT: Sentence Embeddings using Siamese BERT-NetworksBERT (Devlin et al., 2018) and RoBERTa (Liu et al., 2019) has set a new state-of-the-art performance on sentence-pair…arxiv.org

マルチリンガルモデル

SentenceTransformerはマルチリンガルモデル(paraphrase-multilingual-mpnet-base-v2)が公開されています。日本語を含む複数の言語(50+ languages)で共通のEmbeddingを取得可能です。Embeddingの次元数は768です。

マルチリンガルモデルは知識蒸留を用いて、多言語のEmbeddingを単一言語のEmbeddingに変換しています。

出典:https://arxiv.org/pdf/2004.09813.pdf

Making Monolingual Sentence Embeddings Multilingual using Knowledge DistillationWe present an easy and efficient method to extend existing sentence embedding models to new languages. This allows to…arxiv.org

sentence transformersで日本語を扱えるモデルのまとめSentence Transformers を用いて文章の埋め込みベクトルを作成できます。 以下のように応用できます。 文章埋め込みベクトル Semantic Textual Similarity クラスタリング 言い換えの探索…tech.yellowback.net

Tokenizer

SentenceTransformerでは、XLMRoBERTaのTokenizerを使用しています。Sentence Pieceを使用しており、Sentence PieceのSentencePieceProcessorの主力シンボルを並べ替えることで、XLMRoBERTaのトークンを取得可能です。

トークンの変換ルール

ailia SDKから使用する

ailia SDKから使用するには、下記のようにします。

$ python3 sentence_transformer_japanese.py -i input.txt

入力したテキストに対して質問を行い、質問のEmbeddingと文章のEmbeddingの距離を計算し、最も近いテキストを出力することが可能です。

User (press q to exit): nnapiの速度  
Text: 実際、弊社でもSnapdragon 8+ Gen1とyolox_tinyにおいて、CPU(float)に比べてNNAPI NPU(int8)で15倍高速に動作することを確認しています。 (Similarity:0.592)

マルチリンガルモデルなため、英語でもクエリすることが可能です。

User (press q to exit): How fast nnapi?  
Text: 実際、弊社でもSnapdragon 8+ Gen1とyolox_tinyにおいて、CPU(float)に比べてNNAPI NPU(int8)で15倍高速に動作することを確認しています。 (Similarity:0.691)

ailia-models/natural_language_processing/sentence_transformers_japanese at master ·…TEXT or PDF file. The sentence closest to the input prompt. This model requires additional module if you want to load…github.com


アイリア株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。アイリア株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。