メインコンテンツへスキップ
見出し画像

Sentence Transformers の使い方

    「Sentence Transformers」を使って、文をベクトル表現に変換し、文の類似度を計算してみます。

    ・Sentence Transformers 1.1.1

    1. Sentence Transformers

    「Sentence Transformers」は、文や画像をベクトル表現に変換することができる深層学習モデルです。

    2. 文をベクトル表現に変換

    「Google Colab」で、文をベクトル表現に変換する手順は、次のとおりです。

    (1) 「Sentence Transformers」のインストール。

    # Sentence Transformersのインストール
    !pip install sentence_transformers==1.1.1

    (2) モデルの読み込み。

    from sentence_transformers import util, SentenceTransformer
    
    # モデルの読み込み
    model = SentenceTransformer('stsb-xlm-r-multilingual')

    (3) 文をベクトル表現に変換。
    入力文と、検索対象文を定義し、model.encode()を使って、ベクトル表現に変換します。

    # 入力文をベクトル表現に変換
    sentence = '今日は雨振らなくてよかった'
    embedding = model.encode(sentence, convert_to_tensor=True)
    
    # 検索対象文をベクトル表現に変換
    sentences = [
        '好きな食べ物は何ですか?',
        'どこにお住まいですか?',
        '朝の電車は混みますね',
        '今日は良いお天気ですね',
        '最近景気悪いですね']
    embeddings = model.encode(sentences, convert_to_tensor=True)

    (4) 入力文と検索対象文のベクトル表現の類似度を計算。
    util.pytorch_cos_sim()を使って、入力文と検索対象文のベクトル表現の類似度を計算します。

    # 入力文と検索対象文のベクトル表現の類似度を計算
    scores = util.pytorch_cos_sim(embedding, embeddings)
    predicted_idx = scores.argmax(1).item() # スコアが最大のインデックスの取得
    print('文:', sentence)
    print('類似文:', sentences[predicted_idx])
    print('類似度:', scores)
    文: 今日は雨振らなくてよかった
    類似文: 今日は良いお天気ですね
    類似度: tensor([[ 0.0784, -0.0779,  0.2306,  0.6025,  0.5275]], device='cuda:0')

    「今日は雨振らなくてよかった」に一番似ている文は、「今日は良いお天気ですね」であることがわかります。

    入力文を変えると、結果も変わります。

    文: ハンバーガーは好きですか?
    類似文: 好きな食べ物は何ですか?
    類似度: tensor([[ 0.5839,  0.0653, -0.0964,  0.1122,  0.0838]], device='cuda:0')

    「ハンバーガーは好きですか?」に一番似ている文は、「好きな食べ物は何ですか?」であることがわかります。


     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