---
# System prepended metadata

title: LINE Developer Day 2019

---

LINE Developer Day 2019
=======================

# Keynote

- LINE MINI App
    - https://japanese.engadget.com/2019/06/27/line-line-mini-app/
- 2 Principle for Handling Data
    - To keep "Privacy First"
    - To Avoid Data Silos
- LINE Smart Channels
    - Jupyter, AirFlow, Tableau, R, yanagishima, ... を使ってデータサイエンティストが自由に分析ができる環境がある
        - https://github.com/yanagishima/yanagishima
- LINE BRAIN
    - Crova向け技術を中心に開発された機械学習アプリケーションを外販する
    - Face Sign: 顔認証サービス
        - アジア人の学習データは多いので誤認識率は低い
    - AI OCR
        - https://www.linebrain.ai/ocr/
        - ICDAR: Google Vision API よりも高性能だった
            - GANを使って手書きフォントの自動生成を行っている
            - 書き順も生成している
    - LINE AiCall
        - 音声認識技術を使った自動応対システム
        - 飲食店（俺の）で実証実験中（自動予約システム）
- Unified Self-Service Data Platform
    - ユーザのデータをセキュアに一元管理することで各種サービス開発を加速する
    - データ
        - １Trillion New Record
        - +390TB new data volume (気が遠くなるな…)
        - 70k Hive/Spark Jobs and 30k Presto
    - 課題
        - Accesibility: 
            - サービス横断で分析したいけどデータが点在すると厳しい
            - システムを止めずにオンラインで統合する必要がある
        - Multi-Tenancy
            - 2,000名を超える分析者のニーズにどう答えるか？
        - Data Quality
            - 前処理だるい問題どうする？
            - データのバリデーションとメタデータ保存を自動化する
            - データの種類もたくさんあるからチャレンジング
- Fast Cycle Infrastructure
    - 物理サーバ: 4万台
    - プライベートクライド: Verdahttps://engineering.linecorp.com/ja/blog/verda-at-cloudnative-openstack-days-2019-1-2/
        - 課題解決のためのイニシアティブとなるように自前で運用している（他人任せにしない 
    - インフラライフサイクル＝長い vs 開発ライフサイクル=短い 
- Security
    - Privacy First
    - Privacy-By-Design: 
        - サービス設計時にセキュリティ監査を行う仕組みがある
    - Account Hijack 対策
        - 怪しいと思われるユーザの振る舞いを機械学習で学習
            - ただしいたちごっこだった（２年くらい）
        - 2018年に乗っ取り件数はゼロ件になった（すごい）
    - SPAM
        - 従来は手動でルールを書いていた
        - spammerの振る舞いに応じてフィルタリングルールを自動生成する 
        - 現在はルールと機械学習のあわせ技でやっている
    - 不正送金
        - グラフマイニングを使って特徴的な不正を検出する
    - Fake News
        - ニュースの確からしさをスコアリングする
        - 台湾の企業4社と組んで実用化している
        - クラスタリングを活用してFake判定をしている
    - Transparency Report
        - https://linecorp.com/ja/security/transparency/top 

# How to Make Deep Models Strong and Robst

- LINE事例: Clova ORC， NAVER Smart Lens 
- 基本的には転移学習ベースでモデル開発をする
    - Strong backbone -> Better Performance
    - Do Better Imagenet Models Transfer Better? CVPR2019wrard 
- 転移学習の課題 
    - 事前学習用のデータを大量に用意するのは大変
    - 容量の大きいモデルを用意するのも大変
    - 学習ストラテジを賢くすることはコストが低い
- 従来のアプローチ
    - Data Augmentation
        - Rotationとかいろいろ
    - BatchNorm, Dropout, ...
- 最近のアプローチ
    - Cutout: オクルージョンに強くなる
    - Mixup: 局所的に変な画像が出てくるけど内挿操作でバリエーションを増やせる 
- CutMix: 講演者の提案手法
    - 一部の領域をパッチとして切り出して他の画像に貼る
    - そのときのラベルは画像の専有領域にする
    - ICCV2019 Accepted paper
    - ResNet50 + CutMix = ResNet152

# LINE Timeline Post recommender System

- Given: A user and a post with context
- Goal: Predict CTR
- ベースラインは協調フィルタリングベースで機械学習モデルの有効性を確かめていく
- Feature Engineering
    - User Embedding
        - 協調フィルタリングのデータをそのまま使うと次元の呪いがきｎつい
    - Post Embedding
        - 投稿についても同様に埋め込みする
