下面的python代码显示句子相似度,它使用通用句子编码器来实现相同的功能。
from absl import logging
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import re
import seaborn as sns
module_url = "https://tfhub.dev/google/universal-sentence-encoder/4"
model = hub.load(module_url)
print ("module %s loaded" % module_url)
def embed(input):
return model(input)
def plot_similarity(labels, features, rotation):
corr = np.inner(features, features)
print(corr)
sns.set(font_scale=2.4)
plt.subplots(figsize=(40,30))
g = sns.heatmap(
corr,
xticklabels=labels,
yticklabels=labels,
vmin=0,
vmax=1,
cmap="YlGnBu",linewidths=1.0)
g.set_xticklabels(labels, rotation=rotation)
g.set_title("Semantic Textual Similarity")
def run_and_plot(messages_):
message_embeddings_ = embed(messages_)
plot_similarity(messages_, message_embeddings_, 90)
messages = [
"I want to know my savings account balance",
"Show my bank balance",
"Show me my account",
"What is my bank balance",
"Please Show my bank balance"
]
run_and_plot(messages)
字符串
输出显示为热图,如下所示,还打印值
我只想关注那些看起来很相似的句子,但是当前的热图显示了所有的值。
所以呢
1.有没有一种方法可以让我只查看范围大于0.6且小于0.999的值的热图?
1.是否可以打印位于给定范围内的匹配值对,即0.6和0.99?谢了,拉黑特
2条答案
按热度按时间dxxyhpgq1#
根据您的问题更新,这里是一个修订版本。显然,在网格中,不能删除单个单元格。但是我们可以大幅减少热图,只显示相关的值对。热图中存在的随机分散的显著值越多,这种效果就越不明显。
字符串
样品输出:
x1c 0d1x的数据
左图,原始方法显示热图的所有元素。对,只保留相关的配对。该问题(以及因此代码)排除了显著的负相关性,例如-0.95。如果不打算这样做,则应使用
np.abs()
。初始答案
我很惊讶还没有人提供一个独立的解决方案,所以这里有一个:
型
样品输出:
的
waxmsbnn2#
所提供的代码作为@Mr.T here提出的概念的重新实现。然而,这个特定的实现不需要创建标签,因为它只对pandas dataframe对象的操作进行操作,与@Mr.T的解决方案相反,它主要涉及numpy数组对象的操作。
字符串
选中的热图
x1c 0d1x的数据
原始热图
的