Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Tech Kitchen #31 - グローバル版でMeCab辞書も管理したい
Search
k-ush
April 24, 2025
Technology
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Tech Kitchen #31 - グローバル版でMeCab辞書も管理したい
https://cookpad.connpass.com/event/351099/
k-ush
April 24, 2025
Other Decks in Technology
See All in Technology
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
290
AI Native Platform Engineering 〜PlatformとAgileで“作る速さ”を“価値”へ〜
uya116
0
590
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
160
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
290
GitHub Agentic Workflows を触ってみる
htkym
2
910
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
140
20260930_Gemma4_Hands-on
tsho
0
210
Incremental HTTP
kazuho
5
1.9k
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
510
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
130
Databricksメトリクスビューはじめてのもくもく会
taka_aki
0
150
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
My Coaching Mixtape
mlcsv
0
330
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Chasing Engaging Ingredients in Design
codingconduct
0
340
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
480
First, design no harm
axbom
PRO
2
1.3k
Designing Powerful Visuals for Engaging Learning
tmiket
1
590
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Amusing Abliteration
ianozsvald
1
320
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Transcript
グローバル版で MeCab辞書 も管理したい Kota Usuha (薄羽 皐太)
自己紹介 • 薄羽皐太 • 去年クックパッドに新卒入社(24卒) • 検索チームで検索機能開発に従事 • それまで 大学で深層学習ベース
検索モデル 研究
MeCab辞書と ? - MeCab 形態素解析 結果を制御するため も 。ユーザ辞書 - 例:餡子(あんこ)を
餡 / 子 に分けずに、1単語にしたい 簡単!餡子 まんじゅう 簡単 (名詞) / !(記号) / 餡子 (名詞) / (助詞) / まんじゅう (名詞) MeCab MeCab辞書 背景(1/2) - 検索 単語ベース マッチング - 変に分かち書きされてしまうと、困る場合がある 例: 餡子が餡 / 子 で別れると、餡(あん、餡かけ 餡など)でもヒットしてしまう なぜわかち書きが必要な か
One Experienceプロジェクト - 日本側 システム 全てグローバル版に移行 - グローバル版 システム 中で、日本語検索
改善再現を目指していた - 日本語 辞書を管理している部分も、グローバル版 方に移行する必要がある 背景(2/2)
アプリケーションサイドで辞書を利用している 「Elasticsearch sudachiプラグイン入れて、ユーザ辞書入れてreindexして終わりでしょ?」 - 日本側 cookpadで 、文書を事前にトークナイズしてからインデックスしていた - 移行で 、完全再現するために我々もそ
方法に則った - 検索側とインデックスする側 両方で辞書が必要 移行 課題(1 /3) Indexer Searcher Elasticsearch MeCab辞書 MeCab辞書 餡子,まんじゅう まんじゅう + 属性付与など... 餡子まんじゅう レシピ まんじゅう クエリ
システム間で辞書 同期を取る必要がある - インデックスする側と、検索する側両方で辞書が必要(それぞれ 独立したシステム) - 単語ベース 検索で 、わかち書きが一致しないと検索できない 移行
課題(2 /3) Indexer Searcher Elasticsearch 餡子,まんじゅう 餡,子 , まんじゅう + 属性付与など... 餡子まんじゅう レシピ 餡子 クエリ MeCab辞書 餡子:あんこ MeCab辞書 No Entry … new✨ old 「餡子」で検索してもヒットしない! → 辞書 同期 が取れていないと、適切に検索できない! 例
- グローバル版にも語彙を管理するシステム ある - が、辞書を使ってわかち書きを制御するようなこと していない - ファイルをIndexer-Searcher間で同期させるといったこともしていない → スッと日本語用
処理入れて終わり!と 行かない 語彙 管理 しているが、わかち書き 制御に辞書を使っていない 移行 課題(3 /3)
辞書をバージョニングして、 Elasticsearchを介して同期 移行した方法(1 /4) - 語彙管理システムにMeCab管理・生成機能を持たせ、S3を介して辞書を共有 - 辞書にバージョンを付与し、レシピに使った辞書バージョンを保持 - Searcher
レシピ 辞書バージョンを元に同期 Indexer Searcher Elasticsearch S3 生成・アップロード レシピに使った辞書 バージョンも記録 mecab.dic.1 mecab.dic.2 … mecab.dic.7 レシピ 辞書バージョン: 7 語彙管理 システム 辞書をバージョニング MeCab辞書を生成 辞書 同期 辞書バージョンを キャッシュ
グローバル版 語彙管理システムに、 Mecab辞書生成機能を生やす 移行した方法(2 /4) - 語彙管理システムにわかち書き制御用 モデルを追加 - MeCab辞書を管理できるように
- わかち書き制御データ インポートジョブを作成して、日本 データをインポート - MeCab辞書生成ジョブを作成 - 生成した辞書 生成した辞書 S3に保存し、必要なシステム全てからアクセスできるように 各種ジョブ・ わかち書き モデル 追加 Indexer Searcher Elasticsearch S3 生成・アップロード レシピに使った辞書 バージョンも記録 mecab.dic.1 mecab.dic.2 … mecab.dic.7 レシピ 辞書バージョン: 7 語彙管理 システム 辞書をバージョニング MeCab辞書を生成 辞書 同期
辞書にバージョンを付与・使った辞書 バージョンをレシピに持たせる 移行した方法(3 /4) - 同じ辞書をIndexerとSearcherで使うために、辞書をバージョニング - レシピ メタデータとして「ど バージョン
辞書でわかち書きしたか」を記録 → そ レシピインデックス ど 辞書を使っている かを知ることができる → 辞書 同期に利用できる Indexer Searcher Elasticsearch S3 生成・アップロード レシピに使った辞書 バージョンも記録 mecab.dic.1 mecab.dic.2 … mecab.dic.7 レシピ 辞書バージョン: 7 語彙管理 システム 辞書をバージョニング MeCab辞書を生成 辞書 同期
移行した方法(4 /4) 検索サイド 使われている辞書 バージョンをチェックし、同期する - 新しい辞書を使うことで なく、Indexerとバージョンを合わせることが重要 - Searcherにスケジューラを導入して、今使われている辞書
バージョンを5分間隔で確認 - 辞書バージョンに更新があったら、そ バージョン 辞書をフェッチして使う → 5分以内に辞書 同期ができる - redisを使って、Searcherが複数いる場合 Elasticsearchへ lookupを減らす Indexer Searcher Elasticsearch S3 生成・アップロード レシピに使った辞書 バージョンも記録 mecab.dic.1 mecab.dic.2 … mecab.dic.7 レシピ 辞書バージョン: 7 語彙管理 システム 辞書をバージョニング MeCab辞書を生成 辞書 同期 辞書バージョンを キャッシュ
要件を正しく見直す - リアルタイムで流れてくるレシピや検索 中で、辞書更新時に わかち書き 不整合が起きて しまうタイミングがある - こ 不整合が起きてしまう時間をなるべく小さくしたい!
- ここを頑張ろうとすると、色々大変 ... - しかし、よく考えると辞書更新 頻度 低く、影響も小さいことがほとんど → 数分 ギャップを許容することで、工数・時間 削減に繋がった 学び: - 要件を正しく見直して、必要 ないも を実装しない → 工数・時間を削減 大変だったこと・学び(1 /2)
作業を進めていく途中で設計時に 気づかなかった課題点が見つかった - 「こうすれ いい」と思っていた部分に抜けがあり、それで 不十分であることが判明 - 今回 そこまで深い問題にならなかったが、ヒヤッとした 学び:
- 基礎的な構造(どこでデータを持って、どう流れるか等)に無理がなけれ 、具体的な手段で問題 があっても迂回しやすい - 今回 、辞書 バージョンをレシピに持たせたことが効いた - 実態を正しく表現できているし、設計で迷いが少なかった 大変だったこと・学び(2 /2)
Appendix
1. 共有ボリュームを用意するという方法もあった - しかし、インデックス 作り直しが必要な時点で、 IndexerとSearcherで辞書ファイルを同時に更新する必 要がない - そ ため、それであれ
わざわざ共有ボリュームを用意するより S3に配置する方が楽 なぜS3な か 大変だったこと・学び(1 /3)
移行 課題(4 /4) - 移行で 検索結果 再現を目指している - 辞書生成 違いによって、検索結果がわかってしまう恐れ
- 完全再現を目指していた に遠ざかる 元とわかち書き 結果が変わって 困る
新しいバージョン 辞書を使う - 新しい辞書を使うとき 、インデックス 再作成をする - インデックス 再作成 タイミングで、新しい辞書をフェッチして使用
- 新しい辞書でレシピをわかち書き - レシピ 辞書バージョンを更新 - 検索サイド 、新しい辞書バージョンを検出して、辞書をSyncする 新しいバージョン辞書を使う →インデックスを再作成