ユーザーの略歴
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 にまつわる技術論をお話される姿と、会場のみなさんがその話を真剣にうんうん頷いて聞かれている姿、両方が良く見えて、司会席でニヤニヤしぱなっしでした。とても楽しい一日でした。

会場にお越しいただいたみなさま、本当にありがとうございました。

VSCodeのワークスペースを作成・保存
> この作業はUIで行っても良いのですが、

ここの UI 作業については、以下の記事でスクリーンショット付きで公開しています。少し古いですが、2023年10月現在でも同じ手順で登録できます。「鉛筆マーク」 クリックで登録されます。

https://jp.community.intersystems.com/node/493616
3. クラス定義やルーチンを編集する

Open Exchange アプリケーション:
認定証と Credly バッジ:
Seisukeさんはまだ認定証と Credly バッジを取得していません.
Global Mastersバッジ:
Seisukeさんはグローバルマスターズバッジをまだ取得していません。
フォロワー:
フォロー中:
Seisukeさんはまだ誰もフォローしていません。