Конечная цель — свести список к чему-то, что можно будет найти.
пример использованияchatgpt 1o mini
сократите список слов до 3 термина, которые можно использовать в поиске. Объедините слова, если они имеют смысл в контексте всех других слов в списке. Каждый термин должен осмысленно объединять слова, и ни одно слово не должно повторяться в терминах. вернуться в виде списка
Код: Выделить всё
["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 выражения из нескольких слов для поиска. Для двух примеров. В идеале это дало бы мне что-то такое же маленькое.
Я планирую взять списки слов и свести их к подсказкам для поиска.
редактировать 2:
Чтобы предоставить больше контекста того, каким должен быть ожидаемый результат, здесь используется модульный тест и объяснение.
Код: Выделить всё
input: ["bad", "horrible", "unfun", "waste", "big", "mutha", "truckers", "racing", "incomplete", "big mutha"]
output: ["big mutha truckers", "unfun", "incomplete"]
с помощью этих трех слов я могу бросить его в Google и в идеале найти в результатах поиска отрицательные отзывы. для больших мутов должны появиться дальнобойщики.
Подробнее здесь: https://stackoverflow.com/questions/793 ... t-of-words
Мобильная версия