У меня есть список названий продуктов и набор текста, созданный случайными пользователями. Я пытаюсь обнаружить продукты, упомянутые в тексте, при этом учитываю орфографические вариации. Например текст
Текст = меня интересует galxy s8
Упоминает продукт samsung galaxy s8
Но обратите внимание на разницу в написании.
Я реализовал следующие подходы: 1 - макс. Токенизированные названия продуктов и текст пользователей (я разделяю слова по пунктуации и цифрам, так что s8 будет токенизироваться на 's' и '8'. Затем я проверил каждый токен в тексте пользователя чтобы узнать, есть ли это в моем словаре, с damerau levenshtein distance ‹= 1, чтобы учесть вариации в написании. Как только я обнаружил последовательность токенов, которые действительно существуют в словаре, я выполняю поиск продукта, который соответствует запросу, проверяя damerau levenshtein расстояние на каждом токене. Это дало плохие результаты. В основном потому, что последовательность токенов, которые существуют в словаре, не обязательно представляют продукт. Например, поскольку текст является максимальным, токенизированные числа могут быть найдены в словаре, и как такие даты обнаруживаются как продукты.
2- я построил биграммы и триграммы из списка продуктов и преобразовал каждый пользовательский текст в запрос ... но результаты были не такими уж хорошими, учитывая вариацию написания
3- я вручную пометил 270 предложений и обучил распознаватель именованных сущностей меткам («О» и «Продукт»). Я разделил данные на 80% обучение и 20% тест. Обратите внимание, что я не использовал список продуктов как часть функций. Результаты были в порядке .. не очень хорошо
Ни один из приведенных выше результатов не дает надежных результатов. Я пробовал регулярные выражения, но, поскольку существует так много различных комбинаций для рассмотрения, это стало слишком сложным ... Есть ли более эффективные способы решения этой проблемы? Я полагаю, что я мог бы дать лучшие результаты, если бы я тренировал больше данных, но предположим, что данных для обучения недостаточно, как вы думаете, какое решение было бы лучше?
Если я найду лучшую альтернативу тем, о которых я уже упоминал, я добавлю ее в этот пост. А пока я открыт для предложений