machine-learning - para - machine learning traduccion
La mejor técnica de aprendizaje automático para hacer coincidir cadenas de productos (2)
Aquí hay un rompecabezas ...
Tengo dos bases de datos de los mismos 50000+ productos electrónicos y deseo hacer coincidir los productos en una base de datos con los de la otra. Sin embargo, los nombres de los productos no siempre son idénticos. Intenté usar la distancia de Levenshtein para medir la similitud de la cadena, sin embargo, esto no funcionó. Por ejemplo,
-LG 42CS560 42-Inch 1080p 60Hz LCD HDTV
-LG 42 Inch 1080p LCD HDTV
Estos artículos son los mismos, sin embargo, los nombres de sus productos varían bastante.
Por otra parte...
-LG 42 Inch 1080p LCD HDTV
-LG 50 Inch 1080p LCD HDTV
Estos son productos diferentes con nombres de productos muy similares.
¿Cómo debería abordar este problema?
Mi primer pensamiento es tratar de analizar los nombres en una descripción de las características ( LG
empresa, tamaño 42 Inch
, resolución 1080p
, tipo LCD HDTV
). Entonces puede hacer coincidir estas descripciones entre sí por compatibilidad; está bien omitir un número de producto, pero es malo tener diferentes tamaños. Es posible que baste con la compatibilidad simple de los atributos de los atributos comunes de los atributos comunes, o puede que tenga que escribir / aprender reglas sobre cuánto se permite diferenciar entre los diferentes atributos, etc.
Dependiendo de cuántos tipos diferentes de productos tenga y cuán diferentes sean los nombres listados, en realidad podría comenzar definiendo manualmente un conjunto de atributos e incluso simplemente agregando palabras / expresiones regulares específicas para que coincidan, viendo iterativamente lo que no se ha analizado hasta ahora y agregando reglas para eso. Me imagino que no hay mucha ambigüedad en términos de un elemento de vocabulario que posiblemente pertenezca a múltiples atributos, aunque sin ver tu base de datos supongo que no lo sé.
Si eso no va a ser factible, esta extracción es similar al etiquetado semi-supervisado de parte de la voz. Sin embargo, es algo diferente, ya que imagino que el vocabulario es mucho más limitado que el análisis sintáctico típico, y que el espacio de los nombres de los productos es más jerárquico: la etiqueta de resolution
solo se aplica a ciertos tipos de productos. No estoy muy familiarizado con esa literatura; podría haber algunas ideas que podrías usar.
Use un gran conjunto de ejemplos de entrenamiento. Para cada par posible en este ejemplo, configure:
- Analiza la cadena para sus componentes, a saber. compañía, size_desc, display_type, make, etc.
- Encuentra la distancia entre los mismos componentes entre las dos cadenas de un par.
- Crea una tupla de números que representan la distancia entre los componentes.
- Etiquete la tupla como idéntica / no idéntica en función de las cuerdas del par como parte del conjunto de entrenamiento.
- Alimenta las tuplas y entrena un clasificador binario (SVM).
Ahora, cuando obtiene un par de cadenas para las cuales desea decidir si son iguales o no, extraiga las características como lo hizo en el conjunto de entrenamiento y cree la tupla de números para la distancia entre los diversos componentes de la cadena. Alimenta la tupla al SVM entrenado y clasifica si son iguales o no.
La ventaja de utilizar un enfoque de aprendizaje como este es que no tiene que seguir modificando las reglas una y otra vez, y también el sistema aprende las diferencias entre un gran par de productos que son iguales y diferentes.
Puede usar el paquete LibSVM en WEKA para hacer esto.