[Registro de aprendizaje de DataWhale 15-04] Preguntas introductorias del concurso de clasificación de texto de noticias de PNL de base cero-04 Clasificación de texto basada en aprendizaje profundo

4 Clasificación de texto basada en aprendizaje profundo

4.1 Objetivos de aprendizaje

  1. Aprenda el uso y los principios básicos de FastText
  2. Aprenda a usar el conjunto de validación para el ajuste de parámetros

4.2 Representación de texto Parte 2

4.2.1 Defectos del método de representación de texto existente

En la sección anterior, presentamos varios métodos de representación de texto:

  1. Uno caliente
  2. Bolsa de palabras
  3. N-gramo
  4. TF-IDF
    también llevó a cabo la práctica correspondiente a través de sklean. Sin embargo, los métodos anteriores tienen más o menos ciertos problemas: el vector convertido tiene una alta dimensionalidad y requiere un largo tiempo de entrenamiento; no se considera la relación entre palabras, pero se realizan estadísticas.

A diferencia de estos métodos de representación, el aprendizaje profundo también se puede utilizar para la representación de texto y también se puede asignar a un espacio de baja dimensión. Entre los ejemplos más típicos se encuentran: FastText, Word2Vec y Bert. En este capítulo presentamos FastText, y luego presentaremos Word2Vec y Bert.

4.2.2 FastText

FastText es un método típico de representación de vectores de palabras de aprendizaje profundo. Es muy sencillo asignar las palabras al espacio denso a través de la capa de incrustación y luego promediar todas las palabras de la oración en el espacio de incrustación para completar la operación de clasificación.
Entonces FastText es una red neuronal de tres capas: capa de entrada, capa oculta y capa de salida.
Inserte la descripción de la imagen aquí
La siguiente figura muestra la estructura de red FastText implementada usando Keras: Inserte la descripción de la imagen aquí
FastText es superior a TF-IDF en tareas de clasificación de texto:

  1. FastText utiliza el vector de documento obtenido al incrustar la palabra incrustación para clasificar oraciones similares en una categoría.
  2. La dimensionalidad del espacio de incrustación aprendida por FastText es relativamente baja y puede entrenarse rápidamente.
    Si desea un aprendizaje profundo, consulte el documento:
    Bolsa de trucos para una clasificación de texto eficiente

4.3 Clasificación de texto basada en FastText

FastText puede entrenar rápidamente en la CPU. El método de mejores prácticas es la versión oficial de código abierto: https://github.com/facebookresearch/fastText/tree/master/python

  • pip instalar
    pip instalar fasttext
  • Instalación de origen
    git clone https://github.com/facebookresearch/fastText.git
    cd fastText
    sudo pip install.

Modelo de clasificación

import pandas as pd
from sklearn.metrics import f1_score

# 转换为FastText需要的格式
train_df = pd.read_csv('../input/train_set.csv', sep='\t', nrows=15000)
train_df['label_ft'] = '__label__' + train_df['label'].astype(str)
train_df[['text','label_ft']].iloc[:-5000].to_csv('train.csv', index=None, header=None, sep='\t')

import fasttext
model = fasttext.train_supervised('train.csv', lr=1.0, wordNgrams=2,
verbose=2, minCount=1, epoch=25, loss="hs")

val_pred = [model.predict(x)[0][0].split('__')[-1] for x in train_df.iloc[-5000:]['text']]
print(f1_score(train_df['label'].values[-5000:].astype(str), val_pred, average='macro'))
# 0.82

En este momento, el volumen de datos es relativamente pequeño y la puntuación es 0,82. Cuando el número de conjuntos de entrenamiento se incrementa continuamente, la precisión de FastText seguirá aumentando en 5w muestras de entrenamiento, y la puntuación del conjunto de verificación puede alcanzar aproximadamente 0,89-0,90 .

4.4 Cómo utilizar el conjunto de validación para ajustar parámetros

