2023年高校大数据挑战赛A题中文文本纠错求解全过程文档及程序

2023年高校大数据挑战赛

A题 中文文本纠错

原题再现:

  中文文本纠错的任务主要是针对中文文本中出现的错误进行检测和纠正,属于人工智能自然语言处理的研究子方向。中文文本纠错通常使用的场景有政务公文、裁判文书、新闻出版等,中文文本纠错对于以中文作为母语的使用者更为适用。基于此,本赛题主要选取中文母语者撰写的网络文本为校对评测数据,要求参赛者从拼写错误、语法错误、语病错误等多个方面考察中文文本纠错系统的自然语言理解能力和纠错能力。
  【数据说明及其使用方法】
  1、本次赛题选择网络文本作为纠错数据,要求参赛者从中检测并纠正错误,实现中文文本纠错系统。数据中包含的错误类型有:拼写错误,包括别字和别词;语法错误,包括冗余、缺失、乱序;语病错误,包括语义重复及句式杂糅。
  2、本赛题提供的训练数据及验证数据见“数据集.zip”,训练集规模为10万句,验证集规模为1000句。参赛队伍也可以使用公开数据集及其他开放型数据对模型进行训练。
  3、训练数据使用方法:
  训练数据文件中,每一行为一条训练数据,每一条训练数据为json格式,ID字段为数据ID,source字:段为待纠正文本,target字段为纠正后的文本。训练数据样例:{“ID”: “ID18423310”, “source”: “洛赞曾经看到安妮在她的头发上戴着一条红色缎带,并称这对她来说太“年轻化”,郡钩位骄傲小姐回答说:“我队伍中的人总是年轻”。”,“target”: “洛赞曾经看到安妮在她的头发上戴着一条红色缎带,并称这对她来说太“年轻化”,这位骄傲的小姐回答说:“我的队伍中的人总是年轻”。”}
   4、验证集使用方式:
  具体的输入、输出格式如下:
  输入:输入文件每行包含句子ID及相对应的待校对句子,句子ID及相对应的待校对句子之间用“\t”进行分割。
  输出:输出文件每行包含句子ID及对应的纠错结果。纠错结果中每处错误包含错误位置、错误类型、错误字词及正确字词。每处错误及多处错误间均以英文逗号分隔,文件编码采用utf-8编码。
  输入文件示例:pid=0011-1 关于瑞典时装公司拒绝使用新疆产品的言轮在华引发广泛声讨和抵制浪潮。pid=0011-2 给老百姓包括少数民族群众提供更多的就业机会,一般正常人都都会觉得是件好事。pid=0012-1 第三局比赛俄罗女排的气势被完全压制。pid=0011-4 因为他们自己上历史真的就这么干了上百年,所以现在以己度人;
  输出文件示例,:pid=0011-1, 20, 别字, 轮, 论, pid=0011-2, 28, 冗余, 都, , pid=0012-1, 7, 缺失, , 斯, pid=0011-4, 6, 乱序, 上历史, 历史上,
  【相关评价标准】
  采用字级(Character Level)评价标准,基于整个测试集所有汉字的错误检测或纠正结果确定。错误检测(ErrorDetection)评估的是错误位置的侦测效果,错误纠正(ErrorCorrection)评估的是对应位置错误修正的效果。对于每个维度的评测,统一使用准确率(Precision)、召回率(Recall)和F1作为评价指标。
在这里插入图片描述
  0 基于赛题提供的数据,请自主查阅资料,选择合适的方法完成如下任务:
  任务一:分析数据集“train_large_v2.json”,自主进行数据预处理,选择合适的指标用于中文文本纠错,并说明选择指标的原因。
  任务二:根据赛题的描述,请分析问题,并对比业界主流的解决问题方案,提出你的解决问题的思路,并设计相关模型。
  任务三:使用任务二所构建的模型,对所提供的数据集进行模型训练,并纠正验证集中文本的中文错误。
  任务四:对比分析优化过程中各个模型、训练方案的优劣势,自主选取评价方式和评价指标评估模型的优劣,并总结分析相关内容。
  任务五:探究中文文本中每类错误的主要原因,找出相关的特征属性,并进行模式识别,挖掘可能存在的模式和规则。

