機械学習における類似度について

機械学習技術 人工知能技術 デジタルトランスフォーメーション技術 アルゴリズムとデータ構造 一般的な機械学習 Python 本ブログのナビ
類似(similarity)とは

類似性(similarity)は、二つ以上のオブジェクトや事物が共通の特徴や性質を持ち、互いに似ていると見なされる程度を表す概念であり、比較や関連性の観点からオブジェクトを評価したり、分類やグループ化を行ったりする際に重要な役割を果たしている。類似性の度合いは、一般的に数学的または定量的な方法によって測定されることがあるが、主観的な評価も含まれることもある。

類似性の数学的定義は以下のようになる。

定義 1 (類似性) 
類似性 σ : o × o → R は,一対の実体から実数への関数であり,
次のような 2つの対象物の類似性を表す。
              ∀x,y ∈o, σ(x, y) ≥ 0        (正性) 
      ∀x∈o,∀y,z ∈o, σ(x, x) ≥ σ(y, z)  (極大性)
                  ∀x,y ∈o, σ(x, y) = σ(y, x)  (対称性)

類似性を表す関数σは正であり、自分と自分(同一)の類似性がMaxの値を示し、xとyの類似性とyとxの類似性は同じとなる。ここで類似性の逆となる非類似性を定義すると以下のようになる。

定義2(非類似性) 
一組の実体が与えられたとき、非類似性δ:o×o→Rは、
一組の実体から次のような実数に変換する関数である。
      ∀x, y ∈ o, δ(x, y) ≥ 0       (正性)
         ∀x ∈ o, δ(x, x) = 0       (極小性)
      ∀x, y ∈ o, δ(x, y) = δ(y, x) (対称性)

非類似関数は、自分と自分との類似性が極小になる以外の正性、対称性は類似関数のそれと同じになる。
ここで類似関数に「非対称(非)類似性」を導入したというアプローチ(Tverski 1977)もある。その場合、非対称尺度または前類似性という用語を使用する。非類似性よりも制約の多い概念として、距離や超計量法などがある。(参考論文)

またコンピューターの数学の基礎のパートで述べた「同値関係」は(1)a〜a、(2)a〜bならばb〜a、(3)(a〜bかつb〜c)ならばa〜cの3つの関係が成り立つものとして定義される。類似性の定義と比較すると、(3)の推移律まで成り立てば等価(同一のもの)、(2)の対称性(交換律)と(2)の反射律のみ成り立つものは類似と解釈することができる。

定義 3 (距離) 
距離(またはメトリック)δ : o × o → R は、定性不等式と三角不等式を満たす非類似関数である。
∀x,y∈o,     δ(x,y) = 0 if and only if x=y  (確定性)
∀x,y,z∈o, δ(x,y) + δ(y,z) ≥ δ(x, z)    (三角不等式)

x=yの時には、δは0となり、xとy、yとzの距離は、xとzの距離以上となる。

定義4(超距離空間) 
一つの実体が与えられたとき、超距離空間上では以下のような関数となる。
∀x,y,z∈o, δ(x,y) ≤ max(δ(x,z),δ(y,z))   (超距離空間不等式)

特に、異なる種類のエンティティの類似性を比較しなければならない場合は、測定値を正規化する必要がある。考慮される空間の大きさに比例して、各値を同じ尺度に減らすことが、正規化の一般的な方法となる。

定義 5 (正規化された(非)類似性) 
(非)類似性が実数の単位区間[0 1]に渡っている場合、
その類似性は正規化されていると言われる。
(非)類似度の正規化されたものをσ(δ)とする。

正規化された類似度σは、正規化された非類似度δ=1-σに対応し、その逆もまた然りである。以降は、ほとんどが正規化された測定値であり、2つのエンティティ間の非類似度関数が0と1の間の実数を返すと仮定する。

機械学習における類似度について

機械学習における類似度は、異なるデータ点やオブジェクトの間の類似性を測定するための概念であり、特徴ベクトルや属性の類似性に基づいて計算されることが多く、異なるタスクやアプリケーションで利用されている。以下に、様々なケースでの類似度の概念と一般的な計算方法について述べる。

