機械学習を用いてユーザーのご意見分類業務を効率化した話

こんにちは。研究開発部の @vanhuyz です。機械学習・自然言語処理を中心に研究開発しています。 今回は機械学習を活用してユーザーからのご意見を 81 のカテゴリーに自動分類し、ユーザーサポートスタッフによる手動分類の工数を半分にできた話を紹介したいと思います。

背景

クックパッドは現在約 5,500 万人の国内月間ユーザーがあり、日々ユーザーからたくさんのご意見やご要望を頂いています。創業してからユーザーの声を大事に扱う文化があり、どのご意見も一度目を通すようにユーザーサポートスタッフが努力しています。ご意見はスタッフによってさらに分類され、必要に応じてディレクターやエンジニアに振り分けられています。

例えば、こんな感じのご意見が来ています。「このレシピは簡単なので、子供とやってみました。楽しかったです」や「機種変更して、ログイン出来ません」や「もっと具体的な内容でも検索できるようにしてほしいです。例えば、冷蔵庫の余りもので作りたいときに何種類かの食材でも検索できると助かります。」などです。

現在、ご意見に対して 100 以上のカテゴリーが登録されています。例えば、ポジティブ・ネガティブ・検索関連・ログイン関連・つくれぽ・不具合などです。

f:id:vanhuyz:20180808154458p:plain

ユーザーサポートスタッフが社内システムを使い、ご意見を読んでカテゴリーリストから適切なカテゴリーを選んだ上で、システムが Slack の適切なチャネルに転送してくれます。これにより、関係するディレクター・エンジニアはご意見を読むことができ、すぐその場で議論します。 ただし、ご意見の数が多く、カテゴリーも多いため、毎日の分類作業が大変で、ボトルネックとなっていました。そこで、自動分類の仕組みを導入したいと考えました。

ご意見分類におけるチャレンジ

ご意見分類をパッと見ると簡単そうかもしれませんが、実はそうではありません。

  • まず、カテゴリー数が多いです。現在は 100 カテゴリー以上があり、今後もどんどん増えていきます (open set problem)。

  • 次に、1つのご意見が複数カテゴリーに所属することがあります (multi-label problem)。例えば、「つくれぽを投稿するのは楽しいし、もらえるのも嬉しいですね。」というご意見は「ポジティブ」と「つくれぽ」に入っています。

  • また、蓄積されたデータは不均衡 (imbalanced data) です。汎用的なカテゴリー(例えば、ポジティブなご意見・不具合報告)のご意見が非常に多いのに対し、最近リリースしたばかりのサービス(Amazon Echo Skill, storeTV など)のご意見はまだ多くはありません。また、クローズされたサービスも多数存在し、それらに関するカテゴリーはいらなくなります。

取り組みについて

以上の3つのチャレンジに向けて、どのように解決したのかを簡単に説明します。今回は Google の Rules of Machine Learning を参考にしながらプロジェクトを進めました。43 ルールもありますが、その中で以下の 3 つを気にして進めました。

1. Don’t be afraid to launch a product without machine learning.
(機械学習を使わないことを恐れるな!)

辞書ベースの手法を試しました。例えば、「探、調べ、検索、キーワード」という単語が含まれるご意見は「検索関連」と判断されます。この方法だと、かなり高い精度が得られますが、再現率が低いです。そして、100 以上のカテゴリーの一つずつに辞書を作るのがあまり現実的ではないので、他の方法を試すことになりました。

2. Choose machine learning over a complex heuristic.
(複雑なルールになってきたら機械学習を選択!)

multi-label problem 対応で、1つのカテゴリーに相応する1つのバイナリ分類器を作りました。例えば、「ポジティブ」カテゴリーは ポジティブ-or-not 分類器になります。最終的にデータが少なすぎるカテゴリーを除いて合計 81 の分類器を作成しました。将来もしカテゴリーが増えたら、そのカテゴリーに相応する分類器を作れば良いので、open set problem も対処できます。 imbalanced data problem (負例が正例より圧倒的に多い)に関しては、正例はそのままにし、負例は正例と同数になるように無作為に選びました。

f:id:vanhuyz:20180808154522p:plain

3. Keep the first model simple and get the infrastructure right.
(シンプルなモデルを保ち、インフラを適切に保つ)

今回はサポートベクターマシン (SVM) を採用し、scikit-learn で実装しました。F1 Score を 85% 以上になるまでチューニングしました。このぐらいの精度でも十分なので、早い段階でインフラを整備し、本番環境に導入しました。もちろん100% の性能を達成することは難しいため、完全に自動分類で手作業をなくすことではなく、分類業務へサポートという形で導入しています。

以下は導入後の管理画面のイメージで、結果的にご意見サジェストという形で導入しています。

f:id:vanhuyz:20180808154629p:plain

導入前はスタッフが 100 以上のカテゴリーの中から探さないといけないのに対し、導入後は数少ない「もしかしてカテゴリー」の中だけ選択すれば良いので、非常に楽になりました。(「もしかしてカテゴリー」になかった場合は、従来通り、全カテゴリーの中から探すことです。)実際に計測したら工数を半分まで減らすことができたという結果になりました。 また、分類するスタッフに聞いたところ、昔はメンバーによって判断のばらつきがありましたが、今は直感的に分類精度が上がったという話もありました。

