Combate ChatGLM: aprendizaje profundo del middleware Langchain-ChatGLM

Sobre el autor: Zhao Hui, un experto en tecnología de cadenas de bloques, domina los principios subyacentes de varias cadenas de alianzas y cadenas públicas, y tiene una gran experiencia en el desarrollo de aplicaciones de cadenas de bloques.

En el proceso de creación, implementación y prueba de ChatGLM, tengo una comprensión preliminar de las capacidades de ChatGLM y Langchain. Aunque estas herramientas tienen un cierto grado de versatilidad, debido al efecto insatisfactorio de la base de conocimiento local, todavía siento la necesidad de personalizar mis propios modelos y aplicaciones. Por ello, decidí aprender a programar en base a Langchain y modelos, a partir de ahora me centraré en aprender los conceptos básicos de Langchain y codificación, para prepararme para la posterior creación de mi propio Jarvis.

En la actualidad, los tutoriales en chino basados ​​en langchain todavía están relativamente dispersos. Aquí hay dos tutoriales de sitios web https://www.langchain.com y https://python.langchain.com.cn/docs/.

El primer paso para aprender langchain es cargar el modelo. Los ejemplos dados en el sitio web oficial están todos basados ​​en openai, pero dado que openai es un servicio en el extranjero, existen ciertas restricciones en su uso en el país, por lo que finalmente elegimos ChatGLM.

El sitio web oficial de Langchain no tiene un tutorial sobre ChatGLM, así que busque un ejemplo similar de Baidu o Github.Aquí podemos consultar el código fuente de langchain-ChatGLM construido la última vez para comenzar y analizar cómo cargar nuestro propio prototipo.

Análisis de código fuente

Use pycharm para abrir el proyecto langchain-ChatGLM, recuerde que el archivo que configuró el modelo anterior es un archivo, busque configs/model_config.pysegún variables y encuentre un código relativamente cercano en , el fragmento de código es el siguiente:llm_model_dictmodels/loader/loader.py

tokenizer = AutoTokenizer.from_pretrained(self.model_name)

Y AutoTokenizer está en transformadores, consulte las dependencias a las que se hace referencia en el encabezado del código:

from transformers import (AutoConfig, AutoModel, AutoModelForCausalLM, AutoTokenizer, LlamaTokenizer)

cita abrazando la cara

Si encuentra algo parecido, debe descubrir cómo escribir su propio código de carga del modelo. No es realista copiar directamente el código en el proyecto, la cantidad de código es grande y las referencias de otros módulos son complicadas, lo que no es adecuado para que los principiantes entiendan y aprendan, por lo que debe comenzar desde otros lugares. Aquí creo que los transformadores provienen de huggingface, y chatglm-6b-32k también se descargó antes de huggingface. Entonces debería poder encontrar pistas de huggingface, abrir la página web huggingface, buscar chatglm-6b-32k y obtener la siguiente página:

bc2fe6daed3f73a88d99149f3878a0c1.png

Efectivamente, encontré el código para cargar y usar el modelo correspondiente, modifiqué ligeramente el código fuente y lo guardé en chatglm.py, cité el modelo descargado localmente y obtuve el código de la siguiente manera:

from transformers import AutoTokenizer, AutoModel
model_path = "/root/prj/ChatGLM-6B/THUDM/chatglm2-6b-32k"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
while True:
        test_text = input("Kun Peng:")
        if test_text == "exit":
                break;
        response, history = model.chat(tokenizer, test_text, history=history)
        print("AI: " + response)

El efecto de ejecución es el siguiente:

b4480efbca7e36365e9f12987c330561.png

interpretación del código

Crear tokenizador

tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

