Academia China de Ciencias de la profundidad de concordancia de texto simple de utilizar MatchZoo proyecto de código abierto

MatchZoo es un entorno de Python basado en el texto de coincidencia de desarrollo de herramientas TensorFlow de código abierto, por lo que diseñamos una comprensión más intuitiva de la profundidad del texto para que coincida con el modelo, la diferencia de rendimiento es más conveniente para comparar diferentes modelos con mayor rapidez el desarrollo de una nueva profundidad para que coincida con el modelo. Por lo que yo entiendo, MatchZoo idea principal es lograr un modelo de profundidad para la Red gemelo

Similitud de texto coincidente contiene texto, contiene texto, igualando pregunta de examen, aquí, simplemente va a utilizar conjuntos de datos pública MSR explicación cálculo de similitud de Microsoft, me refiero al código por el matchzoo oficial explicación hecho, en todo caso error, se atreve a decir que se mejorarán aún más.

Conjunto de datos Descripción: MSR corta Inglés conjunto de datos de texto es el conjunto estándar de cálculo de similitud de datos, en el que el conjunto de entrenamiento tiene frases 4076, que contiene una similitud 2753, es decir, las frases ejemplo positivas; equipo de prueba tiene 1.725 frases, en donde 1147 contiene frases ejemplo positivo.
Enlace de descarga: https://www.microsoft.com/en-us/download/details.aspx?id=52398&from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fdownloads%2F607d14d9-20cd-47e3 -85bc-a2f65cd28042% 2Fdefault.aspx
si ese problema, he descargado una buena acción con cargo a: https://download.csdn.net/download/weixin_40902563/12047069
ganar puntos no es fácil, si no la integración, puede Whisper complicada por correo, se enviará gratuitamente a usted (siempre que he leído noticias de Kazajstán, cerca de dos días para ver)

conjunto de datos oficial es el formato de un tal: Aquí Insertar imagen Descripción
es TSV archivo, pero con pandas para leerlo, será un poco mal, así que utilicé manera readlines, separadores con \ t para cortar cada línea.
El siguiente código empieza, aunque esto no es mi estilo de escribir código, pero con el fin de dejar claro que cada paso, voy a explicar una sección.
Importar módulos de procesador de datos y definiciones:

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# Author:ChenYuan

import matchzoo as mz
import pandas as pd
import re  # 这个可以不用
from sklearn import preprocessing  # 用于正则化
import numpy as np 
preprocessor = mz.preprocessors.BasicPreprocessor()  # 定义一个数据处理器,有四种处理器,Basic是通用的、基础的数据处理器,可看官方文档,这里不做解说

Formato de los datos de conversión:

data = []
data_type = 'train'
with open('msr_paraphrase_%s.txt' % data_type, 'r', encoding='utf-8')as f:
    for line in f.readlines()[1:]:  # 这个是为了忽略标题
        line = line.strip().split('\t')
        data.append([line[1], line[3], line[2], line[4], line[0]])  # 是为了方便matchzoo的输入格式
data = pd.DataFrame(data)
data.to_csv(train_data_path, header=False, index=False, sep='\t')

Leer datos:

def load_data(data_path):
	df_data = pd.read_csv(data_path, sep='\t', header=None)
	df_data = pd.DataFrame(df_data.values, columns=['id_left', 'text_left', 'id_right', 'text_right', 'label'])
	df_data = mz.pack(df_data)
	reture df_data

train_data = load_data(train_data_path)  # 这里就是上面数据格式转换的训练集和测试集路径
test_data = load_data(test_data_path)

Procesamiento de datos:

train_dev_split = int(len(train_data) * 0.9)  # 验证集占训练数据的0.1
train = train_data[:train_dev_split]
dev = train_data[train_dev_split:]
train_pack_processed = preprocessor.fit_transform(train)  # 其实就是做了一个字符转id操作,所以对于中文文本,不需要分词
dev_pack_processed = preprocessor.transform(dev)  
test_pack_processed = preprocessor.transform(test_data)
train_data_generator = mz.DataGenerator(train_pack_processed, batch_size=32, shuffle=True)  # 训练数据生成器

test_x, test_y = test_pack_processed.unpack()
dev_x, dev_y = dev_pack_processed.unpack()

Definición del modelo:

