可以在Tensorflow中加速表初始化吗?

时间:2018-09-16 14:17:31

标签: python windows tensorflow tensorflow-hub

我正在尝试使用Tensorflow集线器中的Google's universal sentence encoder构建语义相似性搜索,据我所知,它采用小写的标记化字符串并输出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

上面的代码仅用于测试(我知道实际上并不是最佳选择)。它会打开包含数组的腌制文件,并从这些数组中选择最相似的字符串。


很快,我该​​如何加快表初始化的速度,以便在实践中使用该库?

0 个答案:

没有答案