ユーザーの略歴
404 経歴が見つかりません
2016年7月12日からのメンバー
投稿:
返信:
@Minoru Horita さん、分かりやすいベクトル検索の紹介記事、ありがとうございます!具体的に、大量の日本語文章データをIRISに格納して、そこからIRISのSQL一発で 「意味が似ている」データをヒットさせるデモは、分かりやすくてワクワクしますね。
感想だけではなんなので、記事の一連のPythonコードを、以下のようなIRISクラスに置き換えてみました。
(1) プロパティは、日本語文書 contents とそのベクトルデータ contentsv の2つ
(2) sqlalchemy ではなく、IRIS上で INSERT文発行して、ベクトルデータを格納
全く同じロジックですが、Pythonコード含めて、少しでも他メンバーの方のご参考になればと掲載します。
Class User.nakav3 Extends %Persistent
{
Property contents As %String(MAXLEN = 4096);
Property contentsv As %Vector(DATATYPE = "DOUBLE", LEN = 768);
ClassMethod load() [ Language = python ]
{
import iris
import pandas as pd
from pyarrow.parquet import ParquetFile
import pyarrow as pa
pf = ParquetFile('/var/tmp/cc100/0000.parquet')
first_rows = next(pf.iter_batches(batch_size = 1000))
df = pa.Table.from_batches([first_rows]).to_pandas()
df = df.replace("\n","",regex=True)
for index,row in df.iterrows():
text = row['text']
iris.cls('User.nakav3').insertToIRIS(text)
print('Done')
}
ClassMethod search(question As %String)
{
if $g(question)="" set question="大都市での生活は便利な半面、混雑や環境の悪さなどの問題もある。"
set questionv=$tr(..Embedd(question)," '[]")
set sql="SELECT TOP 5 VECTOR_DOT_PRODUCT(contentsv, TO_VECTOR(?, DOUBLE, 768)) as sim, contents"
set sql=sql_" FROM SQLUser.nakav3 ORDER BY sim DESC"
set rs=##class(%SQL.Statement).%ExecDirect(.stmt,.sql,.questionv)
while rs.%Next() {
write rs.%Get("sim")," ",rs.%Get("contents"),!
}
}
ClassMethod insertToIRIS(text As %String)
{
set textv=$tr(..Embedd(text)," '[]")
&sql(insert into SQLUser.nakav3 (contents, contentsv) values (:text, TO_VECTOR(:textv, DOUBLE, 768) ) )
}
ClassMethod Embedd(text) As %String [ Language = python ]
{
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('stsb-xlm-r-multilingual')
embeddings = model.encode(text)
# convert the embeddings to a string
embeddings_list = [str(embedding.tolist()) for embedding in embeddings]
return str(embeddings_list)
}
}
データロード
do ##class(User.nakav3).load()
データ検索
do ##class(User.nakav3).search("大都市での生活は便利な半面、混雑や環境の悪さなどの問題もある。")
当日パネルディスカッションの進行役をつとめさせていただきました。
パネラーのみなさんが嬉しそうに IRIS にまつわる技術論をお話される姿と、会場のみなさんがその話を真剣にうんうん頷いて聞かれている姿、両方が良く見えて、司会席でニヤニヤしぱなっしでした。とても楽しい一日でした。
会場にお越しいただいたみなさま、本当にありがとうございました。
Open Exchange アプリケーション:
認定証と Credly バッジ:
Seisukeさんはまだ認定証と Credly バッジを取得していません.
Global Mastersバッジ:
Seisukeさんはグローバルマスターズバッジをまだ取得していません。
フォロワー:
フォロー中:
Seisukeさんはまだ誰もフォローしていません。
上記(2)は、あくまでテキストベースで参照するための簡単なサンプルになります。
そのため、グローバルの値が gval=$LB("abc","xyz") や gval="abc"_$C(1)_"xyz" など制御コードが含まるときは、ファイルにはそのまま出力されませんので、その点ご注意くださいませ。
「そのようなデータも見たいな」と言われる方は、コメントなどでお寄せください。