整体求解过程概述(摘要)

  随着国际交流的多元化,中文变得越来越具有吸引力。由于中文文本的语序与其他语序差别较大,许多中文学习者很难掌握中文的语序规则。因此,中文文本的词语语序纠错变得越来越重要。中文语法中文文本错误纠错通常分为两类:一类为拼写错误纠错,另一类为语法错误纠错并包含词语冗余、词语缺失、词语选择和词语语序(乱序)。本文针对中文文本的错误纠错进行研究,从经典的神经网络入手解决中文文本错误的问题。
  针对问题1,首先分析数据集“train_large_v2.json”,其次构建数据集预处理的流程:语料清洗、去停用词、繁转简体、切分字词、生成标签。最后采用词向量表示和序列到序列的文本纠错的相关技术,为后续词语语序纠错模型及其改进打下了基础。
  针对问题 2,构建了基于经典神经网络模型的词语语序纠错模型。鉴于人工提取特征过程中易造成信息丢失,而经典神经网络模型在特征提取中取得的优异性能,本文分别采用Bi-GRU、CNN和Transformer 经典神经网络用于序列到序列的词语语序纠错任务,并详细的分析模型的结构及原理。
  针对问题3,在问题2所构建模型的基础上,首先在阿里云服务器上进行实验,基于Python3.6 和 Torch1.4.0 的 Linux 环境中进行模型的训练,其次对基于经典神经的词语语序纠错模型相关参数进行设定,最终纠正验证集中的中文错误,具体结果在附录所示。
  针对问题4,采用字级(Character Level)评价标准,基于整个测试集所有汉字的错误检测或纠正结果确定。由于本文中文拼写纠错模型集检错与纠错为一体,因此根据具体实验设置了一些特定指标,分别为:误报率/错误识别率(FPR),检测准确率(DA),检测精确率(DP),检测召回率(DR),检测F值(DF),纠错准确率(CA),纠错精确率(CP),纠错召回率(CR)和纠错F值(CF)。其次引入了动态规划提高模型纠错效率,使用平滑技术应对数据稀疏问题。最后结果表明本文提出的基于Transformer模型实验结果接近平均水平,误报率/错误识别率FPR为0.1218较低,表现较好,其余指标也皆优于其他模型。
  针对问题5,通过对前几个问题的分析总结,采用K-means算法进行聚类,验证集输入句子数为969条,含有错误的句子数480条,别字错误280个,冗余错误59个,缺失错误88个,乱序错误11个,语义重复73个,句式杂糅27个。结果显示中文文本中每类错误的主要原因为:别字错误排名第一(35%),词语缺失错误排第二(32%),语义重复排第三(20.5%)。
  本文最后讨论了模型的优缺点,并对模型的应用与推广做了进一步的思考。

模型假设:

  假设1:假设数据预处理之后的数据均为准确数据。
  假设2:假设未在给出数据集内的其他因素对文本错误无显著影响。
  假设3:假设所调查的相关影响因素数据都比较准确。
  假设4:给定的数据集可全面体现整体情况。

问题重述:

  针对于问题一,使用附件中的数据,进行数据预处理,选择合适的指标用于中文文本纠错,并说明选择指标的原因。
  针对于问题二,分析问题,并对比业界主流的解决问题方案,并提出解决问题的思路,并设计相关模型。
  针对于问题三,使用问题二所构建的模型,对所提供的数据集进行模型训练,并纠正验证集中文本的中文错误。
  针对于问题四,对比分析优化过程中各个模型、训练方案的优劣势,自主选取评价方式和评价指标评估模型的优劣,并总结分析相关内容。
  针对于问题五,探究中文文本中每类错误的主要原因,找出相关的特征属性,并进行模式识别,挖掘可能存在的模式和规则。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序如下:
