【发布时间】:2021-10-28 11:29:02
【问题描述】:
我有一个来自数百万个数组的数据集,如下所示:
sentences=[
[
'query_foo bar',
'split_query_foo',
'split_query_bar',
'sku_qwre',
'brand_A B C',
'split_brand_A',
'split_brand_B',
'split_brand_C',
'color_black',
'category_C1',
'product_group_clothing',
'silhouette_t_shirt_top',
],
[...]
]
您可以在哪里找到查询、执行查询的用户获得的 sku 以及 SKU 的一些属性。我的想法是做一个基于 word2vec 的非常基本的模型,我可以在其中找到相似的东西。
简单来说,如果我在模型上搜索 t-shirt,我希望在查询附近有 T 恤 SKU。
我尝试使用具有不同属性的 gensim(我是这个库的新手)来构建模型:
from gensim.models.callbacks import CallbackAny2Vec
class callback(CallbackAny2Vec):
'''Callback to print loss after each epoch.'''
def __init__(self):
self.epoch = 0
self.loss_to_be_subed = 0
def on_epoch_end(self, model):
loss = model.get_latest_training_loss()
loss_now = loss - self.loss_to_be_subed
self.loss_to_be_subed = loss
print('Loss after epoch {}: {}'.format(self.epoch, loss_now))
self.epoch += 1
model = Word2Vec(
sentences=sentences,
vector_size=100,
window=1000,
min_count=2,
workers=-1,
epochs=10,
# negative=5,
compute_loss=True,
callbacks=[callback()]
)
我得到了这个输出:
Loss after epoch 0: 0.0
Loss after epoch 1: 0.0
Loss after epoch 2: 0.0
Loss after epoch 3: 0.0
Loss after epoch 4: 0.0
Loss after epoch 5: 0.0
Loss after epoch 6: 0.0
Loss after epoch 7: 0.0
Loss after epoch 8: 0.0
Loss after epoch 9: 0.0
全输0!!! 此时我开始变得非常怀疑。
注意:sentences 的每个元素都是独立的,我希望库不要尝试在不同的数组中混合不同的术语。
为了尝试测试模型,我尝试了一个非常频繁的查询,例如model.wv.most_similar('query_t-shirt', topn=100),结果完全荒谬。
是我的想法很疯狂还是我使用错误的库?
【问题讨论】:
标签: python nlp gensim information-retrieval