Будучи младшим инженером-программистом в свой первый рабочий день, я стремился использовать передовые технологии и поднять технологию моей компании на новый уровень. Моя первоначальная задача заключалась в объединении двух баз данных, в которых было несколько повторяющихся записей, но тут была одна загвоздка! Дубликаты не были точными совпадениями; они состояли из имен строк, которые могли немного отличаться, что исключало возможность прямого точного сопоставления строк.
Моей первой восторженной идеей было использовать машинное обучение! Я подумал: «Почему бы не создать модель, которая предсказывает, совпадают ли эти две строки или нет?» С волнением я обнаружил, что это известная проблема на Kaggle, что укрепило мою веру в то, что я выбрал правильную задачу и технологию.
После того, как я опробовал четыре разные модели переобучения, реальность сильно ударила меня — я не добился большого прогресса. Отсутствие хороших тренировочных данных и другие сложности привели меня в уныние. Я был на грани того, чтобы признать поражение и предложить другому разработчику вступить во владение. Тем не менее, я решил дать ему последний шанс. Я включил некоторые алгоритмы расстояния между строками в качестве функций в модель машинного обучения, и, к моему удивлению, результаты были почти идеальными!
Оказывается, использование относительно старого алгоритма из 1980-х годов оказалось более эффективным, чем мои попытки использовать подход ML. Возможно, я не так хорошо разбирался в машинном обучении, как надеялся, но важный урок, который я усвоил, заключался в том, что чрезмерное проектирование решения — не всегда лучший путь. Иногда самый простой подход может дать самые эффективные результаты.