Конечная цель — сократить список до такого уровня, который можно будет найти.
пример с использованием Chatgpt 1o mini
Код: Выделить всё
reduce the list of words to 3 terms able to used in search. Combine words if they make sense in context to all other words in the list. Each term should combine words meaningfully, and no word should be repeated across the terms. return in list form
["rpg", "role playing", "fantasy", "monster", "Dungeons", "dragons", "master", "monster", "job", "class"]
вот попытки, которые я пробовал использовать Python
попытка 1: UMAP, косинусное сходство
Код: Выделить всё
from sklearn.metrics.pairwise import cosine_similarity
def concatenate_overlap(list_of_list):
pooled = [set(subList) for subList in list_of_list]
merging = True
while merging:
merging = False
for i, group in enumerate(pooled):
merged = next((g for g in pooled[i + 1:] if g.intersection(group)), None)
if not merged:
continue
group.update(merged)
pooled.remove(merged)
merging = True
return [list(x) for x in pooled]
text_list = ["rpg", "role playing", "fantasy", "monster", "Dungeons", "dragons", "master", "monster", "job", "class"]
MODEL_NAME = 'Alibaba-NLP/gte-multilingual-base'
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModel.from_pretrained(MODEL_NAME, trust_remote_code=True)
batch_dict = tokenizer(text_list, max_length=8192, padding=True, truncation=True, return_tensors='pt')
outputs = model(**batch_dict)
embeddings = outputs.last_hidden_state[:, 0][:768]
similarity_matrix = cosine_similarity(embeddings.detach())
np.fill_diagonal(similarity_matrix, 0)
to_merge_list: List[List[int]] = []
for idx, topic_similarity_scores in enumerate(similarity_matrix):
similar_words = list(np.where(0.8> min_similarity)[0])
similar_words.append(idx)
to_merge_list.append(similar_words)
to_concat = concatenate_overlap(to_merge_list)
words = [text_list[a[0]] for a in to_concat]
попытка 2: модель суммирования
Код: Выделить всё
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
word_list = ["rpg", "role playing", "fantasy", "monster", "Dungeons", "dragons", "master", "monster", "job", "class"]
text = ", ".join(word_list)
summarizer(text, max_length=50, do_sample=False)
редактирование: критерии просты: сократите список слов до фразы из 3 или 4 слов, по которой можно осуществлять поиск. В случае с Chatgpt 01 он дал мне 3 выражения из нескольких слов для поиска. Для двух примеров. В идеале это дало бы мне что-то такое же маленькое.
Я планирую взять списки слов и свести их к подсказкам для поиска.
Подробнее здесь: https://stackoverflow.com/questions/793 ... t-of-words
Мобильная версия