import torch 
import torch.nn as nn 
import torch.optim as optim 
from transformers import BertTokenizer, BertModel 
# 超参数 
MAX_LEN = 128 
BATCH_SIZE = 32 
EPOCHS = 10 
LEARNING_RATE = 0.001 # 加载BERT模型和tokenizer 
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') 
bert_model = BertModel.from_pretrained('bert-base-chinese') class EntityModel(nn.Module): def __init__(self, bert_model, hidden_size, num_tags): super(EntityModel, self).__init__() self.bert = bert_model self.dropout = nn.Dropout(0.1) self.bilstm = nn.LSTM(bidirectional=True, input_size=hidden_size, hidden_size=hidden_size // 2, 
batch_first=True) self.fc = nn.Linear(hidden_size, num_tags) self.crf = CRF(num_tags) def forward(self, input_ids, attention_mask, labels=None): outputs = self.bert(input_ids, attention_mask=attention_mask) sequence_output = outputs[0] sequence_output = self.dropout(sequence_output) lstm_output, _ = self.bilstm(sequence_output) logits = self.fc(lstm_output) if labels is not None: loss = -self.crf(logits, labels, mask=attention_mask.byte()) return loss else: tags = self.crf.decode(logits, mask=attention_mask.byte()) return tags 
# 数据预处理 
with open('train_large_v2.json', 'r', encoding='utf-8') as file: lines = file.readlines() # 转换每一行的内容并写入新的txt文件 
with open('output.txt', 'w', encoding='utf-8') as file: for line in lines: data = eval(line)  # 将字符串转换为字典 source = data['source']  # 获取source字段的值 target = data['target']  # 获取target字段的值 source = source.replace(" ", "")  # 去除source字段中的空格 target = target.replace(" ", "")  # 去除target字段中的空格 file.write(f"{source} {target}\n")  # 将转换后的内容写入新文件 def tokenize_and_preserve_labels(text, labels): tokenized_text = [] token_labels = [] for word, label in zip(text, labels): tokenized_word = tokenizer.tokenize(word) n_subwords = len(tokenized_word) tokenized_text.extend(tokenized_word) token_labels.extend([label] * n_subwords) return tokenized_text, token_labels def pad_sequences(sequences, max_len, padding_value=0): padded_sequences = torch.zeros((len(sequences), max_len)).long() for i, seq in enumerate(sequences): seq_len = len(seq) if seq_len <= max_len: padded_sequences[i, :seq_len] = torch.tensor(seq) else: padded_sequences[i, :] = torch.tensor(seq[:max_len]) return padded_sequences def train(model, optimizer, train_dataloader): model.train() total_loss = 0 for step, batch in enumerate(train_dataloader): input_ids = batch['input_ids'].to(device) attention_mask = batch['attention_mask'].to(device) labels = batch['labels'].to(device) loss = model(input_ids, attention_mask, labels) total_loss += loss.item() optimizer.zero_grad() loss.backward() optimizer.step() avg_train_loss = total_loss / len(train_dataloader) return avg_train_loss 
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

catchadmin-webman 宝塔 部署

1&#xff1a;宝塔的php 中删除禁用函数 putenv 问题&#xff1a; 按照文档部署的时候linux&#xff08;php&#xff09; vue (本地) 无法访问后端api/login 的接口 。 解决办法&#xff1a; webman 没有配置nginx 反向代理 配置就能正常访问了

力扣515:在每个树行中找最大值

给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3]提示&#xff1a; 二叉树的节点个数的范围是 [0,104]-231 < Node.val &l…

<项目代码>YOLOv8 番茄识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined

VUE_PROD_HYDRATION_MISMATCH_DETAILS 未明确定义。您正在运行 Vue 的 esm-bundler 构建&#xff0c;它期望这些编译时功能标志通过捆绑器配置全局注入&#xff0c;以便在生产捆绑包中获得更好的tree-shaking优化。 Vue.js应用程序正在使用ESM&#xff08;ECMAScript模块&#…

《FreeRTOS列表和列表项篇》

FreeRTOS列表和列表项 1. 什么是列表和列表项&#xff1f;1.1 列表list1.2 列表项list item 2. 列表和列表项的初始化2.1 列表的初始化2.2 列表项的初始化 3. 列表项的插入4. 列表项末尾插入5. 列表项的删除6. 列表的遍历 列表和列表项是FreeRTOS的一个数据结构&#xff0c;是F…

MySQL进阶-索引的组合索引

