Можно ли ускорить инициализацию таблицы в Tensorflow? - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь построить поиск семантического сходства, используя Универсальный кодировщик предложений 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

Код выше только для тестирования (я знаю, что он не оптимален впрактика).Он открывает маринованный файл, содержащий массивы, и из этих массивов выбирает наиболее похожую строку.


Вкратце, как я могу ускорить инициализацию таблицы, чтобы на практике использовать эту библиотеку?

...