【AI大模型应用开发】【项目实战】12.基于ChatGlm-6b实现新媒体行业文本评论分类与信息抽取系统 1. 项目简介1.1项目背景文本分类概念:将一段或多段文本按照其内容或主题特征划分到不同的类别或标签中的过程在实际工作中文本分类应用非常广泛, 比如:新闻分类、简历分类、 邮件分类、办公文档分类、区域分类等诸多方面,还能够实现文本过滤,从大量文本中快速识别和过滤出符合特殊要求的信息信息抽取概念:信息抽取,是从无结构或半结构化的自然文本中识别出实体、关系、事件等事实描述, 以结构化的形式存储和利用的技术 以“小明和小秦是很好的朋友,他们都属于云南人,小明住在大理,小秦住在丽江。 ”为例,可以得到如:小明,朋友,小秦 和小秦,住在,丽江和小明,住在,大理等三元组信息随着互联网技术的快速发展,新媒体行业已经成为信息传播的主要平台之一,在这个信息爆炸的时代,人们通过社交媒体、新闻客户端、博客等多种形式获取信息,然而,随着信息量的不断增加,如何高效地管理和利用这些信息成为了亟待解决的问题本项目基于部分“新媒体行业 ”数据为背景,通过文本评论的分类和信息抽取,帮助新媒体行业从海量的信息中快速准确地获取有用的信息,并进行合理的分类和管理。这不仅有助于新媒体平台提升用户体验,还能够为信息生产者提供更精准的数据分析和决策支持1.2技术选型基于ChatGLM-6B模型+LoRA微调方法,实现文本分类及信息抽取的联合任务的开发1.3ChatGLM-6B回顾ChatGLM-6B 是清华大学提出的一个开源、支持中英双语的对话语言模型,基于General Language Model (GLM) 架构, 具有62 亿参数,该模型使用了和 ChatGPT 相似的技术,经过约1T 标识符的中英双语训练(中英文比例为 1:1),辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的ChatGLM-6B 已经能生成相当符合人类偏好的回答( 目前中文支持较好)。 相比原始Decoder模块,模型结构有如下改动点:1.4LoRA 原理回顾1.5环境准备本次环境依赖于趋动云https://platform.virtaicloud.com/算力操作系统 : CentOS 7CPUs : 8 core(s), 内存:48GGPUs : 1卡, A800, 80GB GPUsPython : 3.9Pytorh : 1.11.0Cuda : 11.3.1价格:13.58元/小时环境准备:1. 创建一个虚拟环境,可以把 `llm_env` 修改为任意想要新建的环境名称: conda create -n llm_env python=3.92. 激活新建虚拟环境并安装响应的依赖包:conda activate llm_envpip install -r requirements.txt(requirements.txt文件内容如下所示)protobuf=3.19.5,3.20.1transformers=4.27.1icetkcpm_kernelsstreamlit==1.17.0matplotlibdatasets==2.10.1accelerate==0.17.1packaging=20.0psutilpyyamlpeft1.6项目整体结构ChatGlm-6b模型下载地址:https://pan.baidu.com/s/1-Vn06bkUI8HKPPMGlMd1aQ?pwd=mwu6 提取码:mwu62. 数据介绍数据存放位置:/ptune_chatglm/datajsonl文档:data文件夹里面包含:训练数据集: mixed_dev_dataset.jsonl,共计包含:902条样本验证数据集: mixed_train_dataset.jsonl,共计包含:122条样本数据示例(信息抽取):{"context" : "Instruction : 你现在是一个很厉害的阅读理解器,严格按照人 类指令进行回答。\nInput : 帮我提取出下面句子中所有的SPO,并输出为json, 不要做多余的回复:\n\n张国荣主演电影大片《霸王别姬》荣获法国戛纳国际 电影节最高奖项金棕榈大奖,成为首部获此殊荣的中国影片。\nAnswer : ", "target" : "```json\n[{\"predicate\" : \"主演\", \"object_type\" : \"人 物\", \"subject_type\" : \"影视作品\", \"object\" : \"张国荣\", \"subject\" : \"霸王别姬\"}]\n```"}数据格式:字典样式;context内容代表:原始输入文本(prompt) ;target指向: 目标文本数据示例(文本评论分类):{"context" : "Instruction : 你现在是一个很厉害的阅读理解器,严格按照人 类指令进行回答。\nInput : 下面句子中的主语是什么类别,输出成列表形式。 \n\n朋友说京东水果新鲜,我就买了,真的很失望,不新鲜,下次不会再买了 \nAnswer : ", "target" : " [\"水果\"]"}数据格式:字典样式;context内容代表:原始输入文本(prompt) ;target指向: 目标文本3. 数据处理目的:将中文文本数据处理成模型能够识别的张量(数字)形式数据处理脚本:/ptune_chatglm/data_handle/data_preprocess.py构建dataloader迭代器脚本:/ptune_chatglm/data_handle/data_loader.pydata_preprocess.pyimport json # 返回的字符串包含有关异常的详细信息 import traceback import numpy as np # tqdm进度条 from tqdm import tqdm from datasets import load_dataset from transformers import AutoTokenizer from functools import partial from glm_config import * def convert_example_chatglm( examples: dict, tokenizer, # 分词器 max_source_seq_len: int, max_target_seq_len: int, ): """ 将样本数据转换为Prompt-tuning模型接收的输入数据。 Args: examples (dict): 训练数据样本, e.g. - { "text": [