Привет, я использовал этот метод для поиска дубликатов в достаточно однородной БД (там были только строительные материалы и инструменты). В данном методе считается BM25score n-ой записи со всеми остальными. Этот score учитывает: 1. TF (Term Frequency) - частоту вхождения каждого слова из n-ой записи в k-ую (с которой сейчас она сравнивается). Например если в n-ой записе есть слово "гайка", а k-ая запись "гайка гайка гайка", то такой скор будет высокий, а если вообще не упоминается это слово то 0. 2. IDF (Inverse Document Frequency) - частоту вхождения слов которые есть n-ой записи. Например если только в n-ой записи и в k-ой есть название бренда этой гайки (например "Ангстрем"), то за такое совпадение вероятность того что n-ая и k-ая запись являются дубликатами возрастёт 3. Длина документа. Если k-ая запись содержит очень много слов, то её score совпадения уменьшается (потому что если в названии вся "Война и мир" то вероятность что все слова из названия n-ой записи найдутся в k-ой велика). 4. Параметры которые подбирались эмпирически которые варьируют вес перечисленных выше параметров.
Все эти величины подставлялись в формулу (есть статья на Хабре с формулой и более подробным разбором и примером кода). Получается матрица a*a (где a число записей в БД/категории/бренде), выставляется эмпирически пороговое значение этого коэффициента совпадения и все пары со скором выше определяются как дубликаты.
Привет, я использовал этот метод для поиска дубликатов в достаточно однородной БД (там были только строительные материалы и инструменты). В данном методе считается BM25score n-ой записи со всеми остальными.
Этот score учитывает:
1. TF (Term Frequency) - частоту вхождения каждого слова из n-ой записи в k-ую (с которой сейчас она сравнивается). Например если в n-ой записе есть слово "гайка", а k-ая запись "гайка гайка гайка", то такой скор будет высокий, а если вообще не упоминается это слово то 0.
2. IDF (Inverse Document Frequency) - частоту вхождения слов которые есть n-ой записи. Например если только в n-ой записи и в k-ой есть название бренда этой гайки (например "Ангстрем"), то за такое совпадение вероятность того что n-ая и k-ая запись являются дубликатами возрастёт
3. Длина документа. Если k-ая запись содержит очень много слов, то её score совпадения уменьшается (потому что если в названии вся "Война и мир" то вероятность что все слова из названия n-ой записи найдутся в k-ой велика).
4. Параметры которые подбирались эмпирически которые варьируют вес перечисленных выше параметров.
Все эти величины подставлялись в формулу (есть статья на Хабре с формулой и более подробным разбором и примером кода). Получается матрица a*a (где a число записей в БД/категории/бренде), выставляется эмпирически пороговое значение этого коэффициента совпадения и все пары со скором выше определяются как дубликаты.