最も近い一致の埋め込みを検索する方法

Zuimo Jini Yi Zhino Maime Yumiwo Jian Suosuru Fang Fa



最も近い一致を見つけるために埋め込みを検索することは、互いに最も近い意味を持つ埋め込みを見つけることを意味します。埋め込みは、特定のタスクの入力として言語モデルに供給される文のベクトル表現です。ここでは、類似の埋め込みを見つけるために使用できる方法とテクニックについて説明します。

構文

類似性の点での違いに基づいて、エンベディング間の違いを見つけるために利用できる技術やツールが多数存在します。以下は、埋め込みの類似性を見つけるために使用するメソッドとそれに関連する構文です。







前述の点から、埋め込みの類似性一致を見つけるために使用できるモデルがわかります。ここで、これらの各モデルの利用方法を学び、これらのモデルのそれぞれに個別の例を実装します。



例 1: 単語の埋め込みによる最も近い一致の埋め込み

類似性一致の単語埋め込みを実装する前に、単語埋め込みについて知っておく必要があります。私たちのシステムは入力を数値形式でしか理解できないため、単語埋め込みはテキストをベクトル形式 (数値) に変換するプロセスです。



このタスクを実行するには、ワンホット エンコーディングなど、他にもいくつかの方法がありますが、ここでは単語埋め込みを利用します。このようにして、埋め込みはニューラル ネットワークのモデル (word2vec や Glove など) によってテキストから学習されます。単語は高次元のベクトル空間にマッピングされます。文脈が似ている単語はすべて、最も近い点にマッピングされます。このようにして、埋め込みにより、テキスト内のさまざまな単語間の関係や類似点を捉えることができます。





文への単語埋め込みを作成してみましょう。単語埋め込みを作成するために、Python は「gensim」フレームワークを提供します。 Gensim は、埋め込みの作成に役立つ「word2vec」モデルの使用を可能にするライブラリ パッケージです。埋め込みを実装するには、まず Python コンパイラーに gensim をインストールします。次に、gensim から「word2vec」モデルをインポートします。

「word2vec」モデルは、2 つの入力引数のみを使用するアルゴリズムの一種で、最初の引数には埋め込みを作成するテキストまたは文が必要で、2 番目の引数には、最小回数を指定する最小回数が指定されます。単語は出現するか見られる必要があります。



「word2vec」モデルをインポートしたら、「テキスト」を指定します。テキストを指定したら、この「word2vec」モデルをテキストとともに渡し、最小カウントを「1」に設定することでトレーニングします。ここで、このトレーニング済みの「word2vec.wv.most_similar(‘consume’)」モデルを呼び出し、最も近い埋め込みを確認したい単語 (この例では「consume」) をフィードします。埋め込み結果を確認するために、モデルからの出力を出力します。

から 国家として モデル 輸入 Word2Vec
文章 = [ [ 'うさぎ' 'もっている' '歯'
モデル = Word2Vec ( 文章 min_count = 1 )
類似の埋め込み = モデル。 wv 最も似ている ( 'うさぎ' )
印刷する ( 類似の埋め込み )

この例では、「word2vec」モデルを使用してテキストの単語埋め込みを作成し、コンテキストの観点から類似性をチェックします。これは、類似の埋め込みをチェックするコードの出力である、以前に添付されたスニペットで確認できます。 「消費する」という言葉について。

例 2: BERT モデルによる最近接検索の埋め込み

単語間の文脈上の関係を理解し​​て学習できるため、テキスト間の類似性を計算するために利用できる、事前にトレーニングされた自然言語処理モデルが存在します。 BERT は、「sentence_transformers」からの事前トレーニング済み言語モデルの 1 つであり、テキスト間の類似性を学習できます。テキスト間の類似性を見つけるには、まずこのモデルをテキストまたは文章に合わせて微調整する必要があります。

これが完了すると、このモデルを使用して埋め込みを学習できるようになります。次に、「コサイン類似度」関数を使用してテキスト間の類似度を計算します。この例は、オンライン Python プラットフォーム「google colab」上で実装します。モデルを微調整するには、(BERT) モデルをロードします。そのために、まず「SentenceTransformers」をインストールしてインポートします。次に、SentenceTransformer を使用して、事前トレーニングされたモデルからモデルを読み込みます。モデルをロードするには、SentenceTransformer と BERT モデルをまとめて「$SentenceTransformer('bert-base-nli-mean-tokens')」として呼び出します。ここで、入力パラメーターに BERT の事前トレーニング済みモデルの名前を指定し、次に、これを「BERTmodel」変数に保存します。

このモデルの読み込みが完了したら、それぞれ 1 つの文で構成される 4 つのテキストを指定して、テキスト間の類似性を確認します。たとえばテキストを指定したら、このテキストの埋め込みを作成します。 「エンコード」機能を使用して、各テキストの埋め込みを個別に作成します。

BERT モデルのプレフィックスを付けたエンコード関数を「BERTmodel.encoding()」と呼びます。次に、「テキスト」と「512」に固定した「最大長」をこの関数のパラメータに渡します。各テキストに対してこのエンコード関数を呼び出し、テキストを埋め込みに変換します。

ここで、これらの各埋め込みを利用し、それらをコサイン類似度関数に代入して、これらの埋め込み間の類似性を見つけます。コサイン類似度関数は、テキスト/ドキュメントの分類とクラスタリングのためのすべての自然言語処理タスクで広く使用されています。

これらの埋め込み間の類似性を見つけるには、コサイン類似度関数を使用し、埋め込まれた文の値をインデックス「0」に、他の埋め込み文の値をインデックス「1 ~ 3」に置き換えて、文 0 と他の 3 の類似性を確認します。文章。コサイン類似度関数の出力値の範囲は -1 から 1 です。ここで、1 は 2 つの埋め込みが類似していることを示し、-1 は 2 つの埋め込みが類似していないことを示します。事前学習済み BERT モデルを使用した例で作成した 4 つの文埋め込みを使用してコサイン類似度関数を実装する方法を示すコード スニペットを添付しました。

!pip インストール文章_transformers
文 = [
「4年前には、ボトルは満杯でした。」、
「犬は檻から逃げ出して、友達が行くところを通りで見る夢を見た。」、
「その人は何ヶ月もクラゲと遊んでいた。」、
「彼はタンスでカタツムリを見つけました。」]
senden_transformers から SentenceTransformer をインポート
Bertmodel = SentenceTransformer('bert-base-nli-mean-tokens')
文_埋め込み = Bertmodel.encode(文)
文の埋め込み.形状
sklearn.metrics.pairwise インポートから cosine_similarity
# 文 0 のコサイン類似度を計算します:
cosine_similarity(
[sentence_embeddings[0]],
文_埋め込み[1:])

出力の配列には、「文 0」と他の 3 つの文の類似度の値が表示されます。 1、2、3。

結論

埋め込み間の類似性を見つける方法について説明しました。 「word2vec」gensim モデルと事前トレーニングされた BERT モデルを使用して、埋め込みの最も近い一致を検索する 2 つの異なる例を示しました。