当前位置: 首页 > 知识库问答 >
问题:

将通用句子编码器保存到Tflite或将其提供给tenorflow api

哈涵容
2023-03-14

我有这个代码,用于使用预先构建的通用句子编码器查找句子相似性。它接受一个. txt文件作为输入。执行余弦相似性,然后接受用户的输出,根据用户输入的查询找到最相似的句子。这是代码:

# tensroflow hub module for Universal sentence Encoder
module_url = "https://tfhub.dev/google/universal-sentence-encoder-large/3" #@param ["https://tfhub.dev/google/universal-sentence-encoder/2", "https://tfhub.dev/google/universal-sentence-encoder-large/3"]

def get_features(texts):
    if type(texts) is str:
        texts = [texts]
    with tf.Session() as sess:
        sess.run([tf.global_variables_initializer(), tf.tables_initializer()])
        return sess.run(embed(texts))
    def remove_stopwords(stop_words, tokens):
    res = []
    for token in tokens:
        if not token in stop_words:
            res.append(token)
    return res

def process_text(text):
    text = text.encode('ascii', errors='ignore').decode()
    text = text.lower()
    text = re.sub(r'http\S+', ' ', text)
    text = re.sub(r'#+', ' ', text )
    text = re.sub(r'@[A-Za-z0-9]+', ' ', text)
    text = re.sub(r"([A-Za-z]+)'s", r"\1 is", text)
    #text = re.sub(r"\'s", " ", text)
    text = re.sub(r"\'ve", " have ", text)
    text = re.sub(r"won't", "will not ", text)
    text = re.sub(r"isn't", "is not ", text)
    text = re.sub(r"can't", "can not ", text)
    text = re.sub(r"n't", " not ", text)
    text = re.sub(r"i'm", "i am ", text)
    text = re.sub(r"\'re", " are ", text)
    text = re.sub(r"\'d", " would ", text)
    text = re.sub(r"\'ll", " will ", text)
    text = re.sub('\W', ' ', text)
    text = re.sub(r'\d+', ' ', text)
    text = re.sub('\s+', ' ', text)
    text = text.strip()
    return text

def lemmatize(tokens):
    lemmatizer = nltk.stem.WordNetLemmatizer()
    lemma_list = []
    for token in tokens:
        lemma = lemmatizer.lemmatize(token, 'v')
        if lemma == token:
            lemma = lemmatizer.lemmatize(token)
        lemma_list.append(lemma)
    # return [ lemmatizer.lemmatize(token, 'v') for token in tokens ]
    return lemma_list


def process_all(text):
    text = process_text(text)
    return ' '.join(remove_stopwords(stop_words, text.split()))

process_text("Hello! Who are you?")

with open('/content/sample_data/training.txt') as f:
...     text = [i.strip() for i in f]
...     

data_processed = list(map(process_text, text))
len(data_processed)

BASE_VECTORS = get_features(text)

def cosine_similarity(v1, v2):
    mag1 = np.linalg.norm(v1)
    mag2 = np.linalg.norm(v2)
    if (not mag1) or (not mag2):
        return 0
    return np.dot(v1, v2) / (mag1 * mag2)

def test_similiarity(text1, text2):
    vec1 = get_features(text1)[0]
    vec2 = get_features(text2)[0]
    print(vec1.shape)
    return cosine_similarity(vec1, vec2)

def semantic_search(query, data, vectors):
    query = process_text(query)
    print("Extracting features...")
    query_vec = get_features(query)[0].ravel()
    res = []
    for i, d in enumerate(data):
        qvec = vectors[i].ravel()
        sim = cosine_similarity(query_vec, qvec)
        res.append((sim, d[:100], i))
    return sorted(res, key=lambda x : x[0], reverse=True)

semantic_search("da vinci", data_processed, BASE_VECTORS)

我想保存模型并将其转换为 tflite。我已经研究了很多,但无法找到任何解决方案。或者如何将其提供给张量流 API。

共有1个答案

邵旺
2023-03-14

继续的一个选项是将模型保存为SavedModel格式,然后将生成的模型转换为tflite。请注意,转换模型的能力可能取决于模型正在使用的操作,并且某些模型架构可能无法转换为tflite格式。

 类似资料:
  • 问题内容: 我的Express应用程序正在从浏览器中接收base64编码的PNG(使用toDataURL()从画布生成)并将其写入文件。但是该文件不是有效的图像文件,因此“文件”实用程序只是将其标识为“数据”。 问题答案: 我认为您正在转换的数据比您需要的更多。一旦使用正确的编码创建了缓冲区,您只需要将缓冲区写入文件即可。 new Buffer(…,’base64’)通过将输入解释为base64编

  • 我一直在学习汇编,并且我读到四个主要的x86通用寄存器(eax,ebx,ecx和edx)都有一个预期或建议的目的。例如,eax 是累加器寄存器,ecx 用作循环的计数器,依此类推。大多数编译器是否尝试将寄存器用于建议的目的,或者他们是否忽略了寄存器“应该”用于什么,而只是将值分配给下一个可用的寄存器? 此外,在查看x64寄存器时,我注意到额外添加了8个通用寄存器,如果忽略rbp、rsp、rsi和r

  • 我将一个DBF文件输入到数据框中并运行查询。 这是密码。 然后得到这样一个错误。。KeyError:[Int64Index([0],dtype='int64')]中没有一个在[columns]中 这是我想要的文本文件的输出..."2020-01-01 943 527.0 56.46 56.46 0.0 0.0"

  • 问题内容: 我通过执行查询得到。这必须传递给 IN 子句值的另一个查询。如何通过 HQL ? 我们可以转换到并且可以通过它,这不是一个问题。 最后,我必须将列表以或或形式传递给 IN 子句。 问题答案: 要么

  • 我使用通用句子编码器精简版创建了一个保存的模型。如果我使用tf.saved_model加载器加载已保存的模型,它工作得很好。 但是,如果我尝试使用Tensorflow服务为模型提供服务,我会得到以下错误: “错误”: “索引[3] = 1 不在 [0, 1)\n\t [[节点: lite_module_apply_default/Encoder_en/柯纳转换器/ClipToMax长度/Gathe