Можно ли ускорить инициализацию таблицы в Tensorflow?
Я пытаюсь построить поиск семантического сходства с помощью универсального кодировщика предложений Google из концентратора Tensorflow, который, насколько мне известно, берет строковую токенизированную строку и выдает 512 вектор встраивания.
Главная проблема
Все, кроме процесса инициализации таблицы, выполняется за секунду:
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
Код выше только для тестирования (я знаю, что это не оптимально на практике). Он открывает маринованный файл, содержащий массивы, и из этих массивов выбирает наиболее похожую строку.
Вкратце, как я могу ускорить инициализацию таблицы, чтобы на практике использовать эту библиотеку?