はじめに
こんにちは。コンシューマ事業部バックエンドエンジニアの髙橋です。
以前に投稿したこちらの記事に関連して、形態素解析プラグイン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
ユーザー辞書の更新方法
反映させるユーザー辞書の作成
作成方法はこちらを見てもらえればと思います。
https://github.com/WorksApplications/Sudachi/blob/develop/docs/user_dict.md
一部私の方で試して、上手くいかなかった部分がありましたので、下記点にご注意ください。
4 見出し (解析結果表示用)の項目で
「0 見出し (TRIE 用)」と同じものを指定してください。
と記載されていますが、正規化後の文字列(12 正規化表記)を指定しないと反映されませんでした。AWS S3へアップロード
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