Weaviateの日本語対応とマルチモーダル・多言語検索デモ

A presentation at Weaviate Japan Summit in December 2024 in Tokyo, Japan by Jun Ohtani

Slide 1

Slide 1

Weaviateの日本語対応と マルチモーダル・多言語 検索デモ 2024/12/11 Jun Ohtani / @johtani 1

Slide 2

Slide 2

自己紹介 フリーランスエンジニア / コンサルタント 検索技術勉強会主催者の一人 検索システムの著者の一人 (ラムダノートより出版) 2

Slide 3

Slide 3

宣伝 絶賛発売中 検索についてはこちらの本が いいらしいです (ベクトル検索については説明はない ですが。。。) 以下、書籍のページへ 3

Slide 4

Slide 4

検索とは 検索とは、データの集合の中から 目的のデータを探し出すことである。 また、目的のデータが存在しないことの 確認行為も含まれる。 — Wikipediaより https://ja.wikipedia.org/wiki/検索 4

Slide 5

Slide 5

検索の手法 おもな検索システムの仕組み Grep(ファイル内検索) 文字の一致検索(先頭から文字列を見ていく) キーワード検索 転置インデックス ベクトル検索 ベクトル表現による近傍検索 5

Slide 6

Slide 6

検索ユースケース - Grep 6

Slide 7

Slide 7

検索ユースケース - 本 7

Slide 8

Slide 8

ベクトル検索 キーワード検索よりも柔軟な 検索が可能 「意味」が近いものを検 索 同義語、類義語など テキスト以外のデータも検索 可能 8

Slide 9

Slide 9

デモ CLIPを用いて文章から画像を検索する デモに使用したデータ MS COCOの画像のうち商用利用可能なライセンスの画像 https://cocodataset.org/#home 日本語のキャプションデータ http://captions.stair.center/ 9

Slide 10

Slide 10

デモ画面 10

Slide 11

Slide 11

何が苦手?何が得意? ベクトル的に近いとは? 意味合いの「似たもの」が検索できる 近いか近くないかの判断基準が難しい この「キーワード」を含む(含まない)検索 特定の単語を必ず含む検索が難しい 11

Slide 12

Slide 12

キーワード検索 転置インデックス キーワードからIDのリストを 取得 リストをもとにORやAND、 NOT検索も可能 キーワードが違えば違うデー タ 12

Slide 13

Slide 13

キーワード? どうやって文章からキーワードを作る? 「Weaviate is awesome」 「Weaviateはすばらしい」 「Weaviate ist erstaunlich」 「Weaviate는 훌륭합니다.」 13

Slide 14

Slide 14

英語と日本語の違い 英語でキーワードは空白区切り 「Weaviate is awesome」 「Weaviate」「is」「awesome」 じゃあ、日本語でキーワードは? 「Weaviateはすばらしい」 「Weaviate」「は」「すばらしい」 14

Slide 15

Slide 15

どうして日本語対応? 日本語の場合はそもそもキーワードを選び出すのが大変 選び出す方法は1つだけではない ベクトルだとLLMなどがいい感じにベクトルにしてくれる モデルが日本語に対応していればいい (実際にはどんな日本語に対応しているか?など考慮すべき点はあ る) 15

Slide 16

Slide 16

Weaviateでの日本語キーワード検索 Tri-gram 文字N-gram(N=3) GSE 形態素解析ライブラリ https://github.com/go-ego/gse Kagome JP(NEW!) 形態素解析ライブラリ https://github.com/ikawaha/kagome 16

Slide 17

Slide 17

Tri-gram 入力:「Weaviateはすばらしい」 出力:「wea」「eav」「avi」「via」 「iat」「ate」「teは」「eはす」「はす ば」「すばら」「ばらし」「らしい」 17

Slide 18

Slide 18

Tri-gram メリット 辞書不要 部分一致する Weaviate Cloudでも使える デメリット 不自然な単語がある 出てくる単語が多数 18