ベクトルの類似度を計算するための指標

まず最も基本的なデータであるベクトルの類似度を計算するため指標について述べる。

  • コサイン類似度 (Cosine Similarity): コサイン類似度は2つのベクトル間のなす角のコサインを計算して類似度を評価するもので、ベクトルの方向に注目し、ベクトル同士が類似の方向を向いている場合に高い類似度を示すものとなる。値は[-1, 1]の範囲で、1に近いほど類似度が高いことを示す。
  • ユークリッド距離 (Euclidean Distance): ユークリッド距離は2つのベクトル間の点と点の距離を計算するもので、ベクトルの各要素間の差の2乗の和の平方根となる。距離が小さいほど類似度が高いと見なされる。
  • マンハッタン距離 (Manhattan Distance): マンハッタン距離は2つのベクトル間の各要素ごとの差の絶対値の和を計算するもので、ユークリッド距離と異なり、直線距離ではなく直交座標軸に沿った距離を測るものとなる。
  • ピアソン相関係数 (Pearson Correlation Coefficient): ピアソン相関係数は2つのベクトル間の線形関係の強さを評価するもので、正の相関や負の相関を計算することで、ベクトル間の関係性を理解できる。値は[-1, 1]の範囲となる。
  • ジャッカード指数 (Jaccard Index): ジャッカード指数は2つの集合の共通要素の割合を計算して類似度を評価するもので、ベクトルの要素を0と非0で表現した場合、ジャッカード指数は共通の非0要素の割合を示すものとなる。
グラフの類似度を計算する指標

次にグラフの類似度を評価するための指標について述べる。

  • グラフ編集距離 (Graph Edit Distance): 2つのグラフ間の最小編集操作(ノードやエッジの追加、削除、修正)の回数を測定する指標で、類似したグラフほど編集距離が小さくなる。
  • グラフカーネル (Graph Kernel): グラフを高次元の特徴空間に写像し、その空間での内積を計算することで、グラフの類似度を測定するもので、代表的なグラフカーネルには、ランプカーネルやウォークカーネルがある。
  • グラフスペクトル類似度 (Graph Spectrum Similarity): グラフのラプラシアン行列や隣接行列の固有値や固有ベクトルを比較することによって類似度を評価するもので、固有値が類似している場合、グラフは類似していると考えられる。
  • サブグラフ同型 (Subgraph Isomorphism): あるグラフが別のグラフの部分グラフとして埋め込まれるかどうかを調べることで、類似度を判断するもので、サブグラフ同型を求めるのは計算的に難しい場合もある。
  • グラフ特徴ベースの距離メトリクス: グラフの特徴を抽出し、それらの特徴を元に類似度を評価する手法で、例えば、ノードの次数分布、クラスタリング係数、平均最短経路長などの特徴が使われる。
  • ジャッカード指数 (Jaccard Index) やコサイン類似度 (Cosine Similarity): グラフのノードやエッジを集合とみなして、それらの集合の類似度を計算する方法で、ジャッカード指数は共通要素の割合を、コサイン類似度はベクトルのなす角度を使って計算するものとなる。
行列の類似度を計算する指標

行列の類似度を計算するためには、いくつかの指標や手法が存在する。行列は多次元データを表現するための重要な概念であり、行列間の類似度を評価することは、データの関連性や特徴の一致度を理解するために役立つ。以下に行列の類似度計算に関する指標について述べる。

  • コサイン類似度: 行列をベクトルとみなし、ベクトル間の角度の余弦を計算することで類似度を評価するもので、行列の各列や行がベクトルの要素として扱われる。主に特徴行列などを比較するために使用される。
  • ピアソン相関係数: 行列の各列をベクトルとして扱い、ベクトル間のピアソン相関係数を計算することで類似度を評価するもので、行列の列同士の線形的な関係性を評価する。
  • Jaccard係数: 行列を2値の要素を持つ集合として扱い、集合の共通要素数を全体の要素数で割ることで類似度を計算するもので、主に集合行列などを比較するために使用される。
  • ユークリッド距離やマンハッタン距離: 行列の各要素をベクトルとして扱い、ベクトル間の距離を計算することで類似度を評価するもので、主に数値行列などを比較するために使用される。
  • シンギュラリティー値分解 (SVD) を用いた類似度: 行列を低次元の特徴空間に写像するためのSVDを行い、特異値を比較することで類似度を評価するもので、主に次元削減や特異値の一致度を評価するために使用される。
  • KLダイバージェンス (Kullback-Leibler Divergence): 確率分布を表す行列の場合、KLダイバージェンスを計算して分布の差異を評価する。主に確率行列などを比較するために使用される。
  • マトリクスノルム: 行列のノルムを計算することで、行列の距離や類似度を評価する手法で、主に行列の大きさや形状に関する類似度を評価するために使用される。