def build():
    model = mz.models.DUET()  # 同样,DUET网络可看官网的论文,这里不做解释;同样,模型的参数不做解释,官方文档有
    ranking_task = mz.tasks.Ranking(loss=mz.losses.RankCrossEntropyLoss(num_neg=1))  # 定义损失函数,这里采用的是排序交叉熵损失函数,它还有一个分类交叉熵损失函数,看你如何定义你的数据
    model.params['input_shapes'] = preprocessor.context['input_shapes']
    model.params['embedding_input_dim'] = preprocessor.context['vocab_size']  # 如果版本较老,这里需要加1,因为要考虑一个UNK的字符,如果版本较新,这个以更新解决
    model.params['embedding_output_dim'] = 300 
    model.params['task'] = ranking_task
    model.params['optimizer'] = 'adam'
    model.params['padding'] = 'same'
    model.params['lm_filters'] = 32
    model.params['lm_hidden_sizes'] = [32]
    model.params['dm_filters'] = 32
    model.params['dm_kernel_size'] = 3
    model.params['dm_d_mpool'] = 3
    model.params['dm_hidden_sizes'] = [32]
    model.params['activation_func'] = 'relu'
    model.params['dropout_rate'] = 0.32
    model.params['embedding_trainable'] = True
    model.guess_and_fill_missing_params(verbose=0)
    model.params.completed()
    model.build()
    model.backend.summary()
    model.compile()
    return model

Formación:

model = build()
batch_size = 32

evaluate = mz.callbacks.EvaluateAllMetrics(model, x=dev_x, y=dev_y, batch_size=batch_size)
model.fit_generator(train_data_generator, epochs=5, callbacks=[evaluate], workers=5, use_multiprocessing=False)
y_pred = model.predict(test_x)

left_id = test_x['id_left']
right_id = test_x['id_right']
assert (len(left_id) == len(left_id))
assert (len(left_id) == len(y_pred))
assert (len(test_y) == len(y_pred))
Scale = preprocessing.MinMaxScaler(feature_range=(0, 1))  # 对结果做规范化
y_pred = Scale.fit_transform(y_pred)

Por lo tanto, el final del código, el resultado final es una especificación a la puntuación y_pred entre 0-1, la similitud representante izquierda y frases de puntuación frase adecuados porque no matchzoo generado puntuación es mayor que 1 y menor que 0, en términos de similitud , es mayor que un teóricamente imposible, la mayor similitud debe ser un mínimo de menos de 0, por lo que el uso de estandarizada, de modo que el valor de umbral (que puede ser no umbralización directamente puede ser).
Para los datos MSR, indicadores de evaluación F1-macro y la precisión (exactitud), el resultado se convierte en 0 y la necesidad de ir a un conjunto de resultados de la prueba y los requisitos de calificación. Aquí no es dar este código, pero el resto de la evaluación de una serie de problemas operativos, el más difícil de leer los datos y el modelo de formación se ha dado.

Para resumir:

  1. Incrustación incrustación es el uso de capas matchzoo Keras capa a la formación word2id secuencia aleatoria, sino que también proporciona un método para oficial de la palabra modelo de vector de importación su propio pre-entrenado, he intentado muchas veces con modelo chino pre-formados de Wiki, es una menos eficiente, y es el resultado de un pobre, por lo que este no es escribir el código.
  2. ¿Por DUET escritura? En mi máquina, esta eficiencia modelo es relativamente alta, y el efecto es el mejor, incluso si sólo utilizan los parámetros iniciales del modelo oficiales.
  3. No estamos utilizando este conjunto de datos experimentales, que estaba buscando específicamente para este conjunto de datos para escribir un blog, es decir, el código se ha ejecutado a través.
  4. Para los procesadores modelo y los datos DSSM CDSSM, nuestra máquina no se puede ejecutar, por lo que para estos dos modelos, no hay ningún experimento, pero nosotros mismos reproducen el modelo de DSSM y CDSSM.
  5. Aprender más grande tesoro matchzoo No creo que el código estará jugando, y entiendo estos resultados de la red gemelos, y re-propia ahora es el mejor.
  6. Gracias puede ver aquí, gracias apoyar.
Publicado 12 artículos originales · ganado elogios 3 · Vistas 2046

Supongo que te gusta

Origin blog.csdn.net/weixin_40902563/article/details/103663689
Recomendado
Clasificación