Codificación de características en Neptune ML - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Codificación de características en Neptune ML

Los valores de las propiedades están disponibles en diferentes formatos y tipos de datos. Para lograr un buen rendimiento en el machine learning, es fundamental convertir esos valores en codificaciones numéricas conocidas como características.

Neptune ML realiza la extracción y codificación de características como parte de los pasos de procesamiento y exportación de datos mediante técnicas de codificación de características que se describen aquí.

nota

Si tiene previsto implementar su propia codificación de características en una implementación de modelo personalizado, puede deshabilitar la codificación automática de características en la etapa de preprocesamiento de datos. Para ello, seleccione none como tipo de codificación de características. No se produce ninguna codificación de características en esa propiedad de nodo o borde y, en su lugar, los valores sin procesar de las propiedades se analizan y guardan en un diccionario. El preprocesamiento de datos sigue creando el gráfico DGL a partir del conjunto de datos exportado, pero este gráfico creado no cuanta con las características preprocesadas para el entrenamiento.

Debe utilizar esta opción únicamente si tiene previsto realizar su propia codificación personalizada de características como parte del entrenamiento con modelos personalizados. Para obtener más información, consulte Modelos personalizados de Neptune ML.

Características categóricas de Neptune ML

Una propiedad que puede tomar uno o varios valores distintos de una lista fija de valores posibles es una característica categórica. En Neptune ML, las características categóricas se codifican mediante la codificación one-hot. En el siguiente ejemplo se muestra cómo el nombre de propiedad de distintos alimentos se codifica mediante la codificación one-hot según su categoría:

Food Veg. Meat Fruit Encoding --------- ---- ---- ----- -------- Apple 0 0 1 001 Chicken 0 1 0 010 Broccoli 1 0 0 100
nota

El número máximo de categorías de cualquier característica categórica es de 100. Si una propiedad tiene más de 100 categorías de valor, solo las 99 más comunes se ubican en categorías distintas y el resto se coloca en una categoría especial denominada OTHER.

Características numéricas de Neptune ML

Cualquier propiedad cuyos valores sean números reales se puede codificar como una característica numérica en Neptune ML. Las características numéricas se codifican mediante números de coma flotante.

Puede especificar un método de normalización de datos para usarlo al codificar características numéricas, como, por ejemplo: "norm": "normalization technique". Se admiten las siguientes técnicas de normalización:

  • “none”: no normaliza los valores numéricos durante la codificación.

  • “min-max”: normaliza cada valor restándole el valor mínimo y dividiéndolo por la diferencia entre el valor máximo y el mínimo.

  • “standard”: normaliza cada valor dividiéndolo entre la suma de todos los valores.

Características numéricas por bucket de Neptune ML

En lugar de representar una propiedad numérica con números sin procesar, puede condensar los valores numéricos en categorías. Por ejemplo, puede dividir las edades de las personas en categorías, como niños (0-20), adultos jóvenes (20-40), personas de mediana edad (40-60) y personas mayores (a partir de los 60 años). Al usar estos buckets numéricos, estaría transformando una propiedad numérica en una especie de característica categórica.

En Neptune ML, para que una propiedad numérica se codifique como una característica numérica por bucket, debe proporcionar dos cosas:

  • Un rango numérico con el formato "range": [a, b] , donde a y b son números enteros.

  • Un recuento de buckets con el formato "bucket_cnt": c , donde c es el número de buckets, también un número entero.

Neptune ML calcula el tamaño de cada bucket como  ( b - a ) / c y codifica cada valor numérico como el número del bucket en el que se encuentre. Cualquier valor inferior a a se considera que pertenece al primer bucket y cualquier valor superior a b se considera que pertenece al último bucket.

Si lo desea, también puede hacer que los valores numéricos se clasifiquen en más de un bucket. Para ello, debe especificar un tamaño de ventana deslizante, como, por ejemplo: "slide_window_size": s , donde s es un número. A continuación, Neptune ML transforma cada valor numérico v de la propiedad en un rango de v - s/2 a v + s/2 y asigna el valor v a cada bucket que cubre el rango.

Por último, si lo desea, también puede proporcionar una forma de rellenar los valores que faltan para las características numéricas y las características numéricas por buckets. Para ello, utilice "imputer": "imputation technique ", donde la técnica de imputación es una de las siguientes: "mean", "median" o "most-frequent". Si no se especifica un parámetro de imputación, esto puede provocar que el procesamiento se detenga.

Codificación de características de texto en Neptune ML

En el caso de textos de formato libre, Neptune ML puede utilizar varios modelos diferentes para convertir la secuencia de tokens de una cadena de valor de propiedad en un vector de valor real de tamaño fijo:

  • text_fasttext: utiliza la codificación fastText. Esta es la codificación recomendada para las características que utilizan solo uno de los cinco idiomas que admite FastText.

  • text_sbert: utiliza los modelos de codificación Sentence BERT (SBERT). Esta es la codificación recomendada para el texto que no admite text_fasttext.

  • text_word2vec: utiliza los algoritmos Word2Vec publicados originalmente por Google para codificar texto. Word2Vec solo admite inglés.

  • text_tfidf: utiliza un vectorizador de frecuencia de términos - frecuencia inversa de documentos (TF-IDF) para codificar texto. La codificación TF-IDF admite características estadísticas que las demás codificaciones no admiten.

