前面介绍完 CasRel模型结构,接下来我们看一下数据集,然后做一个简单的预处理。因为是用 Bert 做分词,就省去了自己建词表的过程,只需要把关系解析出来,供后续流程使用,就可以了。
本专栏主要用于,发布 CV / NLP / 推荐算法等领域的实战项目讲义,目前是 Pytorch 实现,后续会加上 TensorFlow 相关的课程内容。
前面介绍完 CasRel模型结构,接下来我们看一下数据集,然后做一个简单的预处理。因为是用 Bert 做分词,就省去了自己建词表的过程,只需要把关系解析出来,供后续流程使用,就可以了。
上节课,给大家整体介绍了项目要做的事情,就是从一段文本当中,找到主体、客体、和关系的三元组组合,因为 CasRel 这个模型,设计思路不是很常规,示意图的细节也容易混淆,所以我们单独用一节课时间,来拆解一下这个模型。
关系抽取,是信息检索、智能问答、智能对话等人工智能应用的重要基础,一直受到业界的广泛关注。目前NLP领域的主流研究方向,也在向知识图谱偏移。因为多音字、多义词,加上语境变化,单个字或者词的表征一定是片面的,发现实体之间的联系,往往比自身特征更重要。
上节课,我们做了一个简单的数据预处理,通过观察直方图,定义好了文本的长度参数。现在,假设大家已经看了、并且掌握了前面 Huggingface 的内容,我们接着往下讲自定义 Dataset 和 Bert 分词的内容。
上节课,给大家介绍了 TextCNN 的模型结构,这节课就正式进入代码部分。本节课有两个任务,一是导入数据集,二是要统计待分类的文本长度,因为 TextCNN 在卷积之后,要做批量最大池化操作,所以要求文本长度一致,不够的填充PAD,太长的要进行截取。
从本节课开始,我将带大家来完成一个《Bert+TextCNN新闻文本分类项目》。文本分类是自然语言处理最基础,也是最重要的任务之一,非常适合作为NLP入门的第一个项目。
上节课我们用一个中文句子,给大家演示了 Bert 预训练模型的基本用法。但有些场景下,文本内容可能是中英文混杂的,但目前还没有支持多语言的预训练模型。直接用中文模型进行编码,英文部分会变成[UNK]标记,从而导致BertTokenizer分词不可逆问题。
上一节介绍了transformers的安装,和预训练模型的加载方法,本节我们结合一个例子,来介绍预训练模型的使用过程。使用 BERT 这个预训练模型,主要分为两步:BertTokenizer 进行分词,BertModel 编码。
HuggingFace 是一家专注于自然语言处理(NLP)、人工智能和分布式系统的创业公司,该公司维护的 HuggingFace 的开源社区,是最大的开源模型托管服务的平台,相当于机器学习界的 Github。
上一节用PaddleOCR提取出了,火车票图片的文字和位置信息,并手动打上了对应标签,本节我们将根据带标签的文件中的位置信息,创建一个图结构,并计算标准化的邻接矩阵。
从这节开始,就正式进入GCN项目的代码环节,我们先使用PaddleOCR,识别出火车票上的文字信息,并提取文字所位置,整理后另存为一个csv文件。项目的目的是要做信息抽取,所以对训练和测试数据,需要手动打上标签,供算法学习。
深度学习一直都是被几大经典模型统治着,常见的有CNN、RNN网络,它们在CV和NLP领域都取得了优异的效果。但人们发现了很多CNN、RNN无法解决,或者效果不好的问题——图结构数据,所以就有了GNN网络。
从本节开始,我将带大家完成一个深度学习项目:用图卷积神经网络(GCN),实现一个「火车票文字信息提取」的项目,由于火车票上每个节点文字不是等长的,所以还需要添加一个前置的 LSTM 来提取句子特征。
前文已经定义好了 BiLSTM、Linear 层,最后还需要加一层 CRF,再结合维特比解码,输出目标值。另外一个重要的步骤,就是定义损失函数,CRF 解码后的损失计算,不同于分类任务的交叉熵损失,还需要考虑到顺序的问题。
到上一节为止,我们已经处理好了模型需要的数据,本节就正式开始搭建模型了,模型的整体是 BiLSTM+CRF 结构,但 CRF 涉及到解码和特殊的损失值计算方法,所以本节先介绍 BiLSTM,下一小节再介绍 CRF 部分。
经过上一步的处理,我们将长文本切分成了单句,但每个句子长度又不完全一样。在批处理时,要求每个batch的句子长度必须一致,所以我们需要填充 PAD,来保证句子每个batch的句子长度一样。
经过前面的数据预处理操作,我们已经得到了训练样本、测试样本文件,以及词表和标签表的缓存文件,接下来就是定义Dataset类,来加载数据。另外在加载数据时,需要将文本切分为等长的句子。
拆分完训练集和测试集后,我们需要根据训练集,生成词表和标签表的缓存文件,供后面的流程调用。该表不仅要记录所有词和标签,还要对应一个不重复的ID,方便后续进行Embedding,即数字化。
上一节已经生成了单个字和标注对应的文件,接下来就是将这些文件,拆分为训练集和测试集两部分。这里的拆分不单是文件选择的问题,还需要考虑后续加载数据集的问题。
主办方提供的数据是一些用brat标注的文件,.txt文件为原始文档,.ann文件为标注信息,标注实体以T开头,后接实体序号,实体类别,起始位置和实体对应的文档中的词。