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. 目次 • はじめに(SNSルール等) • 自己紹介 • NNモデルとembedding • 学習済みモデルのTech Blogへの活用

    • 独自モデルの学習と検索の高速化 • おわりに Public Copyright ©︎ 2021 by Future Corporation
  2. 自己紹介 2020年4月入社 SAIG所属 金子 剛士 東北大学薬学部卒 Kaggle Expert / AtCoder

    青 AtCoderでFutureに興味を持ち新卒入社 現在は推薦分野の調査、実装や データ分析を行っています。 SoftwareDesign 2021年11月号 第1特集「Kaggleで知る機械学習」 第4・5章 執筆 Public Copyright ©︎ 2021 by Future Corporation
  3. NNモデルによるベクトル化 多くの深層学習のモデルは2つのパーツに分解することができます。 • データから特徴量を抽出するbottom層 • 抽出した特徴量から分類・回帰等のタスクを行うtop層 Public Copyright ©︎ 2021

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

    by Future Corporation 入力データ • 画像/自然言語/音声 Bottom層 • ConvNet/Transformer Top層 • 分類タスク/回帰タスク 生の数値データ embedding 予測値 処理の過程で変換された ベクトルを取り出します
  5. ベクトル同士の比較方法 ベクトルを比較する方法はいくつかあります コサイン類似度は二つのベクトルがどれくらい似ているかを計算するのに適しています。 本発表ではベクトルをコサイン類似度で比較していきます。 Public Copyright ©︎ 2021 by Future

    Corporation 比較方法 計算方法 範囲 注釈 ユークリッド距離 各次元の値の差の二 乗値を合計した値の平 方根 [0 ~ ∞] 日常的な二点間の距離 内積 各次元の値の積を合計 した値 [-∞ ~ ∞] 高校数学ででてくる コサイン類似度 二つのベクトルのノル ム(大きさ)を正規化して から計算した内積の値 [-1 ~ 1] 二つのベクトルのなす角のコサイン に相当
  6. Topic • 類似記事検索 • タグ推薦 • 記事のクラスタリング Public Copyright ©︎

    2021 by Future Corporation 学習済みモデルの Tech Blogへの活用
  7. 事前学習済みモデル 事前に大規模なデータで学習された深層学習モデルは色々な分野で公開されています。 これらを活用することで、手軽にデータ分析・予測が可能です。 Public Copyright ©︎ 2021 by Future Corporation

    種類 モデル名 特徴 画像 EfficientNet V2 軽量かつ高パフォーマンス 画像 Vision Transformer 重いが高精度 画像 ConvMixer 画像の入力解像度、サイズが固定 自然言語 BERT 様々なモデルサイズが用意 自然言語 Universal Sentence Encoder 様々なタスクで事前学習、16ヶ国語を変換可能 自然言語 LaBSE 英語をpivotに109ヶ国語をベクトルへ変換可能 音声 wav2vec 音声からベクトルを抽出
  8. 本日紹介するデモ 本日は弊社の技術ブログを題材に、自然言語の事前学習済みモデルを使用して三つのデモ を行います。 • 類似記事検索: 記事の中身が似た記事を探す • タグ推薦: 記事につけるタグを予想する •

    記事のクラスタリング: 記事のクラスタリングを行い可視化する 次のページからは以下の説明をします。 • 入力データのTech Blogの紹介 • Embeddingの抽出に使用したモデル その後、各三つのデモについて説明します。 Public Copyright ©︎ 2021 by Future Corporation
  9. デモに使用した入力データ 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を適用し性能を評価、医薬品-原疾患-有害事象 の可視化を行いました…
  10. デモに使用した機械学習モデル 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を取得 できます。
  11. 類似記事検索 Public Copyright ©︎ 2021 by Future Corporation 目的 記事の各ページにある関連記事を

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

    その他の実験結果 • 記事全文を使うよりタイトル+ledeのみの方が良かったです。 • 記事見出しは精度向上に貢献しました。 モデル名 結果 実行時間 USE 0.1745 9.99s USE-L 0.1950 2min20s
  13. 上位の記事タイトル 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「アジ ャイルと品質保証を考える勉強 会」" "フューチャー技術ブログの運 営で心がけていること"
  14. タグの推薦 Public Copyright ©︎ 2021 by Future Corporation 目的 過去に用いたタグの中から新しい記事に

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

    考察 タグをUSEで直接変換する場合、マイナーな技術用語は語彙に入っておらず対応できませ んが、タグに紐づいた記事の平均からタグのベクトルを生成した場合はマイナーな単語に も対応できたことが後者が良かった理由と考えられます。 モデル名 MAP@10 USE-Lで直接変換 0.3336 USE-Lの平均 0.5749
  16. タグの推薦の結果 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]
  17. 記事のクラスタリング Public Copyright ©︎ 2021 by Future Corporation 目的 記事をクラスタリングし、傾向やクラスタごとの関係を把握する。

    方法 コサイン類似度に関連したクラスタリング手法を用います。 実験 faissに実装されているspherical kmeansを用い、記事を10個のクラスタに分割します。 その後、各クラスタの中心点についてコサイン類似度を用いたウォード法により、階層ク ラスタリングを行いデンドログラムを作成します。
  18. 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 登壇レポート 機械学習 参加レポート
  19. 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"
  20. 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) 参加報告"
  21. 階層クラスタリングの結果 Public Copyright ©︎ 2021 by Future Corporation Kmeansの中心点を階層クラスタリングにかけ、 右のようなデンドログラムを得られました。

    AWSとGCP、登壇レポート同士のクラスタが近い 関係になっています。 また、右図の作成時に一次元の順序がコサイン類 似度の距離を反映するように並び替えているの で、分かりやすくなっています。
  22. レコメンドへの活用例 Public Copyright ©︎ 2021 by Future Corporation 関連記事のレコメンド 類似記事の検索結果は、ある記事を読んだ人に対する次の記事の推薦に使えます。

    また、記事の類似度だけでなく、「同じクラスタの最新記事」や「同じクラスタの人気記 事」を推薦することで、多様性のある推薦を行うこともできます。 パーソナライズドレコメンド Tech Blogでは個人の閲覧履歴を保存していませんが、もし閲覧履歴を取得できる場合、 閲覧履歴の記事のembeddingの平均をとることで、個人の嗜好を表現できます。これによ り閲覧ユーザーの傾向のクラスタリングや、個人の嗜好に近い記事の推薦が行えます。
  23. Topic • Gensimを用いた集合データの学習 • 対照学習を用いたテーブルデータの学習 • ScaNNによる近似近傍探索 Public Copyright ©︎

    2021 by Future Corporation Copyright ©︎ 2021 by Future Corporation 独自モデルの学習 と検索の高速化
  24. 独自モデルの学習 Public Copyright ©︎ 2021 by Future Corporation 前章では自然言語を題材に、事前学習済みモデルを用いました。 この章では独自のembeddingを作成し、活用する方法を紹介します。

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

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

    語のembeddingを学習します。 以下はWord2Vecの内、CBOWというアルゴリズムの例です。 CBOWでは、前後の単語から???の単語を予測し、embeddingを学習します。 「私」「は」「昨日」「焼肉」「を」「???」「優勝」「した」 この単語をウェブサイトでのユーザーの行動履歴や、レシート等の購入情報に置き換えて 学習することができます。 「Aを閲覧」→「Cを閲覧」 → 「???」 → 「Bを購入」 → 「Dを閲覧」 レシート: 「鶏肉」「カレールー」「???」「玉ねぎ」「ピーマン」
  27. Gensimを用いる方法 Public Copyright ©︎ 2021 by Future Corporation Gensimによる実装は容易で、かつGPU無 しでも十分高速に動くことが多いです。

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

    習例を紹介します。 対照学習は近年話題になっている学習手 法です。一つのデータに対して水増しの操 作を行い、水増し後のデータが同じデータ 由来かを予測することにより”教師なし”で 教師あり学習並かそれ以上の学習モデルを 作成できます。 今回はテーブルデータに対し、対照学習 による事前学習とembeddingの取得を行い ました。 “Exploring Simple Siamese Representation Learning” より引用
  29. 対照学習を用いる方法 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に近いタスクと同じデータ由来かを確かめる対照学習のタスクで事前学習
  30. 対照学習を用いる方法 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
  31. ScaNNによる近似近傍探索 Public Copyright ©︎ 2021 by Future Corporation 最後に、コサイン類似度による検索を高速化するための技術を紹介します。 コサイン類似度によるembeddingによる検索は、Factorization

    Machineのようなモデル に比べると遥かに高速です。とはいえ、全スコアの計算にデータ数x次元数の計算時間が かかるため、検索対象が多い場合はレスポンスタイムが悪いです。 これらの改善のため、Locality Sensitive HashingやProduct Quantizationなど様々な手法 が開発されてきました。このうち、コサイン類似度による検索に限定した際におすすめな のは、googleの開発したScaNNという手法です。
  32. 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に取得した情報を使用した。
  33. 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
  34. おわりに Public Copyright ©︎ 2021 by Future Corporation 今回はembeddingの活用方法と最先端の技術を紹介しました。 embeddingによる検索・推薦はランキング系の推薦モデルよりも高速に行うことができ、

    かつ近似近傍探索によりさらに高速化できます。 事前学習済みモデルを使うと手軽に、追加の学習でより幅広くembeddingは活用できるの で、是非embeddingを試してみてください。