Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tech Kitchen #31 - グローバル版でMeCab辞書も管理したい
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
600
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
230
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
630
【視聴者参加型!】AWSセキュリティアンチパターンクイズ
syoshie
0
450
grill-me(grilling):AI駆動開発を超助けてくれるSkill / grill me
mathbullet
0
110
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
410
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
1.1k
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
500
Tab5をRubyで動くパソコンにする
kishima
1
250
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
140
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
4
1.6k
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
130
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The Curse of the Amulet
leimatthew05
2
14k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Deep Space Network (abreviated)
tonyrice
0
290
The untapped power of vector embeddings
frankvandijk
2
1.9k
HDC tutorial
michielstock
2
850
The browser strikes back
jonoalderson
0
1.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
How to make the Groovebox
asonas
2
2.4k
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する 新しいバージョン辞書を使う →インデックスを再作成