確率分布間の類似度を計算するための指標
  • Kullback-Leibler ダイバージェンス(KL ダイバージェンス): KL ダイバージェンスは、一つの確率分布から別の確率分布への情報の不足を計測する指標となる。ただし、KL ダイバージェンスは非対称であり、類似度の性質を持たないことに注意が必要となる。
  • Jensen-Shannon ダイバージェンス: KL ダイバージェンスの非対称性を克服するために、二つの確率分布間の平均をとることで計算される指標となる。KL ダイバージェンスの対称版とも言え、Jensen-Shannon ダイバージェンスは類似度として解釈できる場合もある。
  • Earth Mover’s Distance(EMD): EMD は、二つの確率分布間の距離を計算するための指標となる。分布間の移動コストを最小化する問題として定義され、確率質量を一つの分布から他の分布へ運ぶ際の最小コストを示す。
  • Total Variation Distance(TV ダイバージェンス): TV ダイバージェンスは、二つの確率分布間の差異を計算する指標となる。分布間の差異を、各点での確率質量の絶対値の差の合計として表す。
クラスやインスタンスの類似度を計算するための指標

クラスやインスタンスの類似度を計算するためには、その対象に合った適切な指標や方法を選択する必要がある。以下にいくつか一般的なケースにおけるクラスやインスタンスの類似度計算の指標について述べる。

  • ユークリッド距離やマンハッタン距離: クラスやインスタンスをベクトルで表現し、ベクトル間の距離を計算する。数値データを比較する際に使用される。
  • コサイン類似度: クラスやインスタンスを特徴ベクトルとして扱い、ベクトル間の角度の余弦を計算する。主にベクトルの方向性を比較する際に使用される。
  • Jaccard係数: クラスやインスタンスを集合として扱い、集合の共通要素数を全体の要素数で割ることで類似度を計算する。主にカテゴリやタグの一致度を評価する際に使用される。
  • クラス間の階層的関係を考慮した指標: クラスが階層的に関連している場合、クラスの階層構造を考慮しつつ類似度を計算する方法がある。例えば、ResnikやLinの情報論的指標などがある。
  • 文字列の編集距離(Levenshtein距離やDamerau-Levenshtein距離): インスタンスがテキストや文字列で表現されている場合、文字列間の編集操作を計算して類似度を評価する。
  • グラフ類似度: インスタンスがグラフで表現されている場合、ノードやエッジの一致度を評価する手法がある。Graph Edit DistanceやSubgraph Isomorphismなどが使用される。
  • 深層学習を用いた埋め込み表現: クラスやインスタンスを埋め込み表現として扱うための深層学習モデルを使用して、類似度を計算することがある。
テキストの類似度を計算するための指標