Codificación fastText de valores de propiedades de texto en Neptune ML

Neptune ML puede utilizar los modelos de fastText para convertir valores de propiedades de texto en vectores de valores reales de tamaño fijo. Este es el método de codificación recomendado para los valores de propiedades de texto en cualquiera de los cinco idiomas que admite FastText:

  • en (inglés)

  • zh (chino)

  • hi (hindi)

  • es (español)

  • fr (francés)

Tenga en cuenta que fastText no puede procesar frases que incluyan palabras en más de un idioma.

Si lo desea, el método text_fasttext puede utilizar un campo max_length que especifique el número máximo de tokens del valor de una propiedad de texto que se codificará, tras el cual se truncará la cadena. Esto puede mejorar el rendimiento cuando los valores de las propiedades del texto incluyen cadenas largas, ya que si no se especifica max_length, fastText codifica todos los tokens independientemente de la longitud de la cadena.

En este ejemplo se especifica que los títulos de películas en francés se codifican mediante fastText:

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_fasttext"], "language": "fr", "max_length": 1024 } ] }

Codificación de frases BERT (SBERT) de características de texto en Neptune ML

Neptune ML puede convertir la secuencia de tokens de un valor de propiedad de cadena en un vector de valor real de tamaño fijo mediante los modelos Sentence BERT (SBERT). Neptune admite dos métodos SBERT: text_sbert128, que es el predeterminado si solo se especifica text_sbert y text_sbert512. La diferencia entre ambos es la longitud máxima de una cadena de valores de propiedad de texto que se codifica. La codificación text_sbert128 trunca las cadenas de texto después de codificar 128 tokens, mientras que text_sbert512 trunca las cadenas de texto después de codificar 512 tokens. Como resultado, text_sbert512 requiere más tiempo de procesamiento que text_sbert128. Ambos métodos son más lentos que text_fasttext.

La codificación SBERT es multilingüe, por lo que no es necesario especificar un idioma para el texto del valor de propiedad que se va a codificar. SBERT admite muchos idiomas y puede codificar una frase que incluya más de un idioma. Si va a codificar valores de propiedades que incluyan texto en uno o varios idiomas que fastText no admite, el método de codificación recomendado es SBERT.

En el siguiente ejemplo se especifica que los títulos de las películas se codifican como SBERT hasta un máximo de 128 tokens:

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_sbert128"] } ] }

Codificación Word2Vec de características de texto en Neptune ML

Neptune ML puede codificar valores de propiedades de cadenas como una característica de Word2Vec (Google publicó originalmente los algoritmos de Word2Vec). El método text_word2vec codifica los tokens de una cadena como un vector denso mediante uno de los modelos entrenados de spaCy. Esto solo es compatible con el idioma inglés (mediante el modelo en_core_web_lg).

En el siguiente ejemplo se especifica que los títulos de las películas se codifican con Word2Vec:

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_word2vec"], "language": "en_core_web_lg" } ] }

Tenga en cuenta que el campo de idioma es opcional, ya que el modelo en_core_web_lg en inglés es el único que admite Neptune.

Codificación TF-IDF de características de texto en Neptune ML

Neptune ML puede codificar valores de propiedades de texto como características text_tfidf. Esta codificación convierte la secuencia de palabras del texto en un vector numérico mediante un vectorizador de frecuencia de términos - frecuencia inversa de documentos (TF-IDF), seguido de una operación de reducción de la dimensionalidad.

TF-IDF (frecuencia de términos - frecuencia inversa de documentos) es un valor numérico destinado a medir la importancia de una palabra en un conjunto de documentos. Se calcula dividiendo el número de veces que aparece una palabra en un determinado valor de propiedad entre el número total de dichos valores de propiedad en los que aparece.

Por ejemplo, si la palabra “kiss” aparece dos veces en el título de una película (por ejemplo, “kiss kiss bang bang”) y “kiss” aparece en el título de cuatro películas en total, el valor TF-IDF de “kiss” en el título “kiss kiss bang bang” sería 2 / 4 .

El vector que se crea inicialmente tiene dimensiones d, donde d es el número de términos únicos en todos los valores de propiedad de ese tipo. La operación de reducción de dimensionalidad utiliza una proyección dispersa aleatoria para reducir ese número a un máximo de 100. A continuación, se genera el vocabulario de un gráfico mediante la combinación de todas sus características text_tfidf.

