1

Tensorflow ハブからGoogle のユニバーサル センテンス エンコーダーを使用して、セマンティック類似性検索を構築しようとしています。これは、私の知る限り、小文字のトークン化された文字列を取り、512 埋め込みベクトルを出力します。

主な問題

テーブルの初期化プロセス以外はすべて 1 秒未満で実行されます。

session.run([tf.global_variables_initializer()) # performed less than a second
session.run(tf.tables_initializer()) # takes 15+ seconds

上記の行には約 20 秒かかります。テーブルの初期化プロセスを高速化する方法はありますか (後で実際に使用するために、ユーザー入力を埋め込みベクトルにすばやく変換します)。


コードは非常に単純です。

import tensorflow as tf
import tensorflow_hub as hub
import pickle # just for saving vectorized data

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'  # avoid any logs but error

embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")

def search_converted(query_text, file_path="file_path"):
    with tf.Session() as session:
        session.run(tf.global_variables_initializer()) # initialize global variables
        session.run(tf.tables_initializer())  # initialize tables
        message_embeddings = session.run(embed([query_text])) # turn query text into vector embeddings
    similarities = []  # array of similarities (float values)
    with open(file_path, "rb") as fl:  # open pickle containing array that contains vector embeddings and their readable form
        pckl = pickle.load(fl)
        for col in pckl[0]: # vector embeddings
            similarities.append(1 - acos(np.inner(message_embeddings[0], col) / (
                        np.linalg.norm(message_embeddings[0]) * np.linalg.norm(col))) / pi)   # append angular distance similarities to array
    return (pckl[1][similarities.index(max(similarities))], max(similarities))   # return the most similar string, with the similarity precentage

上記のコードはテスト用です (実際には最適ではないことはわかっています)。配列を含む pickle ファイルを開き、それらの配列から最も類似した文字列を選択します。


簡単に言えば、このライブラリを実際に使用できるように、テーブルの初期化を高速化するにはどうすればよいですか?

4

0 に答える 0