テキストの類似度を計算するために、さまざまな指標やアルゴリズムが存在する。テキストの類似度は、テキスト同士の意味や内容の一致度を評価するための重要な概念となる。以下にいくつか一般的なテキスト類似度の指標やアルゴリズムについて述べる。

  • Cosine類似度: テキスト文書をベクトル空間モデルとして表現し、ベクトル間の角度の余弦を計算することで類似度を評価する。ベクトル空間モデルは、各単語を次元とするベクトルで文書を表現するもので、Cosine類似度は、ベクトル同士の内積を正規化したもので、0から1の間の値を取る。
  • Jaccard類似度: テキストを単語や文字の集合として扱い、集合の共通部分の大きさを全体の大きさで割ることで類似度を評価する。主に文書の重なり具合を評価するために使用される。
  • Levenshtein距離: 2つの文字列間の編集操作(挿入、削除、置換)が必要な最小の操作回数を計算する。この値が小さいほど、文字列同士の類似度が高いと考えられる。
  • TF-IDF (Term Frequency-Inverse Document Frequency): テキスト文書内での単語の出現頻度と、全文書集合におけるその単語の希少性を組み合わせて計算する手法となる。類似度の計算には、文書内の単語のTF-IDFベクトルを用いることがある。
  • Word2VecやBERTなどの単語埋め込み: 単語を多次元ベクトルとして表現する手法となる。これにより、単語間の意味的な関係を捉えることができ、文書の類似度を単語レベルから計算することが可能となる。BERTの詳細に関しては”BERTの概要とアルゴリズム及び実装例についてを参照のこと。
  • コサイン類似度を用いたWord2VecやBERTベクトルの類似度計算: 単語埋め込みを使って得られるベクトル間のコサイン類似度を計算し、文書全体の類似度を求めることができる。
  • シソーラスやオントロジーを用いた手法: 同義語や上位・下位関係などの情報を利用して、文書の意味的な類似度を評価する。
画像の類似度を計算するための指標について

画像の類似度を計算するためにも、さまざまな指標やアルゴリズムが存在する。画像の類似度評価は、画像の特徴や内容の一致度を評価するための重要なタスクとなる。以下にいくつか一般的な画像類似度の指標やアルゴリズムについて述べる。

  • ユークリッド距離やマンハッタン距離: 画像をピクセルごとの値のベクトルとして扱い、ベクトル間の距離を計算することで類似度を評価する。これらの距離はピクセル値の差を計算しているため、ピクセルの明るさや色による類似度を評価する。
  • コサイン類似度: 画像を特徴ベクトルとして扱い、ベクトル間の角度の余弦を計算することで類似度を評価する。主に画像の特徴の一致度を評価するために使用される。
  • ヒストグラム比較: 画像の色情報をヒストグラムとして表現し、ヒストグラムの類似性を評価する手法となる。色の分布を比較することで画像の類似度を評価する。
  • 構造的類似度(SSIM: Structural Similarity Index): 画像の輝度、コントラスト、構造などの要素を考慮して類似度を評価する。人間の視覚に近い評価を行うため、画像の品質を評価するのにも使われる。
  • 特徴抽出モデルを用いた類似度計算: ニューラルネットワークベースの特徴抽出モデル(例: VGG16、ResNet (Residual Network)について“で述べているResNet、”EfficientNetについて“で述べているEfficientNetなど)を用いて画像の特徴を抽出し、それを元に類似度を計算する。特に転移学習を用いることで高い性能を発揮することがある。
  • Siamese NetworkやTriplet Network: 2つまたは3つの画像の組み合わせを学習するネットワークを使用して、画像の類似度を評価する。主に教師あり学習アプローチとして使用される。
  • コンピュータビジョンタスク用の埋め込み空間: 例えば、顔認識のためのFaceNetや物体検出のためのYOLOなどのモデルが、画像の埋め込み表現を提供し、それを用いて類似度を計算することができる。
音声の類似度を計算するための指標について

