похожих строк? Хочется находить распространённые опечатки (типа "software developer"/"sofware devepoler"). Датасет большой и понятное дело сравнивать все пары будет очень долго.
такое? https://github.com/seatgeek/thefuzz
Ну тут сравнивается 1 с 1 либо 1 со многими. А мне бы хотелось, чтобы сгруппиповало. Может разве что count vectorizer какой-то на биграммы-триграммы.
Может кластеризовать и уже внутри перебор? Типа faiss
Наверное, да, но все равно будет долго все это в цикле перебирать. Поэтому я и думаю, может уже есть готовая бибиотека. Или кластеризировать faiss, а потом взять count vectorizer на буквенных биграммах и снова кластеризировать. А уже потом перебирать.
...а вектрризовать каким-нибудь бертом без энкодинга. были какие-то character-bert или google canine. сам их не юзал правда, хбз
Мне кажется, можно создать обратный индекс на символьных n-граммах (т.е. словарик типа {"dev": ["software developer", "software development", custdev", ...], ...}), и доставать кандидатов из него, а потом заново скорить их по edit distance. Думаю, это будет быстрее, чем vectorizer+кластеризация. Правда, это не сработает на разных краевых случаях типа developer vs d e v e l o p e r, но на них и vectorizer вовсе не факт что корректно отработает.
а вот кстати да, совсем забыл. elasticsearch вроде отлично умеет в fuzzy
Обсуждают сегодня