Ccmmutty logo
Commutty IT
2 min read

sentence-transformersの類似文計算で作成した検索器(要リポジトリ参照)

https://cdn.magicode.io/media/notebox/blob_3xzatLw
自分なりに汎用性が高いと思ったので、日本語と英語について検索器を開発しました。オブジェクトに文書リストを登録して、探したい文章に対してsimilardoc関数を呼ぶだけです。バッチ処理もできますが、実装は統一されてません。読者様の方で諸々手直しお願いします。
動作にはこちらのレポジトリが必要となります。 ※このページでは動きません。
python
import sys
sys.path.append("./src")
from agbert import EnBertEmb, JaBertEmb

英語 類似分検索

python
#オブジェクトの初期化
EBE = EnBertEmb()
python
#文字列リストの用意
docs = ["I ate an apple",
        "You ate a banana",
        "Ukrainian ambushed on Russian tanks",
        "Drone footage shows Russian tank column retreat after artillery",
        "GNU is not unix",
        "Who are you?",
        "Where you are?"
       ]
python
#文書の登録
matrix = EBE.register(docs)

100%|███████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 76.63it/s]
python
#類似分検索
EBE.similardoc(docs[3])

0.022360 sec for search
['Drone footage shows Russian tank column retreat after artillery', 'Ukrainian ambushed on Russian tanks', 'Where you are?', 'GNU is not unix', 'Who are you?', 'You ate a banana', 'I ate an apple']
python
#計算済み特徴量(行列)&文書の保存
EBE.save()
python
#計算済み特徴量(行列)&文書の読み込み
EBE.load()

日本語 類似分検索

python
#オブジェクトの初期化
JBE = JaBertEmb()
python
#文字列リストの用意
docs = ["向こうの店のほうが安いからこっちでは買わない。",
        "この店は良い品を置いている。",
        "ここで売っている物は質がいい。",
        "自然言語処理系のお仕事の報酬は最低賃金以下だから労働基準法に触れるかもしれない。",
        "開会式で大声出して暴れたら、民法90条の公序良俗関係で訴えられるかも",
        "自動運転車が天下一品の看板を赤信号と認識して道路交通法違反となる可能性がある。",
        "アメリカの法律と日本の法律は違うのか。",
        "郷に入っては郷に従え",
        "長いものに巻かれる",
        "出る杭は伸ばす"
       ]
python
#文書の登録
matrix = JBE.register(docs)

100%|█████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.17it/s]
python
#類似分検索
JBE.similardoc(docs[3])

100%|███████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 10.10it/s]
0.102025 sec for search
['自然言語処理系のお仕事の報酬は最低賃金以下だから労働基準法に触れるかもしれない。', '自動運転車が天下一品の看板を赤信号と認識して道路交通法違反となる可能性がある。', '開会式で大声出して暴れたら、民法90条の公序良俗関係で訴えられるかも', 'アメリカの法律と日本の法律は違うのか。', '向こうの店のほうが安いからこっちでは買わない。', 'ここで売っている物は質がいい。', 'この店は良い品を置いている。', '出る杭は伸ばす', '郷に入っては郷に従え', '長いものに巻かれる']
python
#計算済み特徴量(行列)&文書の保存
JBE.save()
python
#計算済み特徴量(行列)&文書の読み込み
JBE.load()

Discussion

コメントにはログインが必要です。