Upgrade to Pro — share decks privately, control downloads, hide ads and more …

顔文字を3万個集める技術/kaomoji_over_30_thousand

 顔文字を3万個集める技術/kaomoji_over_30_thousand

顔文字を集める話をしました。
名古屋Ruby会議04で使用したスライドです。

color_box

June 08, 2019
Tweet

More Decks by color_box

Other Decks in Technology

Transcript

  1. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 1/31
    顔文字を
    顔文字を
    3万個集める技術
    3万個集める技術
    永和亭 色箱
    @color_box

    View Slide

  2. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 2/31
    気をつけよう
    気をつけよう
    夏の暑さと
    夏の暑さと
    並列処理
    並列処理
    色箱

    View Slide

  3. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 3/31
    集めた顔文字
    集めた顔文字

    View Slide

  4. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 4/31

    View Slide

  5. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 5/31
    動機
    動機
    知らないもののことを知りたいし集めたい
    収集用のアプリ作成がおもしろそう

    View Slide

  6. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 6/31
    結果
    結果
    約60万の顔文字を収集完了
    約60万の顔文字を収集完了
    ノイズ、重複除去で5%程度残ると推定
    ノイズ、重複除去で5%程度残ると推定

    View Slide

  7. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 7/31
    約3万
    約3万
    の顔文字を収集
    の顔文字を収集
    (・3・)b

    View Slide

  8. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 8/31
    集め方
    集め方
    1. ツイートを集める
    2. ツイートから顔文字を抽出する
    ( ‘ᾥ’ )シンプル

    View Slide

  9. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 9/31
    Twitter
    Twitterからツイートを集める
    からツイートを集める

    View Slide

  10. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 10/31
    ユーザーの収集
    ユーザーの収集
    顔文字紹介アカウントのフォロワー
    顔文字紹介アカウントのフォロワー
    顔文字使用頻度の高いアカウントのフォロワー
    顔文字使用頻度の高いアカウントのフォロワー
    顔文字利用者を中心にユーザー収集
    ツイートに顔文字が現れる確率が高そう

    View Slide

  11. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 11/31
    ユーザーからツイート収集
    ユーザーからツイート収集
    Twitter APIの制約を守りつつ収集用のtaskを回す
    Parallel gem で並列高速化
    ( ^ω^ 三 ^ω^ )ヒュンヒュン

    View Slide

  12. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 12/31

    View Slide

  13. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 13/31

    View Slide

  14. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 14/31
    暑さと並列実行にCPUがやられ
    暑さと並列実行にCPUがやられ


    全CPUを並列実行で酷使すると
    電源につないでいてもMBPのバッテリーが減る
    ( ᾥ )

    View Slide

  15. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 15/31
    データが吹っ飛ぶ
    データが吹っ飛ぶ
    CPUを酷使したせいかmacが吹っ飛ぶ
    ついでにSQLiteも吹っ飛ぶ
    バックアップは大事
    \(^o^)/オワタ

    View Slide

  16. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 16/31
    ツイートから顔文字を抽出
    ツイートから顔文字を抽出

    View Slide

  17. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 17/31
    難航
    難航
    顔文字の定義が曖昧
    適切な抽出ルールづくりが難しい

    View Slide

  18. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 18/31
    顔文字に関する論文
    顔文字に関する論文
    ググって見つけた論文を元にルール作成
    Unicodeプロパティによる判別
    完璧ではないのでノイズフィルタが必要

    View Slide

  19. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 19/31
    抽出ロジックはgem化
    colobox/kaomoji

    View Slide

  20. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 20/31
    Usage
    Kaomoji.get_kaomoji_parts('(・3・)\(^o^)/ぷにう')
    =>["(・3・)\(^o^)/"]

    View Slide

  21. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 21/31
    フィルタ成功例
    str = "聴きながら歌うから(*˘ᗜ˘*).。.:*"
    Kaomoji.get_kaomoji_parts(str)
    =>["(*˘ᗜ˘*).。.:*"]
    str = "失敗しました_(:3 」∠)_ ハルかわいい(」’ω’)」オォオォオ!!!ウウゥゥアアォオ!!
    Kaomoji.get_kaomoji_parts(str)
    =>["_(:3 」∠)_ ハル", "(」’ω’)」オォオォオ!!!ウウゥゥアアォオ!!!!!!"]

    View Slide

  22. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 22/31
    フィルタ失敗例
    str = "ザ・下町!!という感じが伝わってきました(≧∀≦)"
    Kaomoji.get_kaomoji_parts(str)
    =>["ザ・下町!!", "(≧∀≦)"]
    str = "それは強いですが、また、悩ましいですね"
    Kaomoji.get_kaomoji_parts(str)
    =>["、また、"]
    str = "中高は行って良かったと思ってる(適当)"
    Kaomoji.get_kaomoji_parts(str)
    =>["(適当)"]

    View Slide

  23. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 23/31
    ノイズデータのフィルタ
    ノイズデータのフィルタ
    カッコが含まれていない
    改行コードが含まれる
    明らかにURLの一部
    文字列長が極端に短い
    などの条件でフィルタ
    顔文字の確度を上げる

    View Slide

  24. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 24/31
    集めたデータ数
    集めたデータ数

    View Slide

  25. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 25/31
    ユーザー数
    ユーザー数
    19,000
    19,000

    View Slide

  26. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 26/31
    ツイート数
    ツイート数
    40,000,000
    40,000,000

    View Slide

  27. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 27/31
    抽出した顔文字
    抽出した顔文字
    11,000,000
    11,000,000

    View Slide

  28. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 28/31
    フィルタにより選別された数
    フィルタにより選別された数
    630,000
    630,000

    View Slide

  29. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 29/31
    顔文字数
    顔文字数
    重複、ノイズを除いておおよそ
    30,000
    30,000
    ─=≡Σ((( ╹ω╹)

    View Slide

  30. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 30/31
    今後
    今後
    フィルタリングの確度向上
    顔文字カタログでも作って公開(するかも)

    View Slide

  31. 6/8/2019 Slides
    localhost:10000/?print-pdf#/ 31/31
    まとめ
    まとめ
    大量データ収集楽しい
    大量データ収集楽しい
    L('ω')┘三└('ω')」
    L('ω')┘三└('ω')」
    古いものには研究と論文があ
    古いものには研究と論文があ
    り、読むと捗る
    り、読むと捗る
    気をつけよう 夏の暑さと 並列
    気をつけよう 夏の暑さと 並列
    処理
    処理

    View Slide