【问题标题】:Product matching in Python and TensorFlowPython 和 TensorFlow 中的产品匹配
【发布时间】:2021-04-24 14:49:02
【问题描述】:

我正在尝试在来自不同卖家的零售商品之间进行产品匹配。他们对同一篇文章使用不同的名称。 我想将几个卖家的文章与我数据库中的文章进行比较,以了解它们是否相同。我使用全名进行比较,而不是每个单词。

我用 TensorFlow 在 Python 中应用了这个;使用 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 列表。

我知道我需要训练非结构化文本的神经网络;如果我测试相同文章的许多组合,NN 可以知道是哪篇文章,但我不知道该怎么做。

非常感谢您。

【问题讨论】:

  • 你有什么问题可以显示任何代码吗?
  • 不确定您的问题。您想为您的数据库产品信息传递字典以获取热图标签还是传递给您的 NN 模型。
  • 我想传递一个字典,因为每个键都可以包含多个同名的可能性,(值)。我认为这可以在NN中完成,但我不知道如何。谢谢。
  • 如果我错了,请纠正我你想将字典传递给你的中性网络而不是热图。但我不认为我们可以将字典输入 Keras 或 Tensorflow,而不是 100% 确定其他 DL 库。只是一个想法,尽管您可以将产品名称作为另一个功能传递给您的 NN 模型。
  • @PrayalankarAshutosh 你是对的:我想将字典传递给 NN;热图仅显示最终结果。问题是,如果我将产品名称作为 NN 的一项功能传递,则每篇文章只传递一个名称(每篇文章的一个可能名称)。不知道我解释的好不好……

标签: python tensorflow neural-network nlp


【解决方案1】:

我假设您有类似的东西,或者如果您还没有,请创建它

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):
        

【讨论】:

  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2020-04-15
  • 2010-10-10
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多