#machine-learning #nlp #bert-language-model
Вопрос:
Я использую модель БЕРТА для контекстного поиска на итальянском языке, но она не понимает контекстуального значения предложения и возвращает неверный результат.
в приведенном ниже примере кода, когда я сравниваю «молоко со вкусом шоколада» с двумя другими видами молока и одним шоколадом, он возвращает высокое сходство с шоколадом. это должно вернуть высокое сходство с другими молочными продуктами.
может ли кто-нибудь предложить мне какие-либо улучшения в приведенном ниже коде, чтобы он мог возвращать семантические результаты?
Код :
!python -m spacy download it_core_news_lg
!pip install sentence-transformers
import scipy
import numpy as np
from sentence_transformers import models, SentenceTransformer
model = SentenceTransformer('distiluse-base-multilingual-cased') # workes with Arabic, Chinese, Dutch, English, French, German, Italian, Korean, Polish, Portuguese, Russian, Spanish, Turkish
corpus = [
"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 i
closest_n = 10
for 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 cioccolato
Top 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)
Ответ №1:
Проблема не в вашем коде, а просто в недостаточной производительности модели.
Есть несколько вещей, которые вы можете сделать. Во-первых, вы можете попробовать Универсальный кодировщик предложений (USE). По моему опыту, их вложения немного лучше, по крайней мере, на английском языке.
Во-вторых, вы можете попробовать другую модель, например sentence-transformers/xlm-r-distilroberta-base-paraphrase-v1
. Он основан на Роберте и может дать лучшую производительность.
Теперь вы можете объединить вложения из нескольких моделей (просто объединив представления). В некоторых случаях это помогает, за счет гораздо более тяжелых вычислений.
И, наконец, вы можете создать свою собственную модель. Хорошо известно, что одноязыковые модели работают значительно лучше, чем многоязычные. Вы можете следовать руководству и обучать свою собственную итальянскую модель.