Cuando se utiliza TF-IDF y FastText, hay algunos parámetros del modelo que deben seleccionarse. Estos parámetros afectarán la precisión del modelo hasta cierto punto, entonces, ¿cómo elegir estos parámetros?

  • Al leer el documento, debemos averiguar el significado general de estos parámetros, lo que aumentará la complejidad del modelo.
  • Al verificar la precisión del modelo en el conjunto de validación, averigüe si el modelo se ajusta demasiado o no.
    Inserte la descripción de la imagen aquí
    Aquí usamos una validación cruzada de 10 veces, y cada pliegue usa 9/10 de los datos para el entrenamiento, y el 1/10 restante se utiliza como conjunto de validación para probar el efecto del modelo. Cabe señalar aquí que la división de cada pliegue debe garantizar que la distribución de la etiqueta sea coherente con la distribución de todo el conjunto de datos.
label2id = {
    
    }
for i in range(total):
label = str(all_labels[i])
if label not in label2id:
label2id[label] = [i]
else:
label2id[label].append(i)

A través de la división de 10 veces, hemos obtenido un total de 10 datos con la misma distribución, con índices de 0 a 9, cada vez utilizando un dato como conjunto de validación y los datos restantes como conjunto de entrenamiento, obtuvimos 10 tipos de divisiones de todos los datos. Sin pérdida de generalidad, elegimos el último para completar los experimentos restantes, es decir, el que tiene el índice 9 como conjunto de validación y el que tiene los índices 1-8 como conjunto de entrenamiento, y luego ajustamos los hiperparámetros en función de los resultados. del conjunto de validación para mejorar el rendimiento del modelo.

4.5 Resumen de este capítulo

Este capítulo presenta el principio y el uso básico de FastText y lleva a cabo la práctica correspondiente. Luego introduce la división del conjunto de datos a través de una validación cruzada de 10 veces.

4.6 Tarea

1. Lea el documento FastText e intente modificar los parámetros para obtener una mejor puntuación.


-Cargar word vector model model = fasttext.load_model ("model.bin", encoding = "utf-8")
-Lista de métodos del modelo:
print model.model_name '' 'nombre del modelo' ''
print model.words '' ' Lista de vocabulario `` '
print model.dim' '' word vector dimension '' '
print model.ws' '' tamaño de la ventana de contexto '' '
print model.epoch' '' número de épocas '' '
print model.min_count' ' 'frecuencia mínima de palabras' '
modelo de impresión.palabras_ngramas' '' configuración de n-gramas '' '
modelo de impresión.nombre_pérdida' '' nombre de función de pérdida
'' 'modelo de impresión.minn' '' longitud mínima de caracteres del modelo '' '
modelo de impresión .maxn '' 'Longitud máxima de caracteres del modelo' '' modelo de
impresión.lr_update_rate '' 'Tasa de actualización de la tasa de aprendizaje' ''
modelo de impresión.t '' 'Umbral de muestreo
' '' codificación del modelo de impresión '' 'Codificación del modelo' ''
modelo de impresión [palabra) '' 'vector de palabra de palabra' ''

Cuando el número de conjuntos de validación llega a 20 w, la puntuación es 0,909.

2. Ajuste los hiperparámetros según los resultados del conjunto de validación para mejorar el rendimiento del modelo.

También podemos cambiar el número de épocas de entrenamiento , la tasa de aprendizaje lr (tasa de aprendizaje) y el uso de Gram de n-Word ( -wordNgrams ) para mejorar la precisión

Después de simplemente ajustar los parámetros, el resultado es 0,914.
Inserte la descripción de la imagen aquí

De hecho, el softmax jerárquico es ligeramente peor que el softmax completo. Esto se debe a que softmax jerárquico es una aproximación de softmax completo. Softmax jerárquico nos permite construir modelos de manera eficiente en grandes conjuntos de datos, pero generalmente a costa de unos pocos puntos porcentuales de pérdida de precisión. Debido a problemas de tiempo y equipo, la demostración no se realizará aquí.

Supongo que te gusta

Origin blog.csdn.net/qq_40463117/article/details/107611117
Recomendado
Clasificación