No tengo ningún conocimiento interno de cómo se hace, pero así es como lo construiría. Lo trataría como un motor de búsqueda, recuperando coincidencias de la misma manera que lo hacen Google o Bing cuando ingresas una imagen en su barra de búsqueda.
Obtén datos de entrenamiento
- Construye una biblioteca con un montón de formas diferentes que la gente quiera dibujar.
- Haga que la gente intente dibujar esas cosas usando una sola curva. Cada intento es dibujar uno en particular. Esto nos da datos de entrenamiento etiquetados.
Representar dibujos
- ¿El aprendizaje automático es un subconjunto de la ciencia de datos?
- Cómo calcular un puntaje usando la prueba de relación de distancia al vecino más cercano en MATLAB
- ¿Podemos obtener un intervalo de confianza para la salida de un clasificador en el aprendizaje supervisado?
- ¿Debería un científico de datos novato centrarse en conceptos matemáticos o herramientas?
- Cómo detectar objetos superpuestos casi circulares en MATLAB
Hay muchas formas de representar una curva y no puedo decir con certeza lo que hicieron, pero aquí hay algunas posibilidades.
- Recorta un cuadro alrededor de la curva y guárdalo.
- Esto se procesaría con una red neuronal convolucional.
- No recomendaría este enfoque para un proyecto personal, ya que es mucho más computacionalmente intensivo que los demás. Sin embargo, para Google no es un problema demasiado grande, por lo que es probable que lo que estén usando.
- Codifíquelo como una secuencia de puntos
- Procesado por una red neuronal recurrente, muy probablemente.
- Consideraría seriamente este enfoque.
- Codifíquelo como una secuencia de ángulos entre puntos
- También procesado por una red neuronal recurrente
- Este es el enfoque con el que probablemente terminaría yendo.
- Tenga en cuenta que esta codificación es, naturalmente, invariante de traducción, pero no invariante de rotación.
Codificar dibujos
Ahora necesitamos transformar nuestras representaciones de dibujos en un espacio en el que puedan compararse fácilmente con nuestra base de datos de formas. Para hacer esto, construimos una red de Manhattan.
Una red de Manhattan es esencialmente dos subredes separadas con dos entradas diferentes cuyas salidas son de la misma dimensión. La función de pérdida es la norma de la distancia entre sus salidas si se supone que las entradas son las mismas. Entrena las subredes para codificar las entradas en un espacio donde una métrica de similitud estándar puede compararlas, haciendo que las comparaciones sean mucho más eficientes desde el punto de vista computacional.
Se llama red de Manhattan porque tradicionalmente usa la métrica de Manhattan (distancia L1) para medir la similitud, pero puede usar la métrica que desee.
- Entrene a la red de Manhattan para que coincida con los datos de entrenamiento con las formas apropiadas en su base de datos.
- Mantenga la codificación de subred de cada forma en su base de datos. Ese es tu índice de búsqueda.
Manejando un dibujo
Ahora el usuario ha dibujado algo. ¿Cómo se determina qué formas sugerir?
- Ejecute el dibujo del usuario a través de la subred para obtener su codificación.
- Compare esa codificación con cada una de las codificaciones de su base de datos de formas y devuelva la [matemática] n [/ matemática] más cercana, clasificada en orden creciente de distancia.