また、学習モデルの精度を上げるために、再学習の仕組みを導入しました。選択されていない「もしかしてカテゴリー」は学習の負例となり、Rundeck/Jenkins で毎週定期的に training コンテナを起動し、モデルを再学習しています。新しいモデルができたら、inference コンテナがそのモデルに切り替えるように設定します。仕組みは以下のイメージです。

f:id:vanhuyz:20180808154645p:plain

これによって、状況が変わっても、モデルを劣化なく長期的に使うことができます。これからしばらく運用し、いつか完全に自動分類できるかもしれません。

最後に

今回は機械学習を用いてご意見分類業務を効率化した話を紹介しました。 クックパッドでは機械学習を活用したくさんの問題を解決しています。 このエントリを読んでご興味をお持ちいただけた方は、ぜひとも採用ページからご応募ください。

iOSDC Japan 2018 に2名が登壇&ブースでお待ちしております!

こんにちは!広報部のとくなり餃子大好き( id:tokunarigyozadaisuki )です。

毎日異常気象が続いていますね。猛暑に豪雨…みなさん、体調管理には十分気をつけてくださいね。

さて、iOSと周辺技術を題材としたカンファレンス、iOSDC Japan 2018が今年も8月30日(木)〜9月2日(日)に開催されますね!

クックパッドは、昨年同様プラチナスポンサーをさせていただいておりますので、ブースを出展いたします。また、弊社エンジニア@giginet@slightairが登壇し、@sgr-ksmtが当日スタッフとして関わってくれます。カンファレンスには、他にも多くの社員が参加いたしますので、会場でクックパッド社員をお見かけの際には、お声がけいただけますと嬉しいです。

登壇スケジュール

クックパッドの社員2名は、カンファレンスの3日目と4日目に登壇いたします。 以下、スケジュールと登壇内容のご紹介です。

3日目 9月1日(土)

11:20〜 Track A 三木 康暉(@giginet ):詳解Fastfile

プロジェクトが大規模化していくと、さまざまな業務を自動化したくなってきます。同時にロジックが増え、特定の人しかメンテできなくなったFastfileにお悩みの方も多いでしょう。 このトークでは、実際の活用事例を交えながら、大規模プロジェクトにおける効果的なFastfileの書き方、プロジェクトの雑務自動化についてをお話しします。 そのほか、fastlaneコミッターによる明日から使える実践的なtipsも数多くお伝えします。

コメント

Fastfileについて30分も何を話すんだ、と我ながら不安ですが、なかなか他所で聞けない知見を盛りだくさんにしたいと考えていますので、fastlaneを運用している方だけではなく、業務改善に興味がある方全てに役立つ内容にしたいと思っています!

16:20〜 Track C 茂呂 智大(@slightair):動作確認のための社内アプリ配信サービスを新たに作った話

アプリの開発中にビルドしたアプリをCrashlyticsBetaやDeployGateなどにアップロードし、手元で動作確認できるようにしているチームは多いと思います。 僕たちもそういったサービスを使ってきましたが、様々な課題が出てきたため自分たちの使い方にあったシステムを新しく作りました。 どういった課題がありどういうツールを用意したのか、そしてどうリリースフローが改善されたか話します。

コメント

組織に合わせてどういう仕組みやツールを用意したのか、それによってどう開発環境を改善できたかという話ができればと思っています。がんばります。

4日目 9月2日(日)

16:10〜 Track A 三木康暉(@giginet ):🀄

Swiftの様々な言語機能を使って麻雀を遊んでみましょう! Swiftyな麻雀ライブラリの実装や、和了判定のアルゴリズムなどについてお話しします。

コメント

最終日の最後で、皆様お疲れだと思うので、頭を使わずに聞けるLTになると良いなと思います。僕はすでに準備で疲れています。

ブース

iOSDC Japan 2018 では、ブースの出展をいたします。グッズの配布はもちろんですが、今回は、みなさんに楽しんでいただける特別プログラムを予定しておりますので、乞うご期待……! ぜひ、お立ち寄りくださいね。

おわりに

発表内容へのご質問やクックパッドにご興味をお持ちの方は、お気軽にブースまでお越しください。みなさまにお会いできることを楽しみにしております。

【開催レポ】Cookpad Tech Kitchen #16 コメルコテックバナシ〜新規事業開発のリアル〜

こんにちは。広報部のとくなり餃子大好き( id:tokunarigyozadaisuki )です。

2018年7月19日に、Cookpad Tech Kitchen #16 コメルコテックバナシ〜新規事業開発のリアル〜を開催いたしました。クックパッドでは、Cookpad Tech Kitchenを通して、技術やサービス開発に関する知見を定期的に発信しています。

f:id:tokunarigyozadaisuki:20180803144413j:plain
ホワイトボードと発表練習中の星川

