狠狠撸

狠狠撸Share a Scribd company logo
MLデザインパターン入門
2021/04/13
(2)Embeddings
2
1-2. Embeddings
3
Embeddings まとめ
概要
高いカーディナリティのデータを低次元空間に射影する際の問題
問題
1. カテゴリ変数のカテゴリー数が膨大
2. 入力特徴量の間に意味的な類似性が存在する
解決方法
● 入力特徴量を低次元の空間に写像する方法を学習する
メリット
● カーディナリティの高い入力特徴量(One-Hotエンコーディングされたカテゴリ
カル変数など)を低次元の実数ベクトルで扱える
● 入力特徴量を意味的な近さをもって扱うことができる
4
Embeddings まとめ
トレードオフ
● 埋込む次元が低次元なほど、高カーディナリティから移行する際に情報が失われる
関連手法
● 教师なしで埋込みを学习する础耻迟辞别苍肠辞诲别谤蝉
5
一般的なベクトル化の戦略
例:"The cat sat on the mat"
1. ワンホット?エンコーディング
ボキャブラリの長さに等しいゼロベクトルを作り、その単語に対応する
インデックスの場所に 1 を立てる。常に疎なベクトルとなる。
2. それぞれの単語をユニークな数値としてエンコードする
"cat" に 1、"mat" に 2、というふうに番号を割り当て
例:"The cat sat on the mat" → [5, 1, 4, 3, 5, 2] という密なベクトルで表せる。
このアプローチの 2つの欠点。
● 単語間のいかなる関係性も含まない
● モデルにとっては解釈しにくい。線形分類器はそれぞれの特徴量について単一の
重みしか学習しない。よって2つの単語が似ていることと、それらのエンコーディングが
似ていることの間には、なんの関係もない。
3. 単語埋込み
似たような単語が似たようなベクトルにエンコードされる。このエンコーディングを手動で行う必要がなく、
学習で得られる浮動小数点数の密なベクトル。
6
Embeddings の解説
7
事例
事例1 出生数データ
plurality=同時出生数
gestation weeks=妊娠期間
同時に何人出産したかのデータ、双子だったのか三つ子
だったのかなどを記録
事例2 ビデオ視聴履歴データ
ユーザID、視聴したビデオのIDがある
前回視聴記録からレコメンド一覧を表示する
8
one-hot encodingの問題
問題1 カテゴリ変数のカテゴリー数が膨大
機械学習の様々な入力データを、訓練の文脈にあうよう、意味のある
ベクトルに変換する必要がある。それによってモデルの性能向上につながる。
事例2 ビデオ視聴履歴データ
顧客IDやビデオIDは膨大な数となり one-hot で表現するとスパースになりモデルの
精度が向上しない。
9
one-hot encodingの問題
問題2 カテゴリ変数間が独立で変数間の近さが表現できていない
事例1 のone-hot encoding
TwinsとMultipleの近さはTwinsとTripletsと同じだが、
実体は前者の方が近いはず
10
解決
入力特徴量を低次元のベクトルに変換する埋込み層を追加する
クラスタリングとPCAを利用した次元削減
埋込みの重み学習の前に次元削減を行う必要あり
6次元から2次元に次元削減
11
文章データの埋込み
文章の場合、ボキャブラリのカーディナリティが通常数万語レベルになり、
高次元、スパース行列が作成されてしまう
↓
類似した単語は距離が近い状態、無関係な単語は距離が遠い状態に埋込む必要あり
↓
モデルに渡す前に密なベクトル化が必要
テキスト埋込みのステップ
トレーニング
コーパス
各単語の
トークン化
密な埋込み
モデルに渡す
{1:”the”,2:”a”,3:”to”,4:”for”,...
}
各単語をインデックスにマ
ップするルックアップテー
ブル
12
文章データの埋込み
トークン化をKerasで実行する
keras.preprocessing.text ライブラリの Tokenizer クラスを使用可能
from tensorflow.keras.preprocessing.text
import Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(titles_df.title)
tokenizer.index_word
{1: 'the',
2: 'a',
3: 'to',
4: 'for',
5: 'in',
6: 'of',
7: 'and',
..
Tokenizer.fit_on_texts
各単語をインデックスにマップするルックアップテ
ーブルが作成される
Tokenizer.index_word :ルックアップテーブルを
直接調べる
13
文章データの埋込み
シーケンスマップ生成
単語に対応するトークン
のシーケンスにマップ
生成
シーケンス生成フロー
padding 処理
文の最大長に埋込まれた
トークンに対応する
整数リストへ
ヘルパー関数
Tokenizer.texts_to_sequences
ヘルパー関数
pad_sequence
14
文章データの埋込み
tokenizer = Tokenizer()
tokenizer.fit_on_texts(titles_df.title)
tokenizer.index_word
integerized_titles = tokenizer.texts_to_sequences(
titles_df.title)
VOCAB_SIZE = len(tokenizer.index_word)
MAX_LEN = max(len(sequence) for sequence in
integerized_titles)
from tensorflow.keras.preprocessing.sequence
import pad_sequences
def create_sequences(texts, max_len=MAX_LEN):
sequences = tokenizer.texts_to_sequences(texts)
padded_sequences = pad_sequences(sequences,
max_len,
padding='post')
return padded_sequences
VOCAB_SIZE
インデックスルックアップテーブルの
要素数
MAX_LEN
データセット内のテキスト文字列の最大長
15
文章データの埋込み
埋込層
入力次元:VOCAB_SIZE + 1
出力次元:埋込ごの次元
テキスト最大長:[MAX_LEN]
レイヤー準備
平均化
lambda関数で
ベクトルを平均化する
Softmax 層
model = models.Sequential([
layers.Embedding(
input_dim=VOCAB_SIZE + 1,
output_dim=embed_dim,
input_shape=[MAX_LEN]
),
layers.Lambda(
lambda x:tf.reduce_mean(x,axis=1)
),
layers.Dense(N_CLASSES, activation='softmax')
])
16
画像データの埋込み
画像埋込みの場合、CNNの最終 softmax分類器レイヤーの手前で入力の特徴ベクトルを抽出できる
→入力画像の低次元の埋込み
画像のテキストキャプションを生成するタスク
エンコーダ:画像→画像の埋込みベクトル表現を学習(Image2Vec)
デコーダ :画像の埋込みベクトル表現→キャプション生成を学習
17
埋込み層の考察
埋込み層は、1つの隠れ層で重みはカーディナリティの高い各ディメンションに関連
付けられ、出力はネットワークの残りの部分を通過する
↓
埋込み層の重みは、他の重みと同様に最急降下法のプロセスを通じて学習する
↓
埋込みが、学習タスクで特徴値の最も効率的な低次元表現を表す
埋込みは最終的にモデルに利用するだけでなく、埋込み自体には固有の価値があり、
データセットに対する追加の洞察を得られる
類似性?関連性
特徴量のワンホットエンコーディングの内積による類似性はゼロになる、属性間の類似性
の概念は失われる。実際にはこれらは相応しくない。
事例1 四つ子と五つ子の発生は、一人っ子の出生体重とは対照的に、統計的に同様の方法で
出生時体重に影響を与える可能性がある。
18
埋込み層の考察
左:one-hot encoding 時の類似指標 右:二次元埋め込み後の類似指標
学習された埋込みにより、別々のカテゴリの特徴間の類似性を正確に定量化可能
事例2
?埋込みを顧客データセットに適用すると、類似した顧客を取得し、類似性に
基づいて提案が可能
?さらに、ユーザーとアイテムの埋込みは、個別の機械学習モデルをトレーニングするときに
他の機能と組み合わせることができる
事前にトレーニングされた埋込みを使用する:転移学習
19
トレードオフ
埋め込みを使用する場合の主なトレードオフは、データの表現が損なわれること
高カーディナリティ表現から低次元表現への移行に伴う情報の損失がある
その見返りとして、「アイテムの近さ」と「コンテキストに関する情報」を取得する。
20
埋込み次元の選択に関する経験則
経験則1:最小次元数
一意のカテゴリ要素の総数の4乗根
経験則2:最大次元数
一意のカテゴリ要素数が600以上の場合、埋込み次元は要素数の平方根の約1.6倍
例:625個の一意の値を持つ特徴量をエンコードする場合
経験則1から 625の4乗根 = 5
経験則2から 625の平方根??1.6 = 40
5以上40以内で次元数を探索する
21
Autoencoder
Autoencoder は事前に大量の正解ラベルが不要な場合のアプローチ
「エンコーダー」層、高次元の入力を低次元の埋め込み層にマップ
「デコーダー」は埋込み層を元の高次元のベクトルにマップ
正解ラベル不要で、入力と出力が限りなく類似するよう学習
22
構造化データとTabNet
最近の研究:構造化データに深層学習技術を適用
TabNetは、表形式のデータから学習するように設計されたDNN
● 教師なしでトレーニング可能
● エンコーダー-デコーダー構造を持つようにモデルを変更することにより、表形式データの
オートエンコーダーとして機能
By modifying the model to have an encoder-decoder structure, TabNet works as an autoencoder on
tabular data, which allows the model to learn embeddings from structured data via a feature
transformer.
github - tabnet
https://github.com/google-research/google-research/tree/master/tabnet
TabNet: Attentive Interpretable Tabular Learning
https://arxiv.org/pdf/1908.07442.pdf
23
コンテキスト言語モデル
二つのコンテキスト言語モデル
● Word2Vec
● BERT
Word2Vec
浅いニューラルネットワークを使用して埋め込みを構築し、
テキストの大規模なコーパスに適用される2つの手法
(Continuous Bag of Words(CBOW)とスキップグラムモデル)
を組み合わせる
両方のモデルの目標
入力単語を中間埋め込み層を使用してターゲット単語にマッピングすることによって
単語のコンテキストを学習すること
→コンテキストを最適にキャプチャする低次元の埋込みを学習する
「word embeddigs capture semantic relationship」
学習された結果の単語埋め込み(word embedding)は、
単語間の意味関係(context)を把握し、ベクトル表現は意味のある距離と方向性をもつ
24
コンテキスト言語モデル
BERT
マスクされた言語モデルと次の文の予測を使用してトレーニングされる
● マスクされた言語モデル
単語はテキストからランダムにマスクされ、モデルは欠落している単語が
何であるかを推測する
● 次の文の予測
元のテキストで2つの文が互いに続いているかどうかをモデルが予測する分類
タスク
↓
よって、テキストのコーパスはすべて、ラベル付きデータセットが適する
BERTは当初、英語版ウィキペディアとBooksCorpusのすべてで訓練実施
コンテキストへの依存
Word2Vecにより学習された単語の埋込みは、単語が出現する文に関係なく同じ。
BERTにより学習された単語の埋込みはcontexual、即ちコンテキストに依存する。
=単語の使用方法のコンテキストに応じて、埋込みベクトルが異なる。
25
コンテキスト言語モデル
Word2Vec、NNLM、GLoVE、BERTなどの事前訓練済み
のテキスト埋め込みを機械学習モデルに追加して、
構造化された入力や、顧客やビデオデータセットから
学習したその他の埋め込みと組み合わせてテキスト機能
を処理できる
最終的に埋込みは、「規定された訓練タスクに関連
する情報を保存すること」を学習
● 画像のキャプション生成の場合
画像の要素のコンテキストがテキストにどのように
関連しているかを学習
● オートエンコーダアーキテクチャ
ラベルは機能と同じであるため、ボトルネックの
次元削減は、重要なものの特定のコンテキストなし
ですべてを学習
26
データウェアハウスでの非構造化データ
構造化データの機械学習は、データウェアハウスのSQLで直接実行するのが最適
↓
● データをエクスポートする必要なくなる
● データのプライバシーとセキュリティに関する問題が軽減
ただし、実際には構造化データに対して
自然言語のテキストまたは画像データを組み合わせる必要あり
● 自然言語のテキスト(レビューなど)
列として直接保存
● 画像
クラウドストレージバケット内のファイルへのURLとして保存
↓
テキスト列または画像の埋め込みを配列型として追加保存する
これにより、非構造化データを機械学習モデルに簡単に組込みが可能に
27
TensorFlow Hubと text-embeddings
TensorFlow Hub
https://tfhub.dev/
事前トレーニング済モデル、コーパスが公開されている。
text-embedding 集はこのあたり
https://tfhub.dev/s?module-type=text-embedding
tf2-preview/gnews-swivel-20dim
https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1
Token based text embedding trained on English Google News 130GB corpus.
テキスト埋込みをBigQueryで読み込み可能、サンプルが公開されている
https://github.com/GoogleCloudPlatform/ml-design-
patterns/blob/master/02_data_representation/text_embeddings.ipynb
テキストの類似性 or ドキュメントのクラスタリングのための埋込み使用例
https://towardsdatascience.com/how-to-do-text-similarity-search-and-document-clustering-in-
bigquery-75eb8f45ab65
28
TensorFlow Hub:text-embeddingの利用例
ステップ1 モデル読み込み
%%bigquery
CREATE OR REPLACE MODEL advdata.swivel_text_embed
OPTIONS(model_type='tensorflow', model_path='gs://ai-analytics-solutions-kfpdemo/swivel/*')
ステップ2 モデルを使用して自然言語のテキスト列を埋め込み配列に変換し、
埋め込みルックアップを新しいテーブルに格納
%%bigquery
CREATE OR REPLACE TABLE advdata.comments_embedding AS
SELECT
output_0 as comments_embedding,
comments
FROM ML.PREDICT(MODEL advdata.swivel_text_embed,(
SELECT comments, LOWER(comments) AS sentences
FROM `bigquery-public-data.noaa_preliminary_severe_storms.wind_reports`
))

More Related Content

惭尝デザインパターン入门冲贰尘产别诲诲颈苍驳蝉