asken テックブログ

askenエンジニアが日々どんなことに取り組み、どんな「学び」を得ているか、よもやま話も織り交ぜつつ綴っていきます。 皆さまにも一緒に学びを楽しんでいただけたら幸いです!

Sudachiのユーザー辞書を使ったOpenSearch検索改善について

はじめに

こんにちは。コンシューマ事業部バックエンドエンジニアの髙橋です。

以前に投稿したこちらの記事に関連して、形態素解析プラグインSudachiのユーザー辞書を使ったあすけんメニュー検索改善の話をさせていただこうかと思います。

この記事は、株式会社asken (あすけん) Advent Calendar 2024の4日目の記事です

あすけんメニュー検索画面

なぜ今回ユーザー辞書を使おうと思ったか

あすけんの「メニュー検索」において、セブンイレブンセブンとキーワード検索するユーザーが多い傾向がわかりました。しかし、あすけんではセブンの略称では検索としてヒットしません。そのため、セブンと検索した際にユーザーの期待通りセブンイレブンの商品がヒットするようにしたい、と考えたことがきっかけでした。

Sudachiとは

Sudachi は Java で書かれたオープンソースの日本語形態素解析器です。 ワークス徳島人工知能NLP研究所により提供されているソフトウェアの1つです。 なお、Python版の SudachiPy、Rust版の Sudachi.rs もあります。

引用: https://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/Sudachi.html

自然言語処理に特化した研究機関であるワークス徳島人工知能NLP研究所が開発していて、「Sudachi辞書」と言われる深い知識と長年の経験を持った専門家の叡智の結晶が備わっているのが特徴だそうです。

Sudachiの公式ページ:https://github.com/WorksApplications/Sudachi/tree/develop

Sudachi辞書に関しては、こちらの記事がとても参考になります。 https://zenn.dev/sorami/articles/c9a506000fd1fbd1cf98

ユーザー辞書の更新方法

  1. 反映させるユーザー辞書の作成

    作成方法はこちらを見てもらえればと思います。

    https://github.com/WorksApplications/Sudachi/blob/develop/docs/user_dict.md

    一部私の方で試して、上手くいかなかった部分がありましたので、下記点にご注意ください。

    4 見出し (解析結果表示用)の項目で「0 見出し (TRIE 用)」と同じものを指定してください。 と記載されていますが、正規化後の文字列(12 正規化表記)を指定しないと反映されませんでした。

  2. AWS S3へアップロード

  3. AWS OpenSearch Service カスタムパッケージを設定

    詳しくはこちらを参照してください。

    https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/custom-packages.html

    注意点としては、設定後ブルーグリーンデプロイが実行される変更を行わないと更新結果が反映されません。

優秀なSudachi辞書はあるものの、サービス独自に判断したい検索キーワードを日々溜めていき、一定の期間で辞書に登録していくことで、よりそのサービスらしい検索結果が得られるようになります。

ちなみにあすけんでは、日々のユーザー検索のデータをBigQueryで集計し、ユーザー辞書に登録した方が良い検索キーワードをチームで精査した上で、定期的に辞書に反映させる活動を実施しています。OpenSearchの全文検索だけでは上がらない精度もユーザー辞書を使うことで確実に改善していくことができます。

改善結果

ユーザー辞書を活用することでセブンセブンイレブンと解釈されるようになりました。結果、ユーザーが普段使用している言葉で、より直感的にメニュー検索ができるようになりました。

今回のような形態素解析された単語が、他の意味にも解釈されるがサービス内では特定の意味を持つケースのように、サービス特有のキーワードでヒットさせたい場合にユーザー辞書での改善は大いに役立つと思います。

まとめ

改善内容としては簡易的なものですが、ユーザー辞書の作成やOpenSearchに反映させる際のちょっとした躓きポイントも共有させていただきました。

誰かの参考になれば幸いです。

参考

www.mlab.im.dendai.ac.jp github.com zenn.dev docs.aws.amazon.com

積極採用中です

askenではエンジニアを募集しています。 よろしくお願いします。 https://www.asken.inc/jobwww.asken.inc