第16回は2018年6月26日にリリースいたしました、料理が楽しくなるマルシェアプリ「Komerco-コメルコ-」の開発裏話をテーマとし、Firebase, Algolia など利用している技術の話はもちろん、新規事業のサービス開発について、デザインの観点からもお話をさせていただきました。 本ブログを通してご来場いただけなかったみなさまにも、当日の様子をお届けしたいと思います!

料理が楽しくなるマルシェアプリ「Komerco-コメルコ-」

f:id:tokunarigyozadaisuki:20180802173546p:plain

「モノとの出会いで、料理はもっと楽しくなる」

「Komerco-コメルコ-」は、料理道具、うつわ、カトラリー、リネン雑貨などの“料理が楽しくなるモノ”が買えるマルシェアプリです。自身の手で創るモノで「料理を楽しんで欲しい」と願うクリエイターさんが出品した作品を、スマートフォンアプリから直接購入することができます。また、作品のこだわりやストーリーを紹介する「コメルコバナシ」などの記事コンテンツも提供しております。 みなさんもぜひアプリをダウンロードして、とっておきのモノを見つけてみてくださいね!

Komerco - コメルコ - by クックパッド

Komerco - コメルコ - by クックパッド

  • Cookpad Inc.
  • ショッピング
  • 無料

発表プログラム

「Komerco-コメルコ-を支える技術」

はじめに、2017年に中途入社したiOSエンジニアの星川より「Komerco-コメルコ-を支える技術」というタイトルで、「Komerco-コメルコ-」で利用している技術についてお話しいたしました。

「Firestore と Cloud Storage を用いたアプリでの画像の扱い方」

2017年に新卒でクックパッドへ入社した三浦からは、「Komerco-コメルコ-」でのユーザーから投稿される画像の圧縮やリサイズに関して、サンプルアプリを用いながら画像の投稿、取得フローについてご紹介しました。

「Effective Firestore Security」

2017年に中途入社したiOSエンジニアの岸本からは、Firebase Cloud Firestoreの "セキュリティ" に焦点を当てて、問題となるケースの紹介、セキュリティを意識したモデル設計、セキュリティルールの実践的な書き方をお話させていただきました。

「ゼロからはじめるサービスのデザイン」

2017年から新卒でクックパッドへ入社し、現在「Komerco-コメルコ-」のリードデザイナーとしてブランディングからサービスの体験、Web・アプリのUIなどデザイン全般と開発を担う藤井からは立ち上げからリリースまで、サービス全体のデザインを見るにあたって取り組んだことや、仕組みづくり、デザインの観点からサービス開発のリアルをお話いたしました。

付箋形式でお答えするQ&Aディスカッション

Cookpad Tech Kitchenでは参加者のみなさまからの質問を付箋で集めています。 ほんの一部ではありますが、当日は下記のような質問に回答いたしました。

f:id:tokunarigyozadaisuki:20180802173252j:plain
たくさんのご質問ありがとうございました!

Q: Firestoreのデメリットは?
A: スキーマが無い。エクスポート出来ない(分析の為にスクリプトで対応している)

Q: Cloud Functionsでの失敗をどの様にハンドリングしている?
A: 不整合のあるデータを集めてきて一括でパッチするスクリプトがある

Q: rulesを書きはじめるタイミングは?
A: 最初は緩かった。リリースする数ヶ月前ぐらいからでもよいのでは。とはいえ最初から書けるなら書いた方が良い

Q: rulesを書けなかったのはどういう時?
A: 制限がある。リスト、マップの中の値が何かをチェック出来なかった。他のコレクション・ドキュメントを参照したり出来なかった。お金に関する部分はCloud Functionsに寄せている

Q: UIから直接モデル(Firestore)を操作していましたが、テストはどうしていますか?
A: 外部のモデルフレームワークに則っているからそっちで任せている。モデルに実装を寄せると自由度が落ちる

f:id:tokunarigyozadaisuki:20180802173259j:plain

シェフの手作り料理

Cookpad Tech Kitchen ではイベントに参加してくださったみなさまにおもてなしの気持ちを込めて、シェフ手作りのごはんをご用意しております!食べながら飲みながらカジュアルに発表を聞いていただけるように工夫しています。今回お越しいただけなかった方も、ぜひ次のイベントはご参加くださいね。

f:id:tokunarigyozadaisuki:20180802174125j:plainf:id:tokunarigyozadaisuki:20180802234907j:plain
オリジナルロゴ寿司ケーキとシェフ特製の料理

f:id:tokunarigyozadaisuki:20180803080331j:plain
乾杯の様子

おわりに

クックパッドではKomerco事業部はもちろん、その他新規事業、レシピサービス事業などに携わる新しい仲間を募集しています。ご興味がある方はぜひご応募ください!お待ちしています。

www.wantedly.com

http:// https://info.cookpad.com/careers

次回のCookpad Tech Kitchen のテーマは「北欧で最新のインタラクションデザインを学んできた話」。8月22日 (水)に開催予定です! クックパッドでは他にも様々なイベントを企画しておりますため、今後のイベント情報についてご興味がある方は、ぜひConnpassのメンバー登録をポチっとお願いいたします!みなさまにお会いできることを楽しみにしております。

cookpad.connpass.com