- Evaluation
    -　ユーザゴトニAUROCをはかって、その平均値で評価する
- Model Architecture
    - パレートフロントを使ってモデルを選ぶ　 

# Feature as as Service

- Data Labs: 
    - 部署横断でデータ管理
    - データサイエンティストが多数在籍している
- LINEのデータ
    - ユーザ行動ログ
    - コンテンツデータ 
    - サービスごとにデータの利用規約が定められている
    - 機械学習チームは全社で使えるモデルを作っているし、サービスチームはそのサービスで使える特徴量を作っている
    - 開発ノウハウは共有することで民主化している
- Features
    - ユーザの特徴量: z-features
    - 匿名化した特徴: y-features
    - コンテンツ特徴: c-features
- LINEのシステム構成
    - Client Apps + Services + Hadoop Cluster + Machine Learning Cluster
    - クライアントログ・ユーザスナップショット・コンテンツスナップショット・サーバログはフィルタリングされて問題ない形でHadoopクラスタ上に格納される
    - これらのデータはSpark経由でML Workersに渡される
    - 似たような特徴量エンジニアリングをするケースが散見されて計算機負荷が大きかった
    - そのため、共通的な前処理を行った特徴量を提供するFaaSを提供するようにした。これにより開発効率が上がった
- 特徴量の一元化
    - Versatile: どのMLコンポーネントからも使える
    - Flexible: 特徴選択ができる仕組みがある
    - Reusable: キャッシュの活用
    - Extensible: 新しい特徴量を追加したい場合でも容易に拡張できる
- Available Features
    - z-features: ユーザ単位の特徴量
        - 主に以下の2つの目的
            - ユーザの性別や年齢などを推定するエンジン
            - 類似項目検索 
        - モデルは単純な隠れ層2つのNeuralNetを使っていた
        - z-features: 
            - ログやスナップショットを変換して8割程度の情報を保持できるような軽量な(スパースな)特徴量に変換する 
            - 行がユーザ、列がサービスのような特徴量になっている
    - y-features: 難読化されたユーザ単位の特徴量
        - Z-featuresは超スパースかつ高次元、解釈はしやすいけど…
        - z-features + content-embedding -> 次元削減
            - content-embedding: ユーザの行動を文書ライクな表現に変換してWord Embeddingにしている
            - 次元圧縮は　Matrix Sketching + PCA
        - y-features を使うと、性別と地域はほぼ100%で当てられる。年齢は90%くらい
        - 学習はz-featuresより20倍くらい早いし、推論時間も2-5倍はやい（精度はちょっと低いけど）
        - ユーザ類似度検索（kNN）とかCTR/CVR予測に使うことを検討中 
    - c-features: サービス特徴量のEmbedding
        - News Articles: SCDV with fastText
            - https://dheeraj7596.github.io/SDV/
        - Sticker images: 

# PicCell: サービスにAIをフル活用する

- PicCell: LINE社内の画像処理サービス
- サービスごとにAI開発することはROIが低くなりがち→集約してサービス化するべき
- OBS: Object Storage
    - LINEの画像や音声などのファイルを一括して扱っている
    - 100PB Storage
    - MAX 1.6Tbps Traffic
    - PicCellはOBS内で動いている
- Conents:
    - Adult Contents Filter
        - LINE China AI Team
        - ResNet50 based
        - 3 Classes: Adult, Sexy, Normal
        - 3.5M Training Samples
        - F1-Score: 0.9
        - 300ms Preprocessing Time
    - Illegal Advertisement in Timeline

# Airflow

- サンプルコード
    - preprocess.sh + train.sh + inference.sh
    - これらをDAGにより表現してジョブを実行する
- Jinja Template でステートレスになるようにしている
- DAGにStartDateを書くフィールドがあるが、裏側で開始時刻に書き換えてあげる
- コールバック関数を呼び出すことでタスクの状態を通知できるようにしている
- 学習の監視と推論
    - ロスの監視が非常に重要
    - ロスの監視ができなくなったらパラメータを変更して再実行する
        - 例えば学習率を下げてあげるとか
    -　評価：分類スコアの統計量を記憶しておく、KD-Divergenceとかもk録しておく 

# Take Home Contents
- AI OCR API 無料提供
    - 裏側ではT4が動いている 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　