170 похожих чатов

Коллеги, всем привет ) есть есть набор фраз, в том числе

похожих, но не до степени сравнения подстрокой
нужно определить наиболее часто встречающиеся

сразу в лоб видится такое решение:
1. перебрать все циклом и посчитать близость текстов попарно
2. установить отсечение, с какого значения считать, что тексты достаточно похожи
3. посчитать количество похожих, ранжировать по убыванию

кто знает, есть ли модели/библиотеки, решающие данную задачу штатным образом?

12 ответов

7 просмотров

Шаги 2 и 3 выполняются стандартно алгоритмами agglomerative clustering – они реализованы, например, в sklearn. Для всей задачи сразу библиотеку не подскажу, но задам два уточняющих вопроса: 1) Какие пары тексты для вас «достаточно похожи», а какие – «похожи, но недостаточно, чтобы отнести их к одному кластеру»? Приведите несколько примеров. От этого зависит, какую меру близости вам советовать. Может быть, нужна близость каких-нибудь тяжелых эмбеддингов, а может, достаточно левенштейна. 2) Между любой парой непохожих текстов можно придумать такую цепочку текстов, что каждые два соседних попарно похожи. Поэтому есть риск, что у вас все или почти все тексты попадут в один мегакластер. В AgglomerativeClustering эту проблему можно решить, поставив параметр linkage="complete", но это может привести к обратной проблеме: какие-то похожие предложения окажутся в разных кластерах. И эта проблема не техническая, а принципиальная: задача разделения непрерывного множества на дискретные куски плохо определена, и если в ваших данных нет четких естественных кластеров, она может просто не иметь хорошего решения. Так что придется придумывать компромиссы.

а что такое - "определить часто встречающиеся"? ибо если просто нужно определить слова или фразы по частотным характеристикам, то можно же использую простейший zipf отсортировать, либо лучше - по idf отсортировать . (если нужно коллокации это чуть сложнее, но несильно, тем же countvectorizer получить co-occurrence матрицу, а дальше по ней посчитать pmi матрицу) но есть подозрение что не это надо. судя по вашему описанию и ответу Давида, это больше на дедупликацию похоже. как бы это не совсем тоже самое, что обычная кластеризация скажем по семантике текстов, тех же эмбеддингов. это задача на самом деле частный случай класса задач link prediction, когда у нас все возможные пары и нужно предсказать какой линк между ними, в простейшем случае same_as/same_cluster/etc. (и метрики многие считаются исходя из этого, такие как precision, recall, etc.) делается да, похожим образом 1. считается self-similarity matrix . если пар много, то лучше заранее прикидывать по сочетаниям из n по 2 = n*(n-1) возможно ли это за предоставленное время и имеющейся памяти - и для большого числа разбивать т.о. датасет, чтобы с большей вероятностью искомые тексты были в одном блоке - т.е. сделать блокинг, потом каждый такой блок обрабатывать отдельно - в простейшем случае сделать token based блокинг aka inverted index (есть еще техники как прунить такие индексы поскольку они довольно сильно тавтологичны) 2. дальше кластеризовать используя выше посчитанный результат, - distance матрицу можно просто посчитать как = 1-self_matrix. agglomerative да вполне годится, можно hierarchical clustering из любого пакета , например отсюда https://pypi.org/project/fastcluster/ . насчет проблемы непохожих, очень хорошо написал Давид, там надо поэкспериментировать и ключевое - все зависит именно от функции которая скоры посчитала (и которой лучше клипать непохожие значения в ноль), поскольку именно все так, есть риск получить один большой ̶о̶с̶т̶р̶о̶в̶кластер где все есть (в частности там внутри у agglomerative используется union-find структура aka connected components, которая все соберет, если из каждой точки есть связность до другой точки). (конечно если не хочется возится с этим, с вопросами similarity/dissimilarity и проблемой транзитивности, можно просто в лоб использовать dbscan с нужным радиусом eps, качество может быть похуже правда) есть задача когда просто нужно найти релевантные тексты. это именно про третий пункт, - "ранжировать по убыванию". 1. создать индекс(какой годится для задачи: есть модель и вектора тогда faiss, если нет ничего, можно tf-idf/bm25/ngram+jaccard/аппроксимация jaccarcd используя MinHashLSH (https://github.com/ekzhu/datasketch)). 2. найти top_k . 3. отфильтровать по threshold (если индекс не возвращает скоры или они не нормализованы, или это distance, то можно просто посчитать для top_k скоры на лету и отфильтровать)

Сбер выложил в открытый доступ свою модель gpt. Подскажите, каких ресурсов будет достаточно для запуска на локальном компьютере (дать запрос, получить ответ)? Системы с 3080 (10 гигов), Рязань 3700х и 64 гига оперативки хватит?

Anton
Сбер выложил в открытый доступ свою модель gpt. По...

На гпу не влезет. На проце будет, но медленно

datascience xc
На гпу не влезет. На проце будет, но медленно

Сколько памяти требует? Есть возможность ужать модель, чтобы влезла на гпу?

Anton
Сбер выложил в открытый доступ свою модель gpt. По...

Дождитесь int4 версии, она точно влезет

datascience xc
Уже есть

В чате Сбера которая?

Grigory Frantsuzov
В чате Сбера которая?

https://huggingface.co/gurgutan/ruGPT-13B-4bit

Anatoly-Belov Автор вопроса

Похожие вопросы

Обсуждают сегодня

Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
Делал задачу вот такую https://stepik.org/lesson/4985/step/9?unit=1083 получилось такое https://play.haskell.org/saved/ipKrepqe оно работает, тестов много не писал, но работае...
Fedor
22
что-то я не понимаю, в линуксе отладочную информацию как убрать из бинаря? он что с этой опцией, что без - одного и того же (достаточно большого) размера (да, я про лазарь)
Iluha Companets
13
Всем привет, а может кто-то подсказать какие-то советы или типо того, как оптимальнее всего сапортить сервисы в разных локациях (канада + австралия + евпропа)? Будет ли ошибк...
Stas
8
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Не догоняю немного каким боком тут эппл Вот есть веб (мини) апп, который по факту веб сайт, просто в телеге веб вью и если там оплата, то нежно вот эти приседания?
e\\/gen
7
Комрады, как на дельфях вытащить "системный" (т.е. который используется ОСью) шрифт со всеми аттрибутами? Я так понимаю, это не Application.DefaultFont?
Ed Doc
7
Почему спрашиваю - поймал падение на совершенно уже пустом проекте, хочу до минимального повторяемого свести... Такой вопрос - вот эти юниты, перечисленные в инспекторе объек...
notme
6
Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Карта сайта