Сокращение списка слов по словамPython

Программы на Python
Ответить
Anonymous
 Сокращение списка слов по словам

Сообщение Anonymous »

Помимо использования чат-бота, такого как o1 mini, есть ли другой локальный способ сократить список слов с 10 до 3 слов? Я чувствую, что из-за контекста, словесных ассоциаций, семантического значения слов должна быть какая-то экстраполяция, чтобы сократить список, но пока мои попытки не увенчались успехом.
Конечная цель — свести список к чему-то, что можно будет найти.
пример использованияchatgpt 1o mini
сократите список слов до 3 термина, которые можно использовать в поиске. Объедините слова, если они имеют смысл в контексте всех других слов в списке. Каждый термин должен осмысленно объединять слова, и ни одно слово не должно повторяться в терминах. вернуться в виде списка

Код: Выделить всё

["rpg", "role playing", "fantasy", "monster", "Dungeons", "dragons", "master", "monster", "job", "class"]
результат: Dungeons Dragons, ролевая игра, класс монстров

вот попытки, которые я пробовал использовать 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]

результат: ['rpg', 'монстр', 'Подземелья', 'драконы', 'мастер', 'монстр', 'задание', ' class']

попытка 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)
результат: ролевые игры, ролевые игры, фэнтези, монстр, подземелья, драконы, мастер, монстр. работа, класс. рпг, ролевая игра, фэнтези. монстр, подземелья, драконы. хозяин, монстры, хозяин. работа,. class

редактирование: критерии просты: сократите список слов до фразы из 3 или 4 слов, по которой можно осуществлять поиск. В случае с Chatgpt 01 он дал мне 3 выражения из нескольких слов для поиска. Для двух примеров. В идеале это дало бы мне что-то такое же маленькое.
Я планирую взять списки слов и свести их к подсказкам для поиска.
редактировать 2:
Чтобы предоставить больше контекста того, каким должен быть ожидаемый результат, здесь используется модульный тест и объяснение.

Код: Выделить всё

input: ["bad", "horrible", "unfun", "waste", "big", "mutha", "truckers", "racing", "incomplete", "big mutha"]

output: ["big mutha truckers", "unfun", "incomplete"]
контекстно, список из 10 слов посвящен игре под названием «большие дальнобойщики-мута», и поэтому это слово будет удалено из списка слов. Вторым будут все синонимы, обозначающие, что игра не очень хорошая, то есть «несмешная», «плохая» или даже «ужасные гонки». Наконец, слово «неполный» будет удалено, поскольку оно не является близким синонимом слова «плохой» и носит описательный характер.
с помощью этих трех слов я могу бросить его в Google и в идеале найти в результатах поиска отрицательные отзывы. для больших мутов должны появиться дальнобойщики.

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-of-words
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»