SlideShare uma empresa Scribd logo
1 de 48
「不適切コンテンツ検出」
の機械化と安定運用
株式会社ミクシィ Vantage スタジオ mixi 事業部
岩瀬 靖彦
本スライドは、ミクシィ社エンジニアブログ 「機械学習による不適切コンテン
ツ検出」の実装と成果 – mixi developers の記事を基に作成しています
ご興味をお持ちいただけましたら、ブログ記事もあわせてご覧ください
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
事業紹介 : SNS mixi
• 2004年3月開始のソーシャル・ネットワーキ
ング サービス(祝15周年)
• 「心地よいつながり」を軸に、日記、コミュ
ニティ、イベント、ニュース、ゲームなど多
様なコミュニケーション機会を提供
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
「健全性の維持」とは
• ルール(規約)を守って、利用者の方に安心してサービスを使っていた
だくための活動
• パトロールや利用者からの通報によって不適切投稿を検知/削除し、
迷惑行為や犯罪行為を抑止している
• UGC/CGM(ユーザの生成するコンテンツで成り立つメディア)を管理
するうえで必須の要件といえる
不適切投稿の一例(日本語文の例)
• 投稿種別は短文/長文/画像など多
様なため、コンテンツにあわせた判
断が求められる
• 犯罪行為など社会に大きな影響を与
えかねない事例があるため、ある程
度コストを負っても監視を行う必要
がある
「健全性維持」のための活動と課題
• スタッフによるサイトのパトロールや、24-365
の通報対応を実施してきた
• 違反は経験的に 数は非常に少ないものの毎日確実
に存在 するため、スタッフには数件の違反投稿を
発見するために数万件の問題ない投稿に目を通す
ような負担がかかっていた
課題への対策 : 機械化による負荷軽減
• 規約違反投稿の検出を機械化する取り組みを実施
(2018年)
• 過去行ってきた不適切判断を学習データとして、
投稿の 危険度を判定するモデル を作成し、人間
に代わって判断を行う ことを目指した
取り組みの成果
• 数ヶ月かけて試験運用と精度調整を行い、十分な精度で
危険度判定ができるようになった
• 監視対象の80%以上の判断を機械に任せることができた
• スタッフは判断の難しい投稿への対処や通報対応、お問
い合わせへの回答に重点的に対応できるようになった
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
危険度判定モデルの概要(言語処理の例)
• 投稿種類にあわせて、短文/長文/
画像など処理の異なる複数のモデル
を作成した
• 投稿内容に危険があるか否か の二
値分類モデル
• 投稿データをリクエストとして受け
取り、加工整形して、MLモデルへ
引き渡して推論結果を取得し、結果
(不適切か否かのラベル)を返却
推論結果
入力文の受け取り、加工整形
(日本語処理)
分類モデルによる推論
推論結果の整形、返却「不適切」
「適切」
推論エンドポイント
危険度判定モデルの開発工程と生成物
• 前処理:生データの加工整形による訓練デ
ータ/辞書等の生成(学習の準備)
• 学習:訓練データを使ったトレーニングに
よる危険度判定モデルの生成
• 推論:学習済みモデルと辞書等のデータを
配置したエンドポイントの設置
Vocab /
Vectorizer
Data
Training
Jobs
Model
Artifacts
Input
Data
Preprocess
Jobs
Endpoints
Raw
Data
MLシステムの構成
• SNS mixi のシステム全体が
AWS上に構築されており、追
加した機械学習システムも
AWS上で完結する構成として
いる
SageMakerによるモデル開発/運用
• モデルの開発/運用の管理全般
に SageMaker を利用
• 実行するコードは必要に応じて
コンテナ化し、ECRへ登録する
• 学習/推論の各プロセスは
SageMakerによって一元管理さ
れ、生成物はすべてS3へ格納さ
れる
前処理:訓練データ/辞書等の生成
• 前処理:Preprocess
生データとなる文章群を加工整
形(単語分割/ID変換/ベクトル
化など)して、訓練データと辞書
等を生成し、S3へ出力する
• 実行コードと環境をECRへ登録
しておき、ECS Taskとして起
動させる
学習:危険度判定モデルの生成
• 学習:Training
前処理済みのデータセットをS3
から取得して分類モデルの学習
を行い、危険度判定モデル(学
習済みモデルファイル)を生成
してS3へ出力する
• 実行コードと環境をECRへ登録
しておき、ECS Task として起
動させる
推論:エンドポイントの作成/更新
• 学習済みモデルと辞書等を配置
し、リクエスト(任意の文章)
ごとにモデルによる推論結果(
危険か否かのラベル)を返すエ
ンドポイントを構築する
• 実行コードと環境をECRへ登
録しておき、ECS Task から作
成/更新を行う
推論:REST API として組み込む
• API Gateway と Lambda を経由させて
REST API とする
• SageMaker の作成するエンドポイント
は AWS SDK による認証を必要とする
ため、アプリケーション側で AWS SDK
が使えない場合は REST API 化が必須
• アプリケーションから投稿ごとにAPIへ
推論リクエストを投げ、危険度判定結
果を得る
運用フローへの組み込み
• 既存の投稿監視フローに、
投稿の危険度判定を行う
API (赤枠箇所)を組み込み
• アプリケーションサーバか
ら投稿ごとにREST API へ
危険度を問い合わせ、判定
結果を受け取りDBへ格納
する
危険度判定モデル呼び出し後の処理
• 機械判定で危険度が低いと判
断できたものは監視対象から
除外し、判断の難しいものの
みスタッフが監視/検証を行
う
• 機械判定結果は投稿監視シス
テムからも参照でき、スタッ
フにより判断の妥当性を確認
できる
80%以上 を判断確定
判断未定の 20% のみスタッフが検証
アーキテクチャの詳細解説(3点)
• 以降、カスタムアルゴリズムの利用法、中間生成物の管
理方法、定期実行タスクの作り方について補足
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
カスタムアルゴリズム
• SageMaker には組み込みアルゴリズ
ムや Tensorflow 等のフレームワーク
で学習/推論を行う環境が多く提供さ
れている(コンテナを暗黙的に利用)
• 提供されているアルゴリズム/環境で
実現できないロジックがある場合、独
自にコンテナ作成し、ECRへ登録し
て呼び出す必要がある
Built-in
Algorithms
Machine
Learning
Frameworks
Custom
Algorithms
&
Custom
Container
例:コンテナ内で日本語処理したい
• 日本語を扱う場合、文章の単語分割や品詞解
析、ステミングなどの処理を必要とする場合
がある
• たとえば推論時の入力文を形態素解析したい
場合Mecab 等の動作環境が必要になるが、現
状こうした日本語処理を行う場合には独自コ
ンテナが必要
• N-gramならカスタマイズ不要、形態素解析や
サブワードなどのトークナイザならコンテナ
が必要になる
独自コンテナのベース/サンプル
• Github の SageMaker Examples に
、独自アルゴリズムのためのテンプ
レートDockerfile があり、それをベ
ースにコンテナ作成できる
• scikit_bring_your_own など
例:Mecab-NEologd をインストールする
• 形態素解析器として Mecab、辞書と
して mecab-ipadic-NEologd、mecab-
python3 をインストールする
Dockerfile の例
カスタムアルゴリズムまとめ
• カスタムアルゴリズムをコンテナ
化することで、たとえば推論用エ
ンドポイント内で日本語処理を行
うなど、任意の処理が実行できる
• 実行コードをコンテナとしてECR
登録し、インスタンス構築時に適
切に配置して動かす
日本語処理
入力の加工整形
&
分類モデルによる
推論
&
推論結果の返却
推論結果
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
生成物のバージョン管理と関連づけ
• 前処理/学習/推論の各プロセスで使用
/生成する成果物には依存関係があり、
バージョン管理と関連づけが適正に行わ
れる必要がある
• モデルをトレーニングした際のハイパー
パラメータ、使用したコンテナイメージ
や入力データ/中間データ等がいつでも
関連づけて把握できることが重要
Training
Jobs
Algorithms
(ECR)
Model
Artifacts
(S3)
Input Data
(S3)
Preprocess
Jobs
Endpoints
Vocab /
Vectorizer
etc.(S3)
SageMaker による入出力管理
• SageMaker では、仕様に従って入出力
を行うことにより、トレーニングジョブ
とコンテナイメージ、入力データ、モデ
ル、エンドポイント等の関連付けが記録
され、管理できるようになっている
• 関連づけはマネジメントコンソール
(WebUI)から確認可能
Training
Jobs
Algorithms
(ECR)
Model
Artifacts
(S3)
Input Data
(S3)
Preprocess
Jobs
Endpoints
Vocab /
Vectorizer
etc.(S3)
SageMaker による入出力管理
• SDK( describe_training_job 等)からも
関連づけが確認できる
• 入出力データの実体を把握できる(それ
ぞれ s3://.../{training_data}、
s3://.../output/ 等に存在している)
課題:管理されない依存関係がある
• アルゴリズムによって、先の日本語処理
のように単語⇄ID変換したり単語⇄ベク
トル変換したりするケースがある
• 学習/推論プロセスで同じ辞書を必要と
するため明示的な関連づけが必要だが、
SageMaker で管理されないため、独自
に依存関係を管理する必要がある
Training
Jobs
Algorithms
(ECR)
Model
Artifacts
(S3)
Input Data
(S3)
Preprocess
Jobs
Endpoints
Vocab /
Vectorizer
etc.(S3)
解決策:前処理ID(PPID)を共有する
• 辞書データやベクトライザは前処理プロセ
スで訓練データとともに生成するため、前
処理プロセスの固有ID(PPID)を発行し、
PPIDを生成物に明記する
• 例:PPID:preprocess job ID
• 例:データ出力先パス
Training
Jobs
Algorithms
(ECR)
Model
Artifacts
(S3)
Input Data
(S3)
Preprocess
Jobs
Endpoints
Vocab /
Vectorizer
etc.(S3)
学習プロセスの生成物にPPIDを付与する
• 学習プロセスで、参照したデータセットのPPIDを切
り出し、生成するジョブ名やモデル名に付与する
• 例:TrainingJob名
• 例:Model名
• 例:Modelファイル名
Training
Jobs
Algorithms
(ECR)
Model
Artifacts
(S3)
Input Data
(S3)
Preprocess
Jobs
Endpoints
Vocab /
Vectorizer
etc.(S3)
推論環境へPPIDを使い辞書等を配置する
• 推論エンドポイントではコンテナ内
(/opt/ml/model 以下)にModelファイルが展
開されるため、Modelを参照することで、
Model名に含まれるPPIDが取得できる
• PPIDを含む辞書データ等のS3パスを組み
立て、S3からデータ群をダウンロードし
てコンテナ内に配置できる
Training
Jobs
Algorithms
(ECR)
Model
Artifacts
(S3)
Input Data
(S3)
Preprocess
Jobs
Endpoints
Vocab /
Vectorizer
etc.(S3)
中間生成物の管理法まとめ
• この方法により、エンドポイントで利
用されている現行モデルがどの辞書を
使っているか?どのデータセットで学
習したものか?等を明確にできる
• 依存する生成物を適切に配置すること
で、学習/推論で期待する挙動が得ら
れるようになる
Training
Jobs
Model
Artifacts
(S3)
Input Data
(S3)
Preprocess
Jobs
Endpoints
Vocab /
Vectorizer
etc.(S3)
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
機械学習プロセスを定期実行させるケース
• 投稿データの傾向は時代を経るにつれ変化す
るため、モデルは新しいデータを加えて定期
的に更新したい需要がある
• たとえば前処理プロセス(最新データを取り
込んだり辞書を更新)と学習プロセス(前処
理データによるモデル更新)を月次等の周期
で実行させたいというケース
苺
野菜
アイス
手押し
定期実行タスクの要件
• cron 起動させたい
• バッチスクリプト動作に十分な環境がほしい
が、リソースはスポット利用でよい
• アプリケーション側にある既存のバッチサー
バと環境構成が異なる場合、構成管理上、混
在を避けたい
解決策:ECS Scheduled Task
• バッチスクリプトの動作環境をコンテナとし
てECRへ登録し、ECS Scheduled Task とし
て起動させる
• cron 設定/起動が可能
• タスクごとに使い切りの環境のため経済的
• 細かな設定が不要でメンテナンスコスト低い
解決策:その他の選択肢
• 必要十分の機能を備えているため、要件的な
不備のない限りECS Scheduled Task でよい
• GPU利用など細かなマシン設定やタスク依存
設定を必要とする場合は、 AWS Batch &
CloudWatch Events 等の組み合わせも選択肢
になると思われる
機械学習プロセスの定期実行まとめ
• 新しいデータ傾向への対応のため、前処理や学習の工程
を定期的に実行したいケースがある
• 機械学習プロセスの定期実行には ECS Scheduled Task
がおすすめ
1. 事業紹介
2. 「健全性維持」という課題と対策
3. アーキテクチャ解説
ⅰ. カスタムアルゴリズム
ⅱ. 中間生成物の管理
ⅲ. 定期実行タスク
4. まとめ
まとめ(ビジネス面)
• SNS mixi では、サービス運営において負担の大きかった
領域を機械化し、80% 以上の負荷削減を実現できた
• 負荷削減によって、人的資源をより複雑な課題へ集中投下
できるようになった
まとめ(技術面)
• SageMaker をはじめ AWS のサービス群を組み合わせるこ
とによって、MLモデルの開発と導入、モデル更新などの
運用を低コストで実現できた
• SageMaker で自然言語(とくに日本語)を扱う場合には、現
状細かな工夫が必要になるが、サーバセットアップや諸々
のインフラ管理コストを削減できるメリットは大きい
ご静聴ありがとうございました

Mais conteúdo relacionado

Semelhante a 2019-04-17 「不適切コンテンツ検出」の機械化と安定運用

Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
 

Semelhante a 2019-04-17 「不適切コンテンツ検出」の機械化と安定運用 (20)

東大大学院 電子情報学特論講義資料「ハイパーパラメタ最適化ライブラリOptunaの開発」柳瀬利彦
東大大学院 電子情報学特論講義資料「ハイパーパラメタ最適化ライブラリOptunaの開発」柳瀬利彦東大大学院 電子情報学特論講義資料「ハイパーパラメタ最適化ライブラリOptunaの開発」柳瀬利彦
東大大学院 電子情報学特論講義資料「ハイパーパラメタ最適化ライブラリOptunaの開発」柳瀬利彦
 
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスeZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
今さら聞けない人のためのDevOps超入門 ODC2023編
今さら聞けない人のためのDevOps超入門 ODC2023編今さら聞けない人のためのDevOps超入門 ODC2023編
今さら聞けない人のためのDevOps超入門 ODC2023編
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
WEB TOUCH MEETING #52
WEB TOUCH MEETING #52WEB TOUCH MEETING #52
WEB TOUCH MEETING #52
 
サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27
 
Javaの登場と発展
Javaの登場と発展Javaの登場と発展
Javaの登場と発展
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要か
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
Smarttrade524
Smarttrade524Smarttrade524
Smarttrade524
 
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumiリアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
 
Modeling Workshop
Modeling WorkshopModeling Workshop
Modeling Workshop
 
Contao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こうContao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こう
 
2016.03.11 「論文に書(け|か)ない自然言語処理」 ソーシャルメディア分析サービスにおけるNLPに関する諸問題について by ホットリンク 公開用
2016.03.11 「論文に書(け|か)ない自然言語処理」 ソーシャルメディア分析サービスにおけるNLPに関する諸問題について by  ホットリンク 公開用2016.03.11 「論文に書(け|か)ない自然言語処理」 ソーシャルメディア分析サービスにおけるNLPに関する諸問題について by  ホットリンク 公開用
2016.03.11 「論文に書(け|か)ない自然言語処理」 ソーシャルメディア分析サービスにおけるNLPに関する諸問題について by ホットリンク 公開用
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 

2019-04-17 「不適切コンテンツ検出」の機械化と安定運用