Slide 19

Slide 19

GSE 入力:「Weaviateはすばらしい」 出力:「w」「e」「a」「v」「i」「a」 「t」「e」「はす」「すばらし」「すばら しい」「ばら」「ばらし」「らし」「らし い」「しい」 19

Slide 20

Slide 20

GSE メリット 辞書にある単語をできるだけ 部分一致する デメリット 英単語は1文字ずつに分割 不自然な単語がある 辞書が必要 Weaviate Cloudでは使えない(まだ) 20

Slide 21

Slide 21

Kagome(今回追加したもの) 入力:「Weaviateはすばらしい」 出力:「weaviate」「は」「すばらしい」 21

Slide 22

Slide 22

Kagome(今回追加したもの) メリット 辞書にある単語 不要な単語が出ない デメリット 単語中の部分一致はしない 辞書が必要 Weaviate Cloudでは使えない(まだ) 22

Slide 23

Slide 23

実際にデモで検索してみよう CLIPを用いて文章から画像を検索する デモに使用したデータ MS COCOの画像のうち商用利用可能なライセンスの画像 https://cocodataset.org/#home 日本語のキャプションデータ http://captions.stair.center/ 23

Slide 24

Slide 24

デモ グリンピースのサラダ バスケットボールの試合 24

Slide 25

Slide 25

設定(環境変数) 起動時に環境変数で設定(GSEとKagome) ENABLE_TOKENIZER_GSE=true ENABLE_TOKENIZER_KAGOME_JA=true ENABLE_TOKENIZER_KAGOME_KR=true 韓国語用もあります Weaviate Cloudだと? 25

Slide 26

Slide 26

設定(スキーマ in Go) Properties: []*models.Property{ … { DataType: []string{schema.DataTypeTextArray.String()}, Description: “Caption in Japanese”, Name: “caption_ja_gse”, Tokenization: models.PropertyTokenizationGse, }, { DataType: []string{schema.DataTypeTextArray.String()}, Description: “Caption in Japanese”, Name: “caption_ja”, Tokenization: models.PropertyTokenizationKagomeJa, }, … } 26

Slide 27

Slide 27

設定(スキーマ in Python) … properties=[ wc.Property(name=”caption_ja_gse”, data_type=wc.DataType.TEXT, tokenization=wc.Tokenization.GSE ), wc.Property(name=”caption_ja”, data_type=wc.DataType.TEXT, tokenization=wc.Tokenization.KAGOME_JA ), ] … 27

Slide 28

Slide 28

もっと日本語検索をいい感じにするためには? 文字正規化 半角全角 合字 カスタム辞書 類義語 ユーザー辞書(形態素解析) フレーズ検索 28

Slide 29

Slide 29

文字正規化 半角・全角 カタカナ、カタカナ katakana、katakana 123、123 合成済み文字 「ガ」と「ガ」 「 ガ 」と「 ガ 」 29

Slide 30

Slide 30

カスタム辞書 類義語、アクロニム 「羽田空港」=「東京国際空港」 「NASA」=「National Aeronautics and Space Administration」 ユーザー辞書 新しい単語はシステム辞書にはない 「圏央道」「副都心線」 30

Slide 31

Slide 31

フレーズ検索 日本語はTokenizationで単語分割される GSEやTrigramでは「weaviate」が分割される 「wea」「eav」「avi」「via」「iat」「ate」 「w」「e」「a」「v」「i」「a」「t」「e」 ORで検索するとノイズが多い FR: Phrase Matching on text property queries #2688 https://github.com/weaviate/weaviate/issues/2688 31

Slide 32

Slide 32

まとめ Weaviateは日本語も検索できる ベクトルでも キーワードでも ハイブリッドも可能 キーワード検索での選択肢は3つ Tri-gram、GSE、Kagome 今日から試して見れる(かも?) 32