Сопоставление товаров с доменом
У меня есть различные продукты, которые мне нужно решить, если они одинаковы. Быстрый пример:
Microsoft RS400 mouse with middle button
должен соответствовать Microsoft Red Style 400 three buttoned mouse
но нет Microsoft Red Style 500 mouse
Нет ничего более приятного, с чем я могу сопоставить, кроме имени, и просто сделать это с соотношением подходящих слов не достаточно хорошо (уровень ошибок слишком высок)
Я знаю о домене, и поэтому могу (например) вручную написать тот факт, что трехкнопочная мышь, вероятно, такая же, как мышь со средней кнопкой. Я также знаю производителей (или могу очень хорошо угадать их).
Пока я думал только о том, чтобы сопоставить их, пытаясь использовать написанные от руки правила, чтобы уменьшить размер строки, а затем проверяя подходящие слова, но мне было интересно, есть ли у кого-нибудь идеи, что лучший способ сделать это соответствие - это лучше Точность и аккуратность (или с чего начать поиск) и знает ли кто-нибудь о работе, проделанной в этой области? (документы, примеры и т. д.).
4 ответа
"Я знаю о домене..."
Как много вы знаете о домене? Если вы знаете все о домене, то вам лучше составить индекс всех продуктов ваших производителей (в основном описание продукта с веб-страницы производителей). Тогда вместо того, чтобы пытаться сопоставить ваши описания друг с другом, сопоставьте их с вашим индексом продуктов.
Преимущества этого подхода:
- предположительно все слова, использованные в описании продукта, использовались где-то в рекламной литературе
- если при построении индекса вы смогли взвесить некоторую информацию (например, коды продуктов), то вы можете добиться большего успеха
Недостатки:
- создание индекса может занять много времени (особенно если это сделано вручную)
Если вы не знаете всего о своем домене, вы можете рассмотреть очень распространенные слова понижения рейтинга (вы можете получить списки распространенных слов в интернете), а также числа и слова повышенного ранга, которых нет в словаре. (вы можете получить списки слов из интернета / большинство дистрибутивов linux/unix идут с ними для проверки орфографии).
Я не знаю, как много вы знаете о поиске, но в прошлом я находил полезной книгу У. Брюса Крофта, Дональда Метцлера, Тревора Штромана "Поиск в поисковых системах на практике". На веб-сайте издателей есть несколько примеров глав, в которых будет указано, предназначена ли вам книга: pearsonhighed.com
Надеюсь, это поможет.
В дополнение к рукописным правилам вы можете попытаться использовать контролируемое обучение с извлечением функций.
Позвольте признакам быть словами в описании, а не рассматривать описания как векторы признаков. При обучении алгоритму, пусть он покажет вам два вектора, которые похожи по соотношению, и, если это один и тот же элемент, пусть алгоритм улучшит вес для этих слов.
Например, каждая пара слов может иметь больший вес, чем простое соотношение, как вы сделали.
[3-button] [middle]
[wheel] [button]
[mouse] [mouse]
По вашему алгоритму это даст соотношение 1/3 к подобию. Когда вы устанавливаете это как "тот же элемент", алгоритм должен добавить больше значения к той паре слов, когда он достигнет их в следующий раз.
Просто токенизируйте (вы должны также отделить числа от букв на этом шаге, а не просто пробел), стебель, отфильтровать стоп-слова и неинтересные слова, такие как мышь. Возможно, вы должны иметь список со словами производителей, а также сократить все не производителей и цифры до их первой буквы. (если вы это сделаете, вы должны разделить заглавные буквы так же в токенизаторе)
Microsoft RS400 mouse with middle button -> Microsoft R S 400
Microsoft Red Style 400 three buttoned mouse -> Microsoft R S 400
Microsoft Red Style 500 mouse -> Microsoft R S 500
Если вы хотите лучшее решение vsm (модель векторного пространства) из обнаружения плагиата, было бы неплохо. (Каждое слово получает вес в соответствии с его дискриминационной ценностью, и эти веса проецируются в многомерное пространство. После этого вы просто измеряете угловую степень между двумя текстами)
Я хотел бы предложить что-то более общее применимо. Насколько я понимаю, вам нужна некоторая обработка nlp, которая будет иметь дело с вещами, которые вы распознаете как синонимы. Я думаю, что это довольно простая реализация.
Если бы я был вами, я бы создал объект ключевого слова, у которого в качестве параметра был бы список синонимов, а затем написал бы сценарий, который бы очищал любой текст для слов, которые появляются только изредка (с определенной частотой, с которой ключевое слово фактически считается применимым).), затем добавьте список ключевых слов в качестве параметра каждого ключевого слова, содержащего его синонимы. Если бы вы были готовы пойти дальше, я бы установил веса в списке синонимов, показывая, насколько они похожи.
При такой проблеме с nlp вероятность того, что вы достигнете 100% -ной точности, равна 0, но вы вполне могли бы подняться выше 90%, я бы предложил добавить элемент, с помощью которого вы можете корректировать веса автоматически. Здесь я должен быть довольно расплывчатым, но на моей последней работе передо мной стояла похожая проблема, и я смог добиться точности в 90-х. Моя реализация также, вероятно, была более сложной, чем то, что вам нужно, но даже простая реализация должна дать вам довольно хороший результат, но если вы не имеете дело с довольно большим набором данных (~ сотни +), то, вероятно, не стоит создавать сценарии.
Быстрый пример, в вашем примере разница может быть довольно точно вычислена, если просто сказать, что "среднее" и "три" являются синонимами. Вы можете сделать более сложным, если вам нужно, но это будет соответствовать много.