使用张量流的句子相似度

Sentences similarity using tensorflow

我正在尝试确定一个句子与其他句子之间的语义相似性,如下所示:

import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
import os, sys
from sklearn.metrics.pairwise import cosine_similarity

# get cosine similairty matrix
def cos_sim(input_vectors):
    similarity = cosine_similarity(input_vectors)
    return similarity

# get topN similar sentences
def get_top_similar(sentence, sentence_list, similarity_matrix, topN):
    # find the index of sentence in list
    index = sentence_list.index(sentence)
    # get the corresponding row in similarity matrix
    similarity_row = np.array(similarity_matrix[index, :])
    # get the indices of top similar
    indices = similarity_row.argsort()[-topN:][::-1]
    return [sentence_list[i] for i in indices]


module_url = "https://tfhub.dev/google/universal-sentence-encoder/2" #@param ["https://tfhub.dev/google/universal-sentence-encoder/2", "https://tfhub.dev/google/universal-sentence-encoder-large/3"]

# Import the Universal Sentence Encoder's TF Hub module
embed = hub.Module(module_url)

# Reduce logging output.
tf.logging.set_verbosity(tf.logging.ERROR)

sentences_list = [
    # phone related
    'My phone is slow',
    'My phone is not good',
    'I need to change my phone. It does not work well',
    'How is your phone?',

    # age related
    'What is your age?',
    'How old are you?',
    'I am 10 years old',

    # weather related
    'It is raining today',
    'Would it be sunny tomorrow?',
    'The summers are here.'
]

with tf.Session() as session:

  session.run([tf.global_variables_initializer(), tf.tables_initializer()])
  sentences_embeddings = session.run(embed(sentences_list))

similarity_matrix = cos_sim(np.array(sentences_embeddings))

sentence = "It is raining today"
top_similar = get_top_similar(sentence, sentences_list, similarity_matrix, 3)

# printing the list using loop 
for x in range(len(top_similar)): 
    print(top_similar[x])
#view raw

但是,当我尝试 运行 这段代码时,我得到了这个错误:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-61-ea8c65e564c2> in <module>
     24 
     25 # Import the Universal Sentence Encoder's TF Hub module
---> 26 embed = hub.Module(module_url)
     27 
     28 # Reduce logging output.

/anaconda3/lib/python3.7/site-packages/tensorflow_hub/module.py in __init__(self, spec, trainable, name, tags)
    179           name=self._name,
    180           trainable=self._trainable,
--> 181           tags=self._tags)
    182       # pylint: enable=protected-access
    183 

/anaconda3/lib/python3.7/site-packages/tensorflow_hub/native_module.py in _create_impl(self, name, trainable, tags)
    383         trainable=trainable,
    384         checkpoint_path=self._checkpoint_variables_path,
--> 385         name=name)
    386 
    387   def _export(self, path, variables_saver):

/anaconda3/lib/python3.7/site-packages/tensorflow_hub/native_module.py in __init__(self, spec, meta_graph, trainable, checkpoint_path, name)
    442     # TPU training code.
    443     with scope_func():
--> 444       self._init_state(name)
    445 
    446   def _init_state(self, name):

/anaconda3/lib/python3.7/site-packages/tensorflow_hub/native_module.py in _init_state(self, name)
    445 
    446   def _init_state(self, name):
--> 447     variable_tensor_map, self._state_map = self._create_state_graph(name)
    448     self._variable_map = recover_partitioned_variable_map(
    449         get_node_map_from_tensor_map(variable_tensor_map))

/anaconda3/lib/python3.7/site-packages/tensorflow_hub/native_module.py in _create_state_graph(self, name)
    502         meta_graph,
    503         input_map={},
--> 504         import_scope=relative_scope_name)
    505 
    506     # Build a list from the variable name in the module definition to the actual

/anaconda3/lib/python3.7/site-packages/tensorflow/python/training/saver.py in import_meta_graph(meta_graph_or_file, clear_devices, import_scope, **kwargs)
   1460   return _import_meta_graph_with_return_elements(meta_graph_or_file,
   1461                                                  clear_devices, import_scope,
-> 1462                                                  **kwargs)[0]
   1463 
   1464 

/anaconda3/lib/python3.7/site-packages/tensorflow/python/training/saver.py in _import_meta_graph_with_return_elements(meta_graph_or_file, clear_devices, import_scope, return_elements, **kwargs)
   1470   """Import MetaGraph, and return both a saver and returned elements."""
   1471   if context.executing_eagerly():
-> 1472     raise RuntimeError("Exporting/importing meta graphs is not supported when "
   1473                        "eager execution is enabled. No graph exists when eager "
   1474                        "execution is enabled.")

RuntimeError: Exporting/importing meta graphs is not supported when eager execution is enabled. No graph exists when eager execution is enabled.

你知道我该如何解决吗?

问题的原因好像是TF2不支持hub模型

这很简单,但是您是否尝试过禁用 tensorflow version 2 behaivour?

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

此命令将禁用 tensorflow 2 行为,但仍可能会出现一些错误,与导入模块和图形有关。

然后尝试下面的命令。

!pip install --upgrade tensorflow==1.15

import tensorflow as tf
print(tf.__version__)

这会将您的tensorflow升级到1.15版本,并打印结果。 搜索“如何使用 pip 升级 python 模块”以获得更多帮助。

无论如何,请检查以下链接。他们描述了类似的问题。

https://github.com/tensorflow/hub/issues/350

https://github.com/tensorflow/hub/issues/124

Tensorflow Eager Guide