![見出し画像](https://assets.st-note.com/production/uploads/images/151474540/rectangle_large_type_2_194b9d3a8cf38f9480bd61dbd6cf50cf.png?width=1200)
AI魔境探索の続き
前回の続きで素人目線のレポートになります。
今回も難しいので興味ない方は見なくていいですw
前回の記事はこちら↓
前回の記事の中で『さらに根底に深くアプローチできる形式、方法はありますか?』の回答の中に以下の内容があり、気になったのでこちらも少し調べてみました。
意味のクラスタリング(Semantic Clustering)
トークンをその意味に基づいてクラスタリングし、同義語や類似表現をグループ化します。これにより、意味の揺らぎに対してモデルが強くなり、異なる表現を同じ意味として扱うことができます。
方法: 事前に定義された同義語セットや意味クラスタに基づいてトークンを分類し、それを使ってモデルの学習や推論を行います。
初見ではわかりにくい表現なので実際にやってみました。
アプローチ「意味のクラスタリング(Semantic Clustering)」について説明し、先ほどのプロンプトに適用します。
意味のクラスタリング(Semantic Clustering)
意味のクラスタリングとは、トークンやフレーズを意味に基づいてグループ化し、類似した意味を持つ単語やフレーズをまとめて扱う方法です。これにより、モデルは異なる表現でも同じ意味を持つものを同等に扱うことができ、テキスト理解の精度が向上します。
アプローチ同義語や類似表現のクラスタリング: 同じ意味や関連する意味を持つ単語をグループ化します。たとえば、「dynamic」「energetic」「fast-paced」などの単語が同じクラスタに属するようにします。
クラスタリングされた意味グループの適用: 各トークンがどのクラスタに属するかを定義し、意味の関連性を明確にします。
適用例
以下のプロンプトに基づき、意味のクラスタリングを行います。
{
"clusters": [
{
"cluster_name": "speed",
"tokens": ["dynamic", "intense", "speed", "motion", "power", "running", "energetic", "fast-paced"]
},
{
"cluster_name": "visuals",
"tokens": ["anime", "scene", "close-up", "character", "actions", "feet", "flames", "background"]
},
{
"cluster_name": "effects",
"tokens": ["fiery", "glowing", "orange", "trail", "minimalistic", "emphasizing", "captures"]
}
]
}
クラスタリングの効果同義語の統一: 「dynamic」「intense」「speed」「motion」「power」「running」などの言葉がすべて「speed」クラスタに属しているため、これらのトークンが同じ意味で使用されることが強調されます。
意味の明確化: クラスタリングを通じて、テキスト内の概念が明確にグループ化され、モデルはこれらの関連性をより深く理解できるようになります。
これにより、テキストの意味の一貫性が強化され、モデルがテキストデータを処理する際により深いレベルで理解を進められるようになります。
いかがでしょうか?
書いている内容はグループ分けして、それぞれのワードが違うものでも同じ意味合いの概念として処理すると書いているように私は思いました。
そのことを踏まえてクラスタリングされた意味に基づくプロンプトだと以下のようになります。
[
{"token": "A", "cluster": null},
{"token": "dynamic", "cluster": "speed"},
{"token": "anime", "cluster": "visuals"},
{"token": "scene", "cluster": "visuals"},
{"token": "focusing", "cluster": null},
{"token": "on", "cluster": null},
{"token": "a", "cluster": null},
{"token": "close-up", "cluster": "visuals"},
{"token": "of", "cluster": null},
{"token": "a", "cluster": null},
{"token": "character", "cluster": "visuals"},
{"token": "'s", "cluster": null},
{"token": "feet", "cluster": "visuals"},
{"token": "running", "cluster": "speed"},
{"token": "with", "cluster": null},
{"token": "intense", "cluster": "speed"},
{"token": "speed", "cluster": "speed"},
{"token": ".", "cluster": null},
{"token": "The", "cluster": null},
{"token": "feet", "cluster": "visuals"},
{"token": "are", "cluster": null},
{"token": "surrounded", "cluster": null},
{"token": "by", "cluster": null},
{"token": "fiery", "cluster": "effects"},
{"token": ",", "cluster": null},
{"token": "glowing", "cluster": "effects"},
{"token": "orange", "cluster": "effects"},
{"token": "flames", "cluster": "visuals"},
{"token": "that", "cluster": null},
{"token": "trail", "cluster": "effects"},
{"token": "behind", "cluster": null},
{"token": "with", "cluster": null},
{"token": "each", "cluster": null},
{"token": "step", "cluster": null},
{"token": ",", "cluster": null},
{"token": "creating", "cluster": null},
{"token": "a", "cluster": null},
{"token": "sense", "cluster": null},
{"token": "of", "cluster": null},
{"token": "extreme", "cluster": null},
{"token": "motion", "cluster": "speed"},
{"token": "and", "cluster": null},
{"token": "power", "cluster": "speed"},
{"token": ".", "cluster": null},
{"token": "The", "cluster": null},
{"token": "background", "cluster": "visuals"},
{"token": "is", "cluster": null},
{"token": "minimalistic", "cluster": "effects"},
{"token": ",", "cluster": null},
{"token": "emphasizing", "cluster": "effects"},
{"token": "the", "cluster": null},
{"token": "movement", "cluster": null},
{"token": "and", "cluster": null},
{"token": "energy", "cluster": "speed"},
{"token": "of", "cluster": null},
{"token": "the", "cluster": null},
{"token": "running", "cluster": "speed"},
{"token": "feet", "cluster": "visuals"},
{"token": ".", "cluster": null},
{"token": "The", "cluster": null},
{"token": "scene", "cluster": "visuals"},
{"token": "captures", "cluster": "effects"},
{"token": "the", "cluster": null},
{"token": "intensity", "cluster": "speed"},
{"token": "and", "cluster": null},
{"token": "speed", "cluster": "speed"},
{"token": "of", "cluster": null},
{"token": "the", "cluster": null},
{"token": "character", "cluster": "visuals"},
{"token": "'s", "cluster": null},
{"token": "actions", "cluster": "visuals"},
{"token": ".", "cluster": null}
]
このようにクラスタ(グループ)分けされているのがわかります。
冠詞などは分類する必要がないのかnullになっています。
これはAI側での処理なので私たち使用者の方では考える必要はないことだとは思います。
さらに別で掘っていると関連性があるようなものが出てきたのでレポートしておこうと思います。
エンベディングの生成
概要: トークン化されたテキストは、埋め込み層を通じてベクトル化されます。
掘り下げた説明: エンベディング層は、トークンを固定次元の連続ベクトルに変換します。これにより、テキストデータは数値的に表現され、モデルが処理可能な形式になります。このベクトルは、意味的な距離を保持しており、似た意味を持つ単語は類似したベクトルを持ちます。
例:「mountain」という単語のエンベディングベクトルは、「hill」や「peak」といった単語のベクトルと近いものになります。これにより、モデルは類似した概念を近接したベクトル空間で捉えることができます。
これはテキストトークンを数値化してモデルに送る工程の内容のようです。
実際やってもらうと以下のように変換してくれました、難しいですが概要からの解説も入れて紹介します。
エンベディング層における「数値化」とは、テキストデータ(文字列としての単語やフレーズ)を数値ベクトルに変換するプロセスです。このプロセスにより、テキストが機械学習モデル、特にディープラーニングモデルで処理可能な形式に変換されます。
エンベディングの数値化の詳細
1. テキストからベクトルへの変換:概要: テキストデータ(例えば、「mountain」)は、最初にトークン化され、次にエンベディング層を通じて固定長の数値ベクトルに変換されます。これにより、文字列が数値として表現され、モデルで扱えるようになります。
固定次元ベクトル: 各単語やトークンは、特定の次元数を持つベクトルに変換されます。例えば、300次元や768次元のベクトルが一般的です。これらのベクトルは、数値が並んだリストのようなもので、例えば、300次元ベクトルなら300個の数値が一つのベクトルとして並んでいます。
2. 数値化のプロセス:埋め込み行列(Embedding Matrix): エンベディングの背後には、通常、事前学習された埋め込み行列が存在します。この行列は、巨大な語彙リストとその対応するベクトルを含んでいます。例えば、語彙リストには数万から数十万の単語があり、それぞれに固定次元のベクトルが割り当てられています。
検索と変換: トークン化された単語が埋め込み行列の中で見つけられ、対応する数値ベクトルが取り出されます。このベクトルが、単語のエンベディングベクトルです。
3. ベクトル空間における意味的距離:意味的な関係: エンベディングベクトルは、ベクトル空間における位置として表現されます。この空間では、意味的に関連のある単語が近くに配置されるように学習されています。例えば、「mountain」、「hill」、「peak」など、山に関連する単語は近接したベクトルとして配置されます。
コサイン類似度: これらのベクトル同士の「類似度」は、コサイン類似度と呼ばれる指標で計算されます。コサイン類似度は、2つのベクトルのなす角度のコサインを測定し、値が1に近いほど、ベクトルが類似していることを意味します。
エンベディングの例
単語「mountain」のエンベディングベクトル:
假に「mountain」という単語が300次元のベクトルで表されているとすると、そのベクトルは次のような数値のリストになります:
[0.12, -0.03, 0.45, ..., -0.10, 0.33, 0.87]
このベクトルは、モデルが「mountain」という単語の意味を学習し、他の関連単語と比較できるようにするための数値表現です。
類似単語のベクトル:「hill」のベクトルは「mountain」のベクトルと非常に近い数値を持つでしょう。これにより、モデルはこれらの単語が似た概念を表していると認識します。例えば、「hill」のベクトルが次のようであれば:
[0.11, -0.02, 0.44, ..., -0.11, 0.34, 0.86]
コサイン類似度を計算すると、これら2つのベクトルは非常に高い類似度を持つことになります。
エンベディングの応用
1. 類似性検索: エンベディングベクトルを使うと、テキスト間の類似性を数値的に比較できます。これにより、意味的に類似した文章や単語を検索することが可能です。
2. クラスタリングと分類: エンベディングベクトルは、テキストのクラスタリングや分類タスクにも応用できます。例えば、ニュース記事をテーマごとに分類する際、エンベディングベクトルを使用して意味的に関連する記事をまとめることができます。
3. データの視覚化: 高次元のエンベディングベクトルを2次元や3次元に縮約して視覚化することで、単語や文章の意味的な関係を直感的に理解することができます。t-SNEやUMAPといった手法が使われます。
結論
エンベディング層は、テキストデータを数値ベクトルに変換し、機械学習モデルで処理可能にする重要な役割を果たしています。このベクトル化により、単語やフレーズの意味的な関係をモデルが学習し、さまざまな自然言語処理タスクで応用することが可能になります。数値化されたベクトルは、モデルが言語の微妙なニュアンスやコンテキストを理解し、処理するのに不可欠な要素です。
いかがでしょうか?
非常にややこしい感じですw
コンピューターはプログラムで処理している以上は数値化して処理するので、突き詰めると0と1の配列になっていくと思います。(素人考えです)
試しにプロンプトをベクトル変換して数値化したものでGPT で画像生成できるかやってみましたができませんでした。
生成過程のフローの途中からアプローチしても実行することは難しそうです(する必要もないんですが、興味本位でやってみました)
次に下記のように思ったのでGPT に聞いてみました
『とういうことはエンべディングベクトルが近いのものが出力される可能性もあるということですか?』
以下回答になります
はい、エンベディングベクトルが近いものが出力される可能性が高いです。具体的には、モデルが何らかの入力(たとえば、テキストプロンプトや質問)を受け取ったときに、それに対して意味的に類似した情報を含むエンベディングベクトルが近いものを出力する傾向があります。
どうしてエンベディングベクトルが近いものが出力されるのか?
エンベディングベクトルは、ベクトル空間で単語やフレーズがどれだけ近いか、つまりどれだけ意味的に類似しているかを示すものです。以下のような状況で、エンベディングベクトルが近いものが出力されることがあります:類似した単語の選択:
たとえば、入力テキストに「mountain」という単語が含まれていた場合、モデルが出力で「hill」や「peak」といった、エンベディングベクトルが近い類似単語を含む文を生成する可能性があります。
コンテキストに応じた予測:
自然言語処理モデルは、文脈に応じて次に出力する単語を予測します。このとき、文脈に最も適した単語のエンベディングベクトルが、既に生成された単語のエンベディングベクトルに近いものであることがよくあります。
たとえば、「The cat is on the」まで入力があった場合、次に出力される可能性が高いのは「mat」や「bed」といった単語です。これらの単語は、「on the」のコンテキストにおいて、エンベディング空間で近くに配置されています。
画像生成における影響:
テキストプロンプトから画像を生成する際も、エンベディングベクトルが近い概念やオブジェクトが画像に含まれる可能性があります。たとえば、「car」というプロンプトに対して、車の隣にバイクが生成されることがあるかもしれません。これは、「car」と「bike」が交通手段としてエンベディング空間で近接しているためです。
出力される可能性がある例同義語や関連語: プロンプト「The dog is barking」に対して、「The canine is barking」という出力が生成される可能性があります。これは、「dog」と「canine」がエンベディング空間で非常に近いためです。
類似したコンセプト: プロンプト「A beautiful garden with flowers and trees」に対して、「A beautiful park with plants and trees」という出力が生成される可能性があります。これは、「garden」と「park」が似た環境を表すため、エンベディングベクトルが近いからです。
エンベディングの応用と限界
応用:検索システム: ユーザーのクエリに対して、意味的に類似したドキュメントを検索するシステムで利用されます。たとえば、「climbing equipment」というクエリに対して、「mountaineering gear」などの関連性の高いドキュメントが返される可能性があります。
生成モデル: 自然言語生成(NLG)や機械翻訳(MT)では、次に生成する単語やフレーズが、現在のコンテキストに最も適合するものを選ぶためにエンベディングベクトルを使用します。
限界:曖昧さ: エンベディングベクトルが近いものが必ずしも意味的に適切であるとは限らない場合があります。特に多義語(例: 「bank」は「川岸」も「銀行」も意味します)では、文脈によって全く異なる意味を持つ単語が選ばれることがあります。
オーバーフィッティングのリスク: 特定のエンベディング空間において、過剰に特定の意味に引き寄せられることがあり、本来のコンテキストからずれる可能性があります。
まとめ
エンベディングベクトルが近いものは、意味的に類似しているとモデルが認識しており、その結果として出力される可能性が高くなります。これは、自然言語処理モデルがテキストの文脈を理解し、適切な応答を生成するための基本的なメカニズムの一部です。ただし、このメカニズムが常に正しい結果をもたらすわけではなく、コンテキストやタスクによって適切に管理する必要があります。
以上になります。ベクトルが近いと意図したものと違うものが出る可能性があるということになります、画像生成した時に入れたプロンプトと違うものが出てくることがありますがベクトルの類似性によるものだという考えが当てはまることがわかりました。(※GPTの説明なのでどこまで正しいかは私には高度なことなのでわかりません)
殴り書き長文で理解しにくい内容になってしまいましたが、
また一つAIの挙動、原理を理解するのには役に立ったのではないかと思います。
また何かあれば特段役には立たないレポートしますw
気づいたことや、試したことを更新していきますので、お時間あれば覗いてコメントなど書いて頂くと嬉しいです〜
Xでイラストも上げてるので見ていって下さい♪