我在意大利语上下文搜索中使用BERT模型,但它无法理解句子的上下文含义,并返回错误的结果。
在下面的示例代码中,当我将“巧克力口味的牛奶”与另外两种类型的牛奶和一种巧克力进行比较时,它返回了与巧克力的高相似度。它应该返回与其他牛奶的高相似度。
谁能建议我如何改进下面的代码,以便它能返回语义结果?
代码 :
!python -m spacy download it_core_news_lg!pip install sentence-transformersimport scipyimport numpy as npfrom sentence_transformers import models, SentenceTransformermodel = SentenceTransformer('distiluse-base-multilingual-cased') # workes with Arabic, Chinese, Dutch, English, French, German, Italian, Korean, Polish, Portuguese, Russian, Spanish, Turkishcorpus = [ "Alpro, Cioccolato bevanda a base di soia 1 ltr", #Alpro, Chocolate soy drink 1 ltr(soya milk) "Milka cioccolato al latte 100 g", #Milka milk chocolate 100 g "Danone, HiPRO 25g Proteine gusto cioccolato 330 ml", #Danone, HiPRO 25g Protein chocolate flavor 330 ml(milk with chocolate flabor) ]corpus_embeddings = model.encode(corpus)queries = [ 'latte al cioccolato', #milk with chocolate flavor, ]query_embeddings = model.encode(queries)# Calculate Cosine similarity of query against each sentence iclosest_n = 10for query, query_embedding in zip(queries, query_embeddings): distances = scipy.spatial.distance.cdist([query_embedding], corpus_embeddings, "cosine")[0] results = zip(range(len(distances)), distances) results = sorted(results, key=lambda x: x[1]) print("\n======================\n") print("Query:", query) print("\nTop 10 most similar sentences in corpus:") for idx, distance in results[0:closest_n]: print(corpus[idx].strip(), "(Score: %.4f)" % (1-distance))
输出 :
======================Query: latte al cioccolatoTop 10 most similar sentences in corpus:Milka cioccolato al latte 100 g (Score: 0.7714)Alpro, Cioccolato bevanda a base di soia 1 ltr (Score: 0.5586)Danone, HiPRO 25g Proteine gusto cioccolato 330 ml (Score: 0.4569)
回答:
问题不在于你的代码,只是模型性能不足。
你可以尝试几种方法。首先,你可以尝试使用通用句子编码器(USE)。根据我的经验,它们的嵌入效果稍微好一些,至少在英语中是这样。
其次,你可以尝试不同的模型,例如sentence-transformers/xlm-r-distilroberta-base-paraphrase-v1
。它基于ROBERTa,可能会提供更好的性能。
现在你可以将几个模型的嵌入结合起来(只需连接这些表示)。在某些情况下,这会有所帮助,但会增加计算负担。
最后,你可以创建自己的模型。众所周知,单一语言模型的表现显著优于多语言模型。你可以按照指南来训练你自己的意大利语模型。