Кластеризатор массивных семантических ядер по схожести выдачи
Для огромных семантических ядер скорость и масштабирумость группировки может быть более важна, чем ее точность, поэтому для таких случаев у меня был в запасе другой алгоритм. Он является продолжением идеи кластеризации через меру Жаккара описанной в предыдущих постах (1, 2). В комментариях к постам и в личных сообщениях возник интерес к решениям для массивных семантических ядер, поэтому я переписал предыдущий скрипт для них.
За репост буду благодарен! 🙏
В алгоритме используется техника MinHash и LSH. Этот метод, основанный на хэшировании и индексации множеств, позволяет быстро искать частичные дубликаты на больших данных. Он также, как кластеризатор из предыдущих постов, менее ресурсоемкий, чем векторное преобразование и операции над матрицами.
В чем разница между мерой Жаккара и этим решением?
Точность vs. Эффективность: Коэффициент Жаккара обеспечивает точное значение схожести, но неэффективен для больших данных. MinHash и LSH предоставляют приближенное значение, но значительно более эффективны для обработки больших объемов данных.
Например, японское семантическое ядро в 480 тысяч ключевых фраз было сгруппировано за 30 минут. Конечный результат вполне устроил, учитывая, что метод на основе Жаккара считал такой объем более суток. Отлично подойдет для дорвейщиков!
Скачать можно здесь:
https://drive.google.com/file/d/1b01TbXmWINe3w0haneMcHVy-opFZkwqH/view?usp=share_link
Проект на Github:
https://github.com/dartseoengineer/keyword-clustering-minhash
Инструкция
Внимание! Этот скрипт только кластеризует, для сбора выдачи используйте сторонние программы, например, A-Parser.
1. Предварительно установите библиотеки pandas и tqdm.
2. Инструкция по использованию скрипта в командной строке:
Обязательные аргументы
input_file: Путь к входному CSV файлу.
output_file: Путь для сохранения выходного файла с кластеризованными ключевыми словами.
Необязательные аргументы
-s, --separator: Разделитель во входном файле (по умолчанию: `,`).
-k, --keyword_col: Название столбца с ключевыми словами во входном файле (по умолчанию: `Keyword`).
-u, --url_col: Название столбца с URL во входном файле (по умолчанию: `URL`).
-t, --similarity_threshold: Порог схожести (по умолчанию: `0.6`).
Пример команды в терминале
Файл результатов
1. Каждая группа в колонке Group имеет номер, начинающийся с 0.
2. Ключевые фразы, которые объеденены в один кластер, будут иметь один номер группы.
3. Если фраза не имеет общих групп с другими фразами, то она выделяется в отдельную группу.
4. Если фразы не имеют собранных URL, то они все выделяются в группу -1.
Для огромных семантических ядер скорость и масштабирумость группировки может быть более важна, чем ее точность, поэтому для таких случаев у меня был в запасе другой алгоритм. Он является продолжением идеи кластеризации через меру Жаккара описанной в предыдущих постах (1, 2). В комментариях к постам и в личных сообщениях возник интерес к решениям для массивных семантических ядер, поэтому я переписал предыдущий скрипт для них.
За репост буду благодарен! 🙏
В алгоритме используется техника MinHash и LSH. Этот метод, основанный на хэшировании и индексации множеств, позволяет быстро искать частичные дубликаты на больших данных. Он также, как кластеризатор из предыдущих постов, менее ресурсоемкий, чем векторное преобразование и операции над матрицами.
В чем разница между мерой Жаккара и этим решением?
Точность vs. Эффективность: Коэффициент Жаккара обеспечивает точное значение схожести, но неэффективен для больших данных. MinHash и LSH предоставляют приближенное значение, но значительно более эффективны для обработки больших объемов данных.
Например, японское семантическое ядро в 480 тысяч ключевых фраз было сгруппировано за 30 минут. Конечный результат вполне устроил, учитывая, что метод на основе Жаккара считал такой объем более суток. Отлично подойдет для дорвейщиков!
Скачать можно здесь:
https://drive.google.com/file/d/1b01TbXmWINe3w0haneMcHVy-opFZkwqH/view?usp=share_link
Проект на Github:
https://github.com/dartseoengineer/keyword-clustering-minhash
Инструкция
Внимание! Этот скрипт только кластеризует, для сбора выдачи используйте сторонние программы, например, A-Parser.
1. Предварительно установите библиотеки pandas и tqdm.
pip install pandas
pip install tqdm
pip install datasketch
2. Инструкция по использованию скрипта в командной строке:
Обязательные аргументы
input_file: Путь к входному CSV файлу.
output_file: Путь для сохранения выходного файла с кластеризованными ключевыми словами.
Необязательные аргументы
-s, --separator: Разделитель во входном файле (по умолчанию: `,`).
-k, --keyword_col: Название столбца с ключевыми словами во входном файле (по умолчанию: `Keyword`).
-u, --url_col: Название столбца с URL во входном файле (по умолчанию: `URL`).
-t, --similarity_threshold: Порог схожести (по умолчанию: `0.6`).
Пример команды в терминале
python minhash-cluster-cli.py for-clustering.csv clustered_keywords.csv -s ';' -k 'keyword' -u 'url' -t 0.6
Файл результатов
1. Каждая группа в колонке Group имеет номер, начинающийся с 0.
2. Ключевые фразы, которые объеденены в один кластер, будут иметь один номер группы.
3. Если фраза не имеет общих групп с другими фразами, то она выделяется в отдельную группу.
4. Если фразы не имеют собранных URL, то они все выделяются в группу -1.