音声の類似度評価は、音響的な特性や波形の形状の一致度を評価するための重要なタスクとなる。以下に一般的な音声類似度の指標やアプローチについて述べる。

  • Dynamic Time Warping (DTW): DTWは、2つの時系列データ(音声波形)間の最適なアラインメントを求めるための手法となる。音声の速さやタイミングの違いを考慮して類似度を評価する。
  • Mel-Frequency Cepstral Coefficients (MFCC): MFCCは音声を特徴ベクトルとして表現するための手法で、人間の聴覚に基づいて設計されている。音声のスペクトログラムをMFCCに変換し、それらの特徴ベクトル間の距離や類似度を計算することができる。
  • コサイン類似度: 音声を特徴ベクトル(例: MFCC)として表現し、ベクトル間の角度の余弦を計算することで類似度を評価する。主に音声の特徴の一致度を評価するために使用される。
  • Spectrogram Cross-Correlation: スペクトログラムを計算し、それらの相互相関を計算することで音声の類似度を評価する。スペクトログラムは周波数成分の情報を含んでおり、類似した音響パターンを捉えるのに役立つ。
  • Deep Learningを用いた埋め込み表現: 音声を扱うためのニューラルネットワークモデルを使用して、音声の埋め込み表現を抽出することができる。これらの埋め込み表現を用いて音声の類似度を計算することができる。
  • WaveNetやTransformerを用いたモデル: 音声生成モデルや音声認識モデルを使用して音声を特徴表現に変換し、それを用いて類似度を評価することができる。Transfoemerモデルに関してはTransformerモデルの概要とアルゴリズム及び実装例について“も参照のこと。
IoT等の時系列のセンサーデータの類似度を計算するための指標

IoTなどの時系列データの類似度評価は、データのパターンやトレンドの一致度を評価するための重要なタスクとなる。以下に一般的な時系列データの類似度の指標や手法について述べる。

  • ダイス係数やジャッカード係数: 時系列データを2つのセットとしてみなし、共通の要素の割合を計算する指標となる。センサーデータの一致度を評価するために使用される。
  • 動的時間歪み (DTW: Dynamic Time Warping): 時系列データ間の最適なアラインメントを求める手法となる。センサーデータのサンプル間の時間的なずれを考慮して類似度を評価する。
  • 相互相関係数: センサーデータの相互相関を計算して類似度を評価する手法となる。データ間の相関関係を調べることで類似度を評価する。
  • ウェーブレット変換: ウェーブレット変換を用いて時系列データを周波数領域で分解し、周波数成分ごとの類似度を評価する。異なる周波数帯域での一致度を評価することができる。
  • 特徴ベースのアプローチ: 時系列データから特徴を抽出し、これらの特徴を用いて類似度を計算するアプローチとなる。例えば、統計的な特徴やフーリエ変換の特徴などが考えられる。
  • 畳み込みニューラルネットワーク (CNN) やリカレントニューラルネットワーク (RNN): ニューラルネットワークを使用して時系列データの特徴表現を学習し、それを用いて類似度を評価することができる。CNNの概要とアルゴリズム及び実装例について“で述べているCNNは主に局所的な特徴の抽出に、RNNの概要とアルゴリズム及び実装例について“で述べているRNNは系列データのパターンを捉えるのに適している。
類似度を計算する為に用いられるライブラリやプラットフォームについて

類似度を計算するために使用されるライブラリやプラットフォームは、データの種類や応用によって異なる。以下にいくつか一般的なライブラリやプラットフォームについて述べる。

  • Pythonのライブラリ:
    • NumPy: 数値計算のためのライブラリで、行列の操作やベクトル演算を効率的に行える。
    • SciPy: 科学技術計算のための拡張ライブラリで、さまざまな類似度計算アルゴリズムが実装されている。
    • scikit-learn: 機械学習ライブラリで、クラスタリングや次元削減などのタスクに関連する類似度計算が含まれている。
    • pandas: データ解析のためのライブラリで、データフレームとして行列を扱うことができる。
  • MATLAB: MATLABは科学技術計算に広く使用されるプラットフォームで、行列演算や信号処理に関するライブラリが充実している。
  • R言語: R言語は統計解析やデータマイニングに使用される言語で、類似度計算に関するパッケージが提供されている。
  • ディープラーニングフレームワーク: ディープラーニングのフレームワーク(TensorFlow、PyTorchなど)は、埋め込み表現や特徴抽出を通じて類似度を計算するためのツールとして利用される。
  • 検索エンジンやデータベース: ElasticsearchやSolrなどの検索エンジン、またはデータベースシステムにも類似度計算の機能が組み込まれている場合がある。
  • 専用のライブラリやツール: 特定の類似度計算に特化したライブラリやツールも存在します。例えば、音声認識のためのKaldi、画像類似度のためのOpenCVなどがある。
  • オンラインプラットフォーム: オンラインで利用できるプラットフォームもあります。例えば、Google CloudやMicrosoft Azureの類似度計算APIなどがある。