El vectorizador de TF-IDF se puede controlar de varias maneras:

  • max_features: con el parámetro max_features, puede limitar el número de términos de las características text_tfidf a los más comunes. Por ejemplo, si se establece max_features en 100, solo se incluyen los 100 términos más utilizados. El valor predeterminado de max_features si no se establece de forma explícita es 5000.

  • min_df: con el parámetro min_df, puede limitar el número de términos de las características text_tfidf a aquellos que tengan al menos una determinada frecuencia de documentos. Por ejemplo, si se establece min_df en 5, solo se utilizarán los términos que aparezcan en al menos 5 valores de propiedad diferentes. El valor predeterminado de min_df si no se establece de forma explícita es 2.

  • ngram_range: el parámetro ngram_range determina qué combinaciones de palabras se consideran términos. Por ejemplo, si ngram_range se establece en [2, 4], los seis términos siguientes aparecerían en el título “kiss kiss bang bang”:

    • Términos de dos palabras: “kiss kiss”, “kiss bang” y “bang bang”.

    • Términos de tres palabras: “kiss kiss bang” y “kiss bang bang”.

    • Términos de cuatro palabras: “kiss kiss bang bang”.

    El ajuste predeterminado de ngram_range es [1, 1].

Características de fecha y hora de Neptune ML

Neptune ML puede convertir partes de los valores de las propiedades datetime en características categóricas mediante la codificación de matrices one-hot. Utilice el parámetro datetime_parts para especificar una o varias de las siguientes partes para codificar: ["year", "month", "weekday", "hour"]. Si no se configura datetime_parts, las cuatro partes se codificarán de forma predeterminada.

Por ejemplo, si el rango de valores de fecha y hora abarca los años 2010 a 2012, las cuatro partes de la entrada de fecha y hora 2011-04-22 01:16:34 son las siguientes:

  • year[0, 1, 0].

    Como solo hay tres años en el intervalo (2010, 2011 y 2012), la matriz one-hot tiene tres entradas, una para cada año.

  • month[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0].

    En este caso, la matriz one-hot tiene una entrada para cada mes del año.

  • weekday[0, 0, 0, 0, 1, 0, 0].

    La norma ISO 8601 establece que el lunes es el primer día de la semana y, dado que el 22 de abril de 2011 era viernes, la correspondiente matriz one-hot de día de la semana ocupa la quinta posición.

  • hour[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].

    La hora 1 de la madrugada se establece en una matriz one-hot de 24 miembros.

El día del mes, el minuto y el segundo no están codificados de forma categórica.

Si el rango total de datetime en cuestión solo incluye fechas de un año, no se codifica ninguna matriz de year.

Puede especificar una estrategia de imputación para rellenar los valores de datetime que faltan, mediante el parámetro imputer y una de las estrategias disponibles para las características numéricas.

Codificación automática de características en Neptune ML

En lugar de especificar manualmente los métodos de codificación de características que se van a utilizar para las propiedades del gráfico, puede configurar auto como un método de codificación de características. A continuación, Neptune ML intenta inferir la mejor codificación de características para cada propiedad en función del tipo de datos subyacente.

Estas son algunas de las heurísticas que Neptune ML utiliza para seleccionar las codificaciones de características adecuadas:

  • Si la propiedad solo tiene valores numéricos y se puede convertir en tipos de datos numéricos, Neptune ML suele codificarla como un valor numérico. Sin embargo, si el número de valores únicos de la propiedad es inferior al 10 % del número total de valores y la cardinalidad de esos valores únicos es inferior a 100, Neptune ML utiliza una codificación categórica.

  • Si los valores de las propiedades se pueden convertir en un tipo datetime, Neptune ML los codificará como una característica datetime.

  • Si los valores de las propiedades se pueden convertir en valores booleanos (1/0 o True/False), Neptune ML utilizará la codificación por categorías.

  • Si la propiedad es una cadena con más del 10 % de sus valores únicos y el número medio de tokens por valor es mayor o igual a 3, Neptune ML inferirá que el tipo de propiedad sea texto y detectará automáticamente el idioma que se está utilizando. Si el idioma detectado es uno de los que admite fastText, es decir, inglés, chino, hindi, español y francés, Neptune ML utilizará text_fasttext para codificar el texto. De lo contrario, Neptune ML utilizará text_sbert.

  • Si la propiedad es una cadena no clasificada como característica de texto, Neptune ML presupone que se trata de una característica categórica y utiliza la codificación por categorías.

  • Si cada nodo tiene su propio valor único para una propiedad que se infiere que es una característica de categoría, Neptune ML eliminará la propiedad del gráfico de entrenamiento porque probablemente sea un ID que no sería informativo para el entrenamiento.

  • Si se sabe que la propiedad incluye separadores válidos de Neptune, como puntos y comas (“;”), Neptune ML solo puede tratar la propiedad como MultiNumerical o MultiCategorical.

    • Neptune ML primero intenta codificar los valores como características numéricas. Si esto se ejecuta correctamente, Neptune ML utilizará la codificación numérica para crear características vectoriales numéricas.

    • De lo contrario, Neptune ML codificará los valores como multicategóricos.

  • Si Neptune ML no puede inferir el tipo de datos de los valores de una propiedad, Neptune ML eliminará la propiedad del gráfico de entrenamiento.