练习题目 题目链接难度SQL进阶-索引的组合索引★★★☆☆ SQL思路 SQL进阶-索引的组合索引 初始化数据 drop table if exists user_profile; CREATE TABLE user_profile ( id int NOT NULL, device_id int NOT NULL, gender varchar(14) NOT NULL, age int , university va…

【iStat Menus for MacBook状态栏菜单系统监控工具--安装教程【简单操作,随时了解电脑情况】

Mac分享吧 文章目录 iStat Menus for MacBook状态栏菜单系统监控软件 效果图展示一、iStat Menus 状态栏菜单系统监控软件 Mac电脑版——v6.73(1240)1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件3️⃣&#xff1a;软件自定义配置 安装完成&#xff01;&#xff01;&am…

netmap.js:基于浏览器的网络发现工具

netmap.js是一款基于浏览器&#xff0c;用于提供主机发现和端口扫描功能的网络发现工具。 netmap.js的执行速度也非常的快&#xff0c;由于其使用了es6-promise-pool&#xff0c;因此它可以有效地运行浏览器允许的最大并发连接数。 动机 由于我正需要一个基于浏览器的端口扫…

计算机网络 (2)计算机网络的类别

计算机网络的类别繁多&#xff0c;根据不同的分类原则&#xff0c;可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1a;局域网是一种在小区域内使用的&#xff0c;由多台计算机组成的网络。覆盖范围&#…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3&#xff08;10&#xff09; 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

飞腾平台Arm NN软件栈安装使用指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

基于JavaSpringboot个人博客

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xf…

鸿蒙next ui安全区域适配(刘海屏、摄像头挖空等)

目录 相关api 团结引擎对于鸿蒙的适配已经做了安全区域的适配,也考虑到了刘海屏和摄像机挖孔的情况,在团结引擎内可以直接使用Screen.safeArea 相关api

【GPTs】Gif-PT:DALL·E制作创意动图与精灵动画

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Gif-PT主要功能适用场景优点缺点 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 使用Dalle生成用户请求的精灵图动画&#…

JMeter初体验:从入门到入门的性能测试之旅

一、关于性能测试 1、性能测试概述 性能测试是一种非功能测试&#xff0c;旨在评估系统在不同负载条件下的性能表现。它包括负载测试、压力测试、稳定性测试和基准测试等。性能测试的目的是确保系统在预期的负载下能够正常运行&#xff0c;并满足用户对响应时间、吞吐量和其他…

MongoDB新版本安装配置教程(7.0.15版本-zip下载)

找了半天MongoDB新版本怎么解决没有mongo命令,都没有很好的解决方法 现在分享一下: 首先下载: 然后手动创建 data 和 log 两个文件夹 然后再系统变量配置环境变量 在data的目录下&#xff0c;创建一个db文件 然后:在bin目录下cmd执行: mongod --dbpath D:\MongoDB\data\db …

解决虚拟机未被自动分配ip

文章目录 1. 背景2. 解决步骤 1. 背景 从vulnhub下载的靶场文件&#xff0c;网络适配器模式设置为nat模式之后&#xff0c;启动虚拟机之后发现没有成功分配动态ip。推测是虚拟机分配的网卡名称和原先靶机作者设置网络配置文件 网络接口名称不一致导致。 2. 解决步骤 解决办法就…

路径规划——RRT-Connect算法

路径规划——RRT-Connect算法 算法原理 RRT-Connect算法是在RRT算法的基础上进行的扩展&#xff0c;引入了双树生长&#xff0c;分别以起点和目标点为树的根节点同时扩展随机树从而实现对状态空间的快速搜索。在此算法中以两棵随机树建立连接为路径规划成功的条件。并且&…

2024游戏陪玩app源码的功能介绍/线上陪玩交友上线即可运营软件平台源码搭建流程

一个完整的陪玩交友系统从概念到实现再到维护的全过程得以清晰展现。每一步都需要团队的紧密协作与细致规划&#xff0c;以确保系统既满足用户需求&#xff0c;又具备良好的稳定性和可扩展性。 基础框架 移动端开发框架&#xff1a;如uniapp&#xff0c;它支持多平台开发&…

缓冲式线程池C++简易实现

前言 : 代码也比较短&#xff0c;简单说一下代码结构&#xff0c;是这样的&#xff1a; SyncQueue.hpp封装了一个大小为MaxTaskCount的同步队列&#xff0c;这是一个模板类&#xff0c;它在线程池中承担了存放任务等待线程组中的线程来执行的角色。最底层是std::list<T>…