類似度計算の適用事例について

類似度計算はさまざまな分野で幅広く応用されている。以下に適用事例のいくつかについて述べる。

  • 情報検索と推薦システム: 検索エンジンや推薦システムでは、ユーザーのクエリや過去の行動と類似するコンテンツやアイテムを見つけるために類似度計算が使用されている。
  • 画像認識とコンピュータビジョン: 画像の特徴量を抽出し、それを用いて画像の類似度を計算することで、画像検索や物体認識などのタスクに利用される。
  • 音声認識と音楽分析: 音声や音楽の波形データを解析し、類似する音響パターンや楽曲を見つけるために類似度計算が使用され、音楽の類似楽曲の提案や音声検索に利用される。
  • 自然言語処理: テキストデータの類似度計算は、文章の類似性を評価したり、文書のクラスタリング、意味の解析などに使用される。
  • クラスタリングと分類: データの特徴ベクトルを用いて、類似したデータをグループ化するクラスタリングや分類アルゴリズムで類似度計算が利用される。
  • 時系列データ解析: センサーデータや金融データなどの時系列データの類似度計算は、トレンドやパターンの一致度を評価するために使用される。
  • バイオインフォマティクス: DNA、RNA、タンパク質のシーケンスなどのバイオデータの類似度計算は、遺伝子解析や生物学的な関連性の評価に利用される。
  • ネットワーク解析: グラフやネットワークのノードやエッジの類似度計算は、ネットワーク構造の類似性を評価するために使用される。
  • 異常検知: 正常データのパターンに基づいてデータの異常を検出するため、データの類似度計算が利用される。
参考情報と参考図書

データマッチングに関しては”オントロジーマッチング技術について“等にも述べている。そらも参照のこと。また、具体的な実装に関しては”機械学習技術“や”人工知能技術“を参照のこと。

参考図書としては”Similarity-Based Pattern Recognition

Machine Learning and Data Mining in Pattern Recognition

Similarity-Based Pattern Analysis and Recognition

Ontology Matching“等がある。

コメント

  1. […] コアリング: マルチモーダル特徴ベクトル間の類似度を計算するために、”機械学習における類似度について“で述べている様々な類似度の中から適切な類似度尺度(コサイン類似度 […]

  2. […] 機械学習における類似度について […]

  3. […] 機械学習における類似度について […]

  4. […] 機械学習における類似度について […]

  5. […] 機械学習における類似度について […]

  6. […] 機械学習における類似度について […]

  7. […] 機械学習における類似度について […]

  8. […] 機械学習における類似度について […]

  9. […] 機械学習における類似度について […]

  10. […] データとオントロジーのマッピングに関しては”機械学習における類似度について“に述べているような機械学習によるアプローチが重要となる。また、リアルタイムデータのハ […]

  11. […] ng”と”queen”の関連性や”dog”と”cat”の類似性が学習可能となる。機械学習における類似性に関しては”機械学習における類似度について“も参照のこと。 […]

  12. […] 機械学習における類似度について […]

  13. […] これはプログラミングで言うと、if-thenの分岐であり、”ルールベースと知識ベースとエキスパートシステムと関係データ“で述べているエキスパートシステムのようなものとなる。またもう少し進んだものだと、”機械学習における類似度について“に述べているような機械学習を用いたロバスト性のある条件の一致を用いたアルゴリズムとなる。 […]

  14. […] 判定する。一般的には、ユークリッド距離やコサイン類似度などを使用して、モデルとテキストの類似性を計算します。詳細は”機械学習における類似度について“を参照のこと。 […]

  15. […] このようにして作成したベクトルの類似度を”機械学習における類似度について“で述べている様々なアルゴリズムで比較することで判定を行う。 […]

  16. […] 非構造データをベクトル化して、ベクトル間の類似度を”機械学習における類似度について“に述べているような各種手法で計算し、非構造データ間の類似度を推定するエンべデ […]

タイトルとURLをコピーしました