我正在尝试在不同卖家的零售文章之间进行产品匹配。他们对同一篇文章使用不同的名称。我想将几个卖家的文章与我数据库中的文章进行比较,看看它们是否相同。我使用整个名称进行比较,而不是每个单词。
我在Python中使用TensorFlow应用了这个;使用USE(通用句子编码器)多语言(我在西班牙语工作),我获得了每篇文章的词嵌入和相关矩阵。这样我可以看到最近的文章。
但是我想用字典来表示文章的名称:键是数据库中的文章名称,值是描述文章的不同组合(可能性)。我想把这个像输入一样的字典传递给模型,但是我不知道怎么做。
获取词嵌入的代码:
module_url = "https://tfhub.dev/google/universal-sentence-encoder-multilingual/3"
model = hub.load(module_url)
print ("module %s loaded" % module_url)
model(input)
获取热图以显示相似之处:
def plot_similarity(labels, features, rotation):
corr = np.inner(features, features)
sns.set(font_scale=1.2) # Tamaño de la fuente del heatmap.
plt.subplots(figsize=(30,30)) #Para aumentar el tamaño por defecto del heatmap.
g = sns.heatmap(
corr, # Datos
annot=True, # Muestra el valor numérico de la correlación.
xticklabels= labels, # Etiquetas eje X.
yticklabels= labels, # Etiquetas eje Y.
vmin=0.8, # Era = 0, aumentamos el valor para que se muestren la progresión de color a partir del 80 %.
vmax=1,
cmap="YlOrRd") # Color del heatmap.
g.set_xticklabels(labels, rotation=rotation)
g.set_title("Semantic Textual Similarity")
#Guardamos el gráfico y lo exportamos:
plt.savefig('Heatmap exported.png', dpi = 400)
files.download('Heatmap exported.png')
def run_and_plot(messages_):
message_embeddings_ = embed(messages_)
plot_similarity(messages_, message_embeddings_, 90)
然后我运行:
run_and_plot(my_list_of_articles)
得到热图
我想改变'my_list_of_articles'使用字典。此时,该对象是一个Python列表。
我知道我需要训练一个非结构化文本的神经网络;如果我测试相同文章的许多组合,神经网络可以学习哪篇文章是,但我不知道如何做到这一点。
提前谢谢你。
我假设你有这样的东西或者创建一个,如果你还没有
product_map = { 'product_A' : ['product A description_1' , 'product A description_2'],
'product_B' : ['product A description_1' , 'product A description_2']}
import numpy as np
def run_and_plot(product_map):
final_opt={}
for product in product_map:
# below expand_dims may or may not be required as most model accept batch size too so you may have to do this
msg = np.expand_dims(product_map[product])
message_embeddings_ = embed(msg)
if product in final_opt:
final_opt[product].append(message_embeddings_)
else:
final_opt[product][message_embeddings_]
final_opt将像这样
{ 'product_A': ['embeddings for description_1 ', 'embeddings for description_2 ' ],
'product_B': ['embeddings for description_1 ', 'embeddings for description_2 ' ] }
你可以通过
绘制每个产品描述的相似度for product in final_opt:
plot_similarity(product, final_opt[product], rotation):