A presentation at Weaviate Japan Summit in December 2024 in Tokyo, Japan by Jun Ohtani
Weaviateの日本語対応と マルチモーダル・多言語 検索デモ 2024/12/11 Jun Ohtani / @johtani 1
自己紹介 フリーランスエンジニア / コンサルタント 検索技術勉強会主催者の一人 検索システムの著者の一人 (ラムダノートより出版) 2
宣伝 絶賛発売中 検索についてはこちらの本が いいらしいです (ベクトル検索については説明はない ですが。。。) 以下、書籍のページへ 3
検索とは 検索とは、データの集合の中から 目的のデータを探し出すことである。 また、目的のデータが存在しないことの 確認行為も含まれる。 — Wikipediaより https://ja.wikipedia.org/wiki/検索 4
検索の手法 おもな検索システムの仕組み Grep(ファイル内検索) 文字の一致検索(先頭から文字列を見ていく) キーワード検索 転置インデックス ベクトル検索 ベクトル表現による近傍検索 5
検索ユースケース - Grep 6
検索ユースケース - 本 7
ベクトル検索 キーワード検索よりも柔軟な 検索が可能 「意味」が近いものを検 索 同義語、類義語など テキスト以外のデータも検索 可能 8
デモ CLIPを用いて文章から画像を検索する デモに使用したデータ MS COCOの画像のうち商用利用可能なライセンスの画像 https://cocodataset.org/#home 日本語のキャプションデータ http://captions.stair.center/ 9
デモ画面 10
何が苦手?何が得意? ベクトル的に近いとは? 意味合いの「似たもの」が検索できる 近いか近くないかの判断基準が難しい この「キーワード」を含む(含まない)検索 特定の単語を必ず含む検索が難しい 11
キーワード検索 転置インデックス キーワードからIDのリストを 取得 リストをもとにORやAND、 NOT検索も可能 キーワードが違えば違うデー タ 12
キーワード? どうやって文章からキーワードを作る? 「Weaviate is awesome」 「Weaviateはすばらしい」 「Weaviate ist erstaunlich」 「Weaviate는 훌륭합니다.」 13
英語と日本語の違い 英語でキーワードは空白区切り 「Weaviate is awesome」 「Weaviate」「is」「awesome」 じゃあ、日本語でキーワードは? 「Weaviateはすばらしい」 「Weaviate」「は」「すばらしい」 14
どうして日本語対応? 日本語の場合はそもそもキーワードを選び出すのが大変 選び出す方法は1つだけではない ベクトルだとLLMなどがいい感じにベクトルにしてくれる モデルが日本語に対応していればいい (実際にはどんな日本語に対応しているか?など考慮すべき点はあ る) 15
Weaviateでの日本語キーワード検索 Tri-gram 文字N-gram(N=3) GSE 形態素解析ライブラリ https://github.com/go-ego/gse Kagome JP(NEW!) 形態素解析ライブラリ https://github.com/ikawaha/kagome 16
Tri-gram 入力:「Weaviateはすばらしい」 出力:「wea」「eav」「avi」「via」 「iat」「ate」「teは」「eはす」「はす ば」「すばら」「ばらし」「らしい」 17
Tri-gram メリット 辞書不要 部分一致する Weaviate Cloudでも使える デメリット 不自然な単語がある 出てくる単語が多数 18
GSE 入力:「Weaviateはすばらしい」 出力:「w」「e」「a」「v」「i」「a」 「t」「e」「はす」「すばらし」「すばら しい」「ばら」「ばらし」「らし」「らし い」「しい」 19
GSE メリット 辞書にある単語をできるだけ 部分一致する デメリット 英単語は1文字ずつに分割 不自然な単語がある 辞書が必要 Weaviate Cloudでは使えない(まだ) 20
Kagome(今回追加したもの) 入力:「Weaviateはすばらしい」 出力:「weaviate」「は」「すばらしい」 21
Kagome(今回追加したもの) メリット 辞書にある単語 不要な単語が出ない デメリット 単語中の部分一致はしない 辞書が必要 Weaviate Cloudでは使えない(まだ) 22
実際にデモで検索してみよう CLIPを用いて文章から画像を検索する デモに使用したデータ MS COCOの画像のうち商用利用可能なライセンスの画像 https://cocodataset.org/#home 日本語のキャプションデータ http://captions.stair.center/ 23
デモ グリンピースのサラダ バスケットボールの試合 24
設定(環境変数) 起動時に環境変数で設定(GSEとKagome) ENABLE_TOKENIZER_GSE=true ENABLE_TOKENIZER_KAGOME_JA=true ENABLE_TOKENIZER_KAGOME_KR=true 韓国語用もあります Weaviate Cloudだと? 25
設定(スキーマ 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
設定(スキーマ 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
もっと日本語検索をいい感じにするためには? 文字正規化 半角全角 合字 カスタム辞書 類義語 ユーザー辞書(形態素解析) フレーズ検索 28
文字正規化 半角・全角 カタカナ、カタカナ katakana、katakana 123、123 合成済み文字 「ガ」と「ガ」 「 ガ 」と「 ガ 」 29
カスタム辞書 類義語、アクロニム 「羽田空港」=「東京国際空港」 「NASA」=「National Aeronautics and Space Administration」 ユーザー辞書 新しい単語はシステム辞書にはない 「圏央道」「副都心線」 30
フレーズ検索 日本語は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
まとめ Weaviateは日本語も検索できる ベクトルでも キーワードでも ハイブリッドも可能 キーワード検索での選択肢は3つ Tri-gram、GSE、Kagome 今日から試して見れる(かも?) 32
View Weaviateの日本語対応とマルチモーダル・多言語検索デモ on Notist.
Dismiss
Weaviateの1.28からサポートされるKagome JAに関連して、キーワード検索で日本語を利用するときの方法と気を付ける点を発表しました。