El código anterior es para crear un tokenizador basado en el modelo,

  1. El primer parámetro se puede cargar en múltiples formas.

  • Una cadena, el identificador de modelo para el tokenizador predefinido, alojado en el repositorio de modelos en huggingface.co. Los ID de modelo válidos pueden estar en el nivel raíz, como bert-base-uncased, o bajo un espacio de nombres del usuario o el nombre de la organización, como THUDM/chatglm2-6b-32k.

  • Una ruta a un directorio que contiene archivos de vocabulario requeridos por el tokenizador, como un directorio guardado con el método save_pretrained(), por ejemplo: /root/prj/ChatGLM-6B/THUDM/chatglm2-6b-32k.

  • Ruta o URL a un solo archivo de vocabulario guardado solo si el tokenizador requiere solo un archivo de vocabulario (como Bert o XLNet), por ejemplo: ./my_model_directory/vocab.txt. (no aplicable a todas las clases derivadas)

  1. Si el segundo parámetro trust_remote_code permite que los modelos personalizados definidos en Hub se utilicen en sus propios archivos de modelado. Los repositorios en los que confía y que han leído el código establecen esta opción en Verdadero, ya que ejecutará el código que existe en el concentrador en su máquina local.

modelo instanciado

model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()

El código anterior es para inicializar el modelo, AutoModel es una clase de modelo general, cuando se crea usando el método de clase from_pretrained() o el método de clase from_config(), se instanciará como una de las clases de modelo básicas en la biblioteca.

  • El primer parámetro admite una ruta o URL a un archivo de punto de control de índice de TensorFlow (por ejemplo, ./tf_model/model.ckpt.index), además de marcas de modelos y rutas de modelos. En este caso, from_tf debe establecerse en True y debe proporcionarse un objeto de configuración como parámetro de configuración. Ruta de carga lenta después de convertir los puntos de control de TensorFlow en modelos PyTorch usando el script de conversión proporcionado y cargando el modelo PyTorch.

  • El segundo parámetro se analiza igual que AutoTokenizer.from_pretrained.

  • El siguiente .half().cuda() significa convertir el modelo en un modelo de precisión media.

Entrar en modo de evaluación

Los modelos ingresan al modo de evaluación de forma predeterminada usando model.eval() (así, por ejemplo, el módulo de abandono está deshabilitado). Para entrenar un modelo, primero debe volver a establecerse en el modo de entrenamiento usando model.train().

desencadenar diálogo

response, history = model.chat(tokenizer, "你好", history=[])

El código anterior es la declaración para iniciar el diálogo por primera vez, por lo que no hay datos en el historial y la respuesta es la respuesta del modelo. El historial es información histórica del diálogo. Si desea realizar una asociación de contexto, debe completarlo con el resultado devuelto del historial en el siguiente diálogo. El código es el siguiente:

response, history = model.chat(tokenizer, test_text, history=history)

Extensión: modelo de análisis de opinión

Además del modelo de diálogo general del modelo, también hay algunos modelos de clasificación que se pueden implementar con transformadores, como el modelo de análisis de sentimiento. En huggingface, encuentre el modelo de análisis de sentimientos, cárguelo con la canalización de transformadores y luego utilícelo. El código es el siguiente:

from transformers import pipeline
import sys

classifier = pipeline('sentiment-analysis')
while True:
        test_text = input("Please input:")
        if test_text == "exit":
                break;
        res = classifier(test_text)
        print(res)

Los resultados de la ejecución se muestran en la figura a continuación, y se puede ver que los resultados del análisis son bastante precisos. Las tareas de clasificación de sentimientos generalmente ingresan una oración o un párrafo y devuelven los atributos emocionales positivos/negativos del párrafo, que a menudo juegan un papel importante en la evaluación del usuario, la extracción de opiniones y el reconocimiento de intenciones.

a2978521ddf264945a882debec9bbd16.png

En el futuro, continuaremos generando contenido relacionado con el desarrollo y el aprendizaje de ChatGLM, continúe prestando atención.

La cuenta oficial responde " Combate real de Claude ", " Combate real de ChatGPT ", " Combate real de WPSAI ", y obtiene los libros electrónicos correspondientes.

—Lectura ampliada—

Resumen de combate de WPS Office AI, la era de la oficina inteligente ha llegado

ChatGLM en acción: cree su propia base de conocimiento privada basada en LangChain

Resumen práctico de ajuste fino del modelo grande ChatGLM-6B

Resumen práctico del despliegue rápido del modelo grande ChatGLM-6B

Después de entrevistar a decenas de empresas de nivel medio y alto, debes entender estas cosas

Aplicaciones de modelos de IA a gran escala que se están realizando o están a punto de realizarse

Supongo que te gusta

Origin blog.csdn.net/hero272285642/article/details/132200457
Recomendado
Clasificación