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

embeddingを用いた分析・検索・推薦の技術

nadare
November 29, 2021

 embeddingを用いた分析・検索・推薦の技術

『Future Tech Night #17「embeddingの活用」と「MLOps」のAI勉強会』(https://future.connpass.com/event/231310/)で発表した資料です

nadare

November 29, 2021
Tweet

More Decks by nadare

Other Decks in Technology

Transcript

  1. embeddingを用いた分析・
    検索・推薦の技術
    2021/11/26 Fri.
    金子 剛士
    Public
    Copyright ©︎ 2021 by Future Corporation

    View full-size slide

  2. 目次
    ● はじめに(SNSルール等)
    ● 自己紹介
    ● NNモデルとembedding
    ● 学習済みモデルのTech Blogへの活用
    ● 独自モデルの学習と検索の高速化
    ● おわりに
    Public
    Copyright ©︎ 2021 by Future Corporation

    View full-size slide

  3. はじめに
    embeddingは深層学習の処理の過程でできる、データの性質を捉えたベクトルです。
    これを活用することにより、高度な分析や類似検索・推薦などができます。
    本発表ではオープンデータを元にembeddingの活用例や最先端の技術を紹介します。
    SNSルール
    ● 本発表についてスクリーンショット・SNSの共有はOKです!
    ● Twitterで呟く際は #future_tech_night のタグをお願いします。
    ● 本発表の資料は後で技術ブログで公開予定です。質疑応答についても一部をブログ記事
    に掲載します。
    Public
    Copyright ©︎ 2021 by Future Corporation

    View full-size slide

  4. 自己紹介
    2020年4月入社 SAIG所属
    金子 剛士
    東北大学薬学部卒
    Kaggle Expert / AtCoder 青
    AtCoderでFutureに興味を持ち新卒入社
    現在は推薦分野の調査、実装や
    データ分析を行っています。
    SoftwareDesign 2021年11月号
    第1特集「Kaggleで知る機械学習」
    第4・5章 執筆
    Public
    Copyright ©︎ 2021 by Future Corporation

    View full-size slide

  5. Topic
    ● NNモデルによるベクトル化
    ● ベクトル同士の比較方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    NNモデルと
    embedding

    View full-size slide

  6. NNモデルによるベクトル化
    多くの深層学習のモデルは2つのパーツに分解することができます。
    ● データから特徴量を抽出するbottom層
    ● 抽出した特徴量から分類・回帰等のタスクを行うtop層
    Public
    Copyright ©︎ 2021 by Future Corporation
    入力データ
    • 画像/自然言語/音声
    Bottom層
    • ConvNet/Transformer
    Top層
    • 分類タスク/回帰タスク
    生の数値データ embedding 予測値

    View full-size slide

  7. NNモデルによるベクトル化
    多くの深層学習のモデルは2つのパーツに分解することができます。
    ● データから特徴量を抽出するbottom層
    ● 抽出した特徴量から分類・回帰等のタスクを行うtop層
    Public
    Copyright ©︎ 2021 by Future Corporation
    入力データ
    • 画像/自然言語/音声
    Bottom層
    • ConvNet/Transformer
    Top層
    • 分類タスク/回帰タスク
    生の数値データ embedding 予測値
    処理の過程で変換された
    ベクトルを取り出します

    View full-size slide

  8. ベクトル同士の比較方法
    ベクトルを比較する方法はいくつかあります
    コサイン類似度は二つのベクトルがどれくらい似ているかを計算するのに適しています。
    本発表ではベクトルをコサイン類似度で比較していきます。
    Public
    Copyright ©︎ 2021 by Future Corporation
    比較方法 計算方法 範囲 注釈
    ユークリッド距離 各次元の値の差の二
    乗値を合計した値の平
    方根
    [0 ~ ∞] 日常的な二点間の距離
    内積 各次元の値の積を合計
    した値
    [-∞ ~ ∞] 高校数学ででてくる
    コサイン類似度 二つのベクトルのノル
    ム(大きさ)を正規化して
    から計算した内積の値
    [-1 ~ 1] 二つのベクトルのなす角のコサイン
    に相当

    View full-size slide

  9. Topic
    ● 類似記事検索
    ● タグ推薦
    ● 記事のクラスタリング
    Public
    Copyright ©︎ 2021 by Future Corporation
    学習済みモデルの
    Tech Blogへの活用

    View full-size slide

  10. 事前学習済みモデル
    事前に大規模なデータで学習された深層学習モデルは色々な分野で公開されています。
    これらを活用することで、手軽にデータ分析・予測が可能です。
    Public
    Copyright ©︎ 2021 by Future Corporation
    種類 モデル名 特徴
    画像 EfficientNet V2 軽量かつ高パフォーマンス
    画像 Vision Transformer 重いが高精度
    画像 ConvMixer 画像の入力解像度、サイズが固定
    自然言語 BERT 様々なモデルサイズが用意
    自然言語 Universal Sentence Encoder 様々なタスクで事前学習、16ヶ国語を変換可能
    自然言語 LaBSE 英語をpivotに109ヶ国語をベクトルへ変換可能
    音声 wav2vec 音声からベクトルを抽出

    View full-size slide

  11. 本日紹介するデモ
    本日は弊社の技術ブログを題材に、自然言語の事前学習済みモデルを使用して三つのデモ
    を行います。
    ● 類似記事検索: 記事の中身が似た記事を探す
    ● タグ推薦: 記事につけるタグを予想する
    ● 記事のクラスタリング: 記事のクラスタリングを行い可視化する
    次のページからは以下の説明をします。
    ● 入力データのTech Blogの紹介
    ● Embeddingの抽出に使用したモデル
    その後、各三つのデモについて説明します。
    Public
    Copyright ©︎ 2021 by Future Corporation

    View full-size slide

  12. Future Tech Blog 概要
    ● フューチャーの開発者による公式技術ブログ。
    ● 2016-02-16から2021/11/11まで594本の投稿。
    ● 2021年は現時点で257本の記事が投稿されています。
    Public
    Copyright ©︎ 2021 by Future Corporation

    View full-size slide

  13. デモに使用した入力データ
    TechBlogのソースはgithubで公開されています。
    各記事はmarkdownファイルで管理されており、冒頭にメタデータがあります。
    title+lede+記事の見出しを入力にembeddingを作成し、tagで評価を行います。
    Public
    Copyright ©︎ 2021 by Future Corporation
    項目名 項目の概要 例
    Title 記事名 医薬品副作用データベースから医薬品同士の関係を学
    習・評価・可視化する
    Date 投稿日 2021/09/01 00:00:00
    Tag タグ(複数可) Python, ヘルスケア, Word2Vec
    Category 記事のカテゴリ(複数可) DataScience
    Lede 記事一覧に出る記事の概要 こんにちは!Strategic AI Groupの金子です。夏の自由研
    究ブログ連載2021として医薬品副作用データベースに
    Word2Vecを適用し性能を評価、医薬品-原疾患-有害事象
    の可視化を行いました…

    View full-size slide

  14. デモに使用した機械学習モデル
    Universal Sentence Encoderを利用します。
    以下の二つのバージョンを使っています。
    Public
    Copyright ©︎ 2021 by Future Corporation
    モデル名 特徴
    universal-
    sentence-
    encoder-
    multilingual
    (USE)
    16ヶ国語に対応した言語モデル。
    Deep Averaging Networkを用いており
    文長Lに対しO(L)で動作し軽量
    universal-
    sentence-
    encoder-
    multilingual-
    Large
    (USE-L)
    16ヶ国語に対応した言語モデル。
    Transformerを用いており
    文長Lに対しO(L^2)で動作し重いがそ
    の分精度がいい。
    Universal Sentence Encoderの使用例
    数行の実装でtextからembeddingを取得
    できます。

    View full-size slide

  15. 類似記事検索
    Public
    Copyright ©︎ 2021 by Future Corporation
    目的
    記事の各ページにある関連記事を
    より近いものにすること。
    方法
    各記事をembeddingに変換します。それぞれの記事に似たembeddingを持つ記事を類似記
    事とし、タグの一致度により類似度を評価します。
    実験
    USE、USE-Lにより各記事のタイトル+lede+本文中の見出しをembeddingに変換します。
    embedding同士のコサイン類似度によりTOP4を取得します。
    記事に紐づいたタグのダイス係数を計算し、順位の対数で重みづけして評価します。
    ダイス係数は[0, 1]の間の値を取り、1に近づくほど高精度になります。

    View full-size slide

  16. 類似記事検索の結果
    Public
    Copyright ©︎ 2021 by Future Corporation
    USE-LはUSEに比べ14倍の実行時間がかかるものの、
    USE-Lの方がUSEより良い結果になりました。
    その他の実験結果
    ● 記事全文を使うよりタイトル+ledeのみの方が良かったです。
    ● 記事見出しは精度向上に貢献しました。
    モデル名 結果 実行時間
    USE 0.1745 9.99s
    USE-L 0.1950 2min20s

    View full-size slide

  17. 上位の記事タイトル
    Public
    Copyright ©︎ 2021 by Future Corporation
    元記事 1位 2位 3位 4位
    "Vis Networkで階層グラフを可
    視化する"
    "mxGraphで階層グラフを可
    視化する"
    "2020年秋にVue.jsのアプリケ
    ーションを作るなら、押さえてお
    きたい5つのポイント"
    "AWS内の通信がインターネッ
    トを経由しない今、VPC
    Endpointを利用する意味はあ
    る...
    "Vue CLIのデフォルト設定から
    ESLintのベストプラクティスを
    検討する"
    "Vue.jsのslotの機能を初心者
    にわかるように解説してみた"
    "Vue.js最初の難関、「props
    down, event up」を初心者に
    わかるように...
    "2020年秋にVue.jsのアプリケ
    ーションを作るなら、押さえてお
    きたい5つのポイント"
    "その値、Vue.jsは監視してい
    ますか?~Vue.jsで値が更新
    されないときに気をつけると...
    "Go 1.16のgo:embedとNext.js
    の相性が悪い問題と戦う"
    "Go Conferenceの📛を作る"
    "Go Conference Online 2021
    Autumnが開催されました&作
    って学...
    "Goの標準ライブラリのコードリ
    ーディングのすすめ"
    "Go Conference 2021 Spring
    に登壇しました"
    "Go Conference 2019
    Autumn に登壇しました"
    "実務で扱う未経験技術を効率
    良く習得するために考えたこと
    /経験別入社前にやっておくと
    いいこと"
    "エンジニアが持っておくと幸せ
    になれるビジネス視点"
    "Technical Credibilityを築く
    ということ"
    "Software Design 後記"
    "(新卒で役にたつ!)SQL小技
    集"
    "Technical Credibilityを築くと
    いうこと"
    "Engineer Camp 2021(IoT
    プラットフォーム)に参加しまし
    た!"
    "テックイベント2021@フューチ
    ャーのご紹介"
    "Future Tech Night #13「アジ
    ャイルと品質保証を考える勉強
    会」"
    "フューチャー技術ブログの運
    営で心がけていること"

    View full-size slide

  18. タグの推薦
    Public
    Copyright ©︎ 2021 by Future Corporation
    目的
    過去に用いたタグの中から新しい記事に
    つけるべきタグを推薦する。
    方法
    タグのembeddingを作成し、記事のembeddingから似たタグを推薦します。
    実験
    古い順から500記事を訓練データとし、11/19までの102記事を評価データにします。
    以下の二種類の方法によりタグのembeddingを作成しタグについてMAP@10で評価しま
    す。
    ● USE-Lによりタグをembeddingに変換
    ● タグに紐づいた記事のembeddingの平均をタグのembeddingにする

    View full-size slide

  19. タグの推薦の実験結果
    Public
    Copyright ©︎ 2021 by Future Corporation
    記事embeddingの平均でタグのembeddingを作る方が直接変換より良い結果になりまし
    た。
    考察
    タグをUSEで直接変換する場合、マイナーな技術用語は語彙に入っておらず対応できませ
    んが、タグに紐づいた記事の平均からタグのベクトルを生成した場合はマイナーな単語に
    も対応できたことが後者が良かった理由と考えられます。
    モデル名 MAP@10
    USE-Lで直接変換 0.3336
    USE-Lの平均 0.5749

    View full-size slide

  20. タグの推薦の結果
    Public
    Copyright ©︎ 2021 by Future Corporation
    A
    記事名 実際についていたタグ 推薦したタグ
    "GoのORマッパー連載を始めます
    "
    [Go, ORM, インデックス]
    [インデックス, Go, GoTips連載, サ
    ブスクリプション, Zuora]
    "Go1.17における go get の変更点
    "
    [Go, Go1.17]
    [Go1.16, Makefile, Go, GoTips連
    載, 設計]
    "Sesame3にICカード施錠/解錠機
    能を実装してみた with Go &
    Python"
    [Go, Python, SESAME3,
    RaspberryPi]
    [S3, 登壇レポート,
    GitHubActions, CI/CD, Glue]
    “エキスパートPythonプログラミン
    グ改3版が出版されました”
    [Python, 書籍, 出版]
    [Python, 書籍, 出版, 登壇レポート,
    Java]
    "Adobe XDからFlutterに変換する
    "
    [AdobeXD, Flutter]
    [Flutter, Dart, モバイルアプリ, ケ
    ンオール, Proxy]

    View full-size slide

  21. 記事のクラスタリング
    Public
    Copyright ©︎ 2021 by Future Corporation
    目的
    記事をクラスタリングし、傾向やクラスタごとの関係を把握する。
    方法
    コサイン類似度に関連したクラスタリング手法を用います。
    実験
    faissに実装されているspherical kmeansを用い、記事を10個のクラスタに分割します。
    その後、各クラスタの中心点についてコサイン類似度を用いたウォード法により、階層ク
    ラスタリングを行いデンドログラムを作成します。

    View full-size slide

  22. Spherical Kmeansの結果
    Public
    Copyright ©︎ 2021 by Future Corporation
    各クラスタの中心点に近いタグからクラスタの命名を行いました。
    クラスタID 1位 2位 3位
    0 GCP GoCDK
    マルチクラウ

    1 アルゴリズム 初心者向け 入門
    2 インデックス 春の入門祭り 秋ブログ週間
    3 登壇レポート 初心者向け TechNight
    4 AWS Lambda データレイク
    クラスタID 1位 2位 3位
    5 JavaScript フロントエンド Vue.js
    6 Go 設計 GoTips連載
    7 GoogleCloudNext KVS Network
    8 Flutter Dart モバイルアプリ
    9 登壇レポート 機械学習 参加レポート

    View full-size slide

  23. Spherical Kmeansの結果
    Public
    Copyright ©︎ 2021 by Future Corporation
    各クラスタの中心点に近い記事を集めました。
    クラスタ名
    GCP GoCDK マルチクラ
    ウド
    "Google Cloud Platform
    101"
    "Let's Try GCP #2 ~
    Cloud FunctionsをVPC
    connect...
    "GCP Associate Cloud
    Engineer 合格記"
    "GCP連載#3 Goでサーバ
    ーレスな管理画面アプリを
    作る"
    アルゴリズム 初心者向け
    入門 "Software Design 後記" "登が教えるSQL基礎"
    "SQLBoiler(とoapi-
    codegen)でつくるREST
    APIサーバ"
    "SQL実行時のブルームフ
    ィルタ(Bloom Filter)アルゴ
    リズム"
    インデックス 春の入門祭り
    秋ブログ週間
    "技術ブログの2021年の連
    載予定を発表します"
    "春の入門連載2021を始
    めます"
    "CNCF連載始めます"
    "GCP連載2021を始めま
    す"
    登壇レポート 初心者向け
    TechNight
    "Future Tech Night(第6
    弾:GCP x インフラ構築編)
    を開催しました"
    "Engineer Camp 2021
    (IoTプラットフォーム)に参
    加しました!"
    "Engineer Camp 2020(ス
    マートファクトリー) 参加記"
    "Future Tech Night #16
    ~クラウド時代のDWH~"
    AWS Lambda データレイ

    "Go x AWSでつくる サー
    ビス運用ツール実例集"
    "LambdaとGoを使ったサ
    ーバーレスWebAPI開発実
    践入門"
    "AWS Certified Data
    Analytics - Specialty合格
    体験記"
    "AWSマネージド
    Airflow(MWAA)について
    のFAQ"

    View full-size slide

  24. Spherical Kmeansの結果
    Public
    Copyright ©︎ 2021 by Future Corporation
    各クラスタの中心点に近い記事を集めました。
    クラスタ名
    JavaScript フロントエンド
    Vue.js
    "2020年秋にVue.jsのアプ
    リケーションを作るなら、押
    さえておきたい5つのポイン
    ト"
    "CheetahGrid+Vue.jsをエ
    ンプラで使ってみた"
    "チームで推奨する
    VSCode拡張機能を共有
    するtips"
    "Goのデバッグ環境 on
    VSCode"
    Go 設計 GoTips連載 "Goの標準ライブラリのコ
    ードリーディングのすすめ"
    "GoのWebアプリ開発でフ
    ラットパッケージにした話"
    "GORM v1 と v2 のソース
    コードリーディングしてみた
    "
    "Go 1.16のgo installにつ
    いて"
    GoogleCloudNext KVS
    Network
    "KVSと二年間向き合って
    得たナレッジを還元する時
    がきた"
    "Google Cloud Next '19
    in Tokyo Day3 セッション
    レポート"
    "Google Cloud Next ’19
    in Tokyo Day2 セッション
    レポート"
    "インフラ入門vol.3(ネットワ
    ーク冗長化構成)"
    Flutter Dart モバイルアプ
    リ "Flutterレイアウト入門"
    "Proxy下でのFlutter環境
    構築(for Mac)"
    "Flutterアプリを
    DeployGateで公開するた
    めのいろいろ"
    "Dart/Flutter連載始めます
    "
    登壇レポート 機械学習 参
    加レポート
    "テックイベント2021@フュ
    ーチャーのご紹介"
    "第五回社内LT大会~頑
    張る人は光るらしい"
    "第二回LT大会の報告"
    "人工知能学会
    (JSAI2019) 参加報告"

    View full-size slide

  25. 階層クラスタリングの結果
    Public
    Copyright ©︎ 2021 by Future Corporation
    Kmeansの中心点を階層クラスタリングにかけ、
    右のようなデンドログラムを得られました。
    AWSとGCP、登壇レポート同士のクラスタが近い
    関係になっています。
    また、右図の作成時に一次元の順序がコサイン類
    似度の距離を反映するように並び替えているの
    で、分かりやすくなっています。

    View full-size slide

  26. レコメンドへの活用例
    Public
    Copyright ©︎ 2021 by Future Corporation
    関連記事のレコメンド
    類似記事の検索結果は、ある記事を読んだ人に対する次の記事の推薦に使えます。
    また、記事の類似度だけでなく、「同じクラスタの最新記事」や「同じクラスタの人気記
    事」を推薦することで、多様性のある推薦を行うこともできます。
    パーソナライズドレコメンド
    Tech Blogでは個人の閲覧履歴を保存していませんが、もし閲覧履歴を取得できる場合、
    閲覧履歴の記事のembeddingの平均をとることで、個人の嗜好を表現できます。これによ
    り閲覧ユーザーの傾向のクラスタリングや、個人の嗜好に近い記事の推薦が行えます。

    View full-size slide

  27. Topic
    ● Gensimを用いた集合データの学習
    ● 対照学習を用いたテーブルデータの学習
    ● ScaNNによる近似近傍探索
    Public
    Copyright ©︎ 2021 by Future Corporation
    Copyright ©︎ 2021 by Future Corporation
    独自モデルの学習
    と検索の高速化

    View full-size slide

  28. 独自モデルの学習
    Public
    Copyright ©︎ 2021 by Future Corporation
    前章では自然言語を題材に、事前学習済みモデルを用いました。
    この章では独自のembeddingを作成し、活用する方法を紹介します。
    Gensimを用いる方法
    Gensimというライブラリを用い、ログデータや集合データからembeddingを作成する方法
    を紹介します。Gensimは容易に使え、計算量も軽いので入門にオススメの方法です。
    対照学習を用いる方法
    近年話題になっている対照学習により、ありとあらゆる形式のデータをembeddingに変換
    する方法を紹介します。難易度は高いですが、事前学習済みモデル等では実現できない高
    度な検索・分析が可能な方法です。

    View full-size slide

  29. Gensimを用いる方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    Gensimは自然言語処理でよく使われるモデルをまとめたライブラリです。
    Gensimに実装されている手法の内、Word2Vecは、文章について単語の前後の情報から単
    語のembeddingを学習します。
    以下はWord2Vecの内、CBOWというアルゴリズムの例です。
    CBOWでは、前後の単語から???の単語を予測し、embeddingを学習します。
    「私」「は」「昨日」「焼肉」「を」「???」「優勝」「した」

    View full-size slide

  30. Gensimを用いる方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    Gensimは自然言語処理でよく使われるモデルをまとめたライブラリです。
    Gensimに実装されている手法の内、Word2Vecは、文章について単語の前後の情報から単
    語のembeddingを学習します。
    以下はWord2Vecの内、CBOWというアルゴリズムの例です。
    CBOWでは、前後の単語から???の単語を予測し、embeddingを学習します。
    「私」「は」「昨日」「焼肉」「を」「???」「優勝」「した」
    この単語をウェブサイトでのユーザーの行動履歴や、レシート等の購入情報に置き換えて
    学習することができます。
    「Aを閲覧」→「Cを閲覧」 → 「???」 → 「Bを購入」 → 「Dを閲覧」
    レシート: 「鶏肉」「カレールー」「???」「玉ねぎ」「ピーマン」

    View full-size slide

  31. Gensimを用いる方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    Gensimによる実装は極めて簡単で、単語について分かち書きしたものリストにし、
    Gensimに渡すだけで学習できます。以下はGensimのWord2Vecで学習を行うコードの例
    です。sentencesに文字列のリストのリストを渡すだけで学習ができます。

    View full-size slide

  32. Gensimを用いる方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    Gensimによる実装は容易で、かつGPU無
    しでも十分高速に動くことが多いです。
    一方、Gensimの代わりにTensorflowで
    Word2Vecを実装し細かいチューニングを
    行うことで、より高精度を出すことも可能
    です。
    実際に比較した例は、過去に私の書いた記
    事を参照してください。
    医薬品副作用データベースから医薬品同士
    の関係を学習・評価・可視化する

    View full-size slide

  33. 対照学習を用いる方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    より様々なデータをembeddingに変換す
    るために、対照学習によるembeddingの学
    習例を紹介します。
    対照学習は近年話題になっている学習手
    法です。一つのデータに対して水増しの操
    作を行い、水増し後のデータが同じデータ
    由来かを予測することにより”教師なし”で
    教師あり学習並かそれ以上の学習モデルを
    作成できます。
    今回はテーブルデータに対し、対照学習
    による事前学習とembeddingの取得を行い
    ました。
    “Exploring Simple Siamese Representation Learning”
    より引用

    View full-size slide

  34. 対照学習を用いる方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    Forest Cover Typeのデータセットを元に実験を行いました。
    ● train: 15,120件 test: 565,892件 のデータセット(ラベル付きのものが少ない)
    ● 多クラス分類のデータセットで、目的変数は不均衡で7種類
    ● 10種類の連続変数と2種類のカテゴリ変数をもつテーブルデータ
    モデルは以下のように学習しました。
    ● 連続変数はそれぞれDense Layerで変換
    ● カテゴリ変数はそれぞれEmbedding Layerで変換
    ● Transformer (num_head=8, layer=4)を学習
    ● MLMに近いタスクと同じデータ由来かを確かめる対照学習のタスクで事前学習

    View full-size slide

  35. 対照学習を用いる方法
    Public
    Copyright ©︎ 2021 by Future Corporation
    「教師なし」事前学習によって得られたembeddingにつ
    いてumapで可視化しtargetで色分けしました。テーブル
    データでも近いものが取れています。
    また、同じデータで予測をした際、事前学習済みのモデ
    ルをfine tuningしたものが一番精度がよくなりました。
    model Accuracy
    教師なし事前学習+KNN(k=2) 0.51207
    事前学習あり+fine tuning 0.75030
    事前学習なし 0.71778
    LightGBM 0.72489

    View full-size slide

  36. ScaNNによる近似近傍探索
    Public
    Copyright ©︎ 2021 by Future Corporation
    最後に、コサイン類似度による検索を高速化するための技術を紹介します。
    コサイン類似度によるembeddingによる検索は、Factorization Machineのようなモデル
    に比べると遥かに高速です。とはいえ、全スコアの計算にデータ数x次元数の計算時間が
    かかるため、検索対象が多い場合はレスポンスタイムが悪いです。
    これらの改善のため、Locality Sensitive HashingやProduct Quantizationなど様々な手法
    が開発されてきました。このうち、コサイン類似度による検索に限定した際におすすめな
    のは、googleの開発したScaNNという手法です。

    View full-size slide

  37. ScaNNによる近似近傍探索
    Public
    Copyright ©︎ 2021 by Future Corporation
    ScaNNはコサイン類似度に合わせた損失を用いて代表点を計算し、事前に木を構築して
    indexを割り振ることで高パフォーマンスな類似度検索を実現する手法です。
    ScaNNはGCPのVertex Matching Engineにも採用されていて実用性が高いです。
    Google AI Blog “Announcing ScaNN: Efficient Vector Similarity Search”より引用

    View full-size slide

  38. ScaNNによる近似近傍探索
    Public
    Copyright ©︎ 2021 by Future Corporation
    目的
    コサイン類似度による検索でどこまでScaNNは高速化できるかを測定する。
    方法
    JADER(*1)のデータを用い、類似症例の検索によって精度を評価する。
    実験
    Gensimにより症例の要素をembeddingに変換し、それらを集約したものを症例の
    embeddingとします。症例の類似度は症例の要素同士のdice係数を順位の対数で重みづけ
    します。近傍の探索はCPUで行い、Tensorflow Recommendersにラップされている全探索
    とScaNNを比較します。
    (*1)医薬品医療機器総合機構(PMDA)による医薬品副作用データベース、英名: Japanese Adverse Drug Event Report databaseについて2021/11/16に取得した情報を使用した。

    View full-size slide

  39. ScaNNによる近似近傍探索
    Public
    Copyright ©︎ 2021 by Future Corporation
    各計算時間と評価値は以下のようになりました。
    近傍は692,821件からtop10を21,072回取得するのにかかった時間です。
    ScaNNで検索した後、上位100件をコサイン類似度で並べなおすことにより、検索時間は
    30倍に高速化されました。
    近傍探索方法 集約方法 Indexの計算
    時間
    近傍の計算時

    score
    BruteForce mean 69.2ms 1min51s 0.525
    BruteForce max 45.9ms 1min44s 0.512
    ScaNN mean 14.5s 3.14s 0.490
    ScaNN
    (reorder=100)
    mean 14.2s 3.80s 0.522

    View full-size slide

  40. おわりに
    Public
    Copyright ©︎ 2021 by Future Corporation
    今回はembeddingの活用方法と最先端の技術を紹介しました。
    embeddingによる検索・推薦はランキング系の推薦モデルよりも高速に行うことができ、
    かつ近似近傍探索によりさらに高速化できます。
    事前学習済みモデルを使うと手軽に、追加の学習でより幅広くembeddingは活用できるの
    で、是非embeddingを試してみてください。

    View full-size slide

  41. Thank you for listening.
    Copyright ©︎ 2021 by Future Corporation Public

    View full-size slide