IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> “基于常识知识的推理问题”源代码分析-语料库预处理 -> 正文阅读

[人工智能]“基于常识知识的推理问题”源代码分析-语料库预处理

2021SC@SDUSC

自从大约半个月之前更换到了新课题——“基于常识知识的推理问题”之后,我就一直在对这一新课题进行摸索。虽然我负责的项目是OpenCSR这一论文项目的源代码解析与运行,但是我还是花了一些时间去稍微了解一下梁同学负责的ACP_CSQA项目,一方面是处于好奇,另一方面也是希望能够起到一些触类旁通的作用。目前来说,虽然不能对我自己负责的项目有所助力,但是我依旧从中收获了不少,在日后的代码解析过程中如果有相关相似的内容或者可以借鉴的地方,我会拿出来讲一讲。

接下来讲述这次源代码分析的内容。某种意义上来说,这是我更换课题以来的第一篇正式意义上的源代码分析报告,它主要的解析对象是corpus_prepro.py这个python脚本,其作用是对语料库进行预处理。当然,在讲述具体的代码的作用以及意义之前,我需要重申一遍,我所认定的核心源代码,是drfact这一模型的相关源代码。而drfact的算法原理需要基于一定的数据结构来实现其数学原理,因此对于原始语料库进行一定程度的预处理是必要的,我会在这篇报告中首先讲述其必要性。

一、模型思想与预处理的必要性

在阐述模型思想之前,首先需要理解OpenCSR项目所针对的是开放性的常识推理问题,即没有候选答案的常识推理,因此,它的任务定义也会和有候选答案的常识推理有所不同。基于这个任务定义,模型思想也会发生一些改变。

1. 任务定义

F: 一个文本格式的事实知识语料库,其中每个文本𝑓𝑖𝐹描述了一段客观事实。

V:由语料库处理得到的概念集合(字典), c𝑖𝑉表示一个名词或者名词短语。?

输入q: 一个常识问题(示例:什么可以缓解全球变暖)。

输出Output:{a𝑖,, 𝑤𝑖……}

2. 模型思想

以一个超图的形式建模推理过程,超图的节点为概念,包含概念的事实𝑓𝑖为超边。

从问题包含的一个概念出发,通过途径不同的事实𝑓𝑖,得到一系列节点集合。

?

3.预处理的必要性

然而,我们一般面对的事实以及概念往往都是一个长字符串的形式出现,如何才能够将这样的原始数据转变成为我们能够通过数学模型来理解的形式呢?

这里用三言两语是比较讲述内部的深层原理的,我自己对这个处理方式也是一知半解。不过,在这个模型中,我们运用最多,也是最重要的一个技术,是BERT编码。

BERT编码是一种基于transformer编码器的全新编码方式,其全称是: Bidirectional Encoder Representations from Transformers, 如果翻译过来也就是双向transformer编码表达。要理解什么是双向transformer编码表达,首先我们需要看一下这张BERT模型图。

?

上图中的E_i是指的单个字或词,?T_i指的是最终计算得出的隐藏层。经过这样的操作之后,序列里面的每一个字,都含有这个字前面的信息和后面的信息,这就是双向的理解。在这里,一句话中每一个字当前这个字等于用这句话中其他所有字重新表达了一遍,每个字含有了这句话中所有成分的信息。这,就是所谓的BERT编码。

基于BERT编码,我们总算可以对我们的语料库F进行一定程度的处理了。以下是我们所需要的预计算得到的矩阵:

D对事实知识语料库F使用BERT编码得到一个事实矩阵(形成一个|F|?d的矩阵)。

S根据规则构建事实之间的关联矩阵,即𝑓𝑖𝑓𝑗(形成一个|F|?|F|的矩阵)。

E 构建概念到事实之间的共现矩阵(形成一个|V|?|F|的矩阵)。

事实矩阵和关联矩阵可能比较好理解,但共现矩阵则需要一些NLP问题的基础知识。我们知道NLP的数学模型是基于词向量的,而语言模型则表示了一句话 (词组合)出现的概率。但是往往有这么一个问题,语言模型无法衡量词向量之间的关系,且词向量显得过于稀疏。这时候,共现矩阵的出现则解决了这一问题。通过将共现矩阵行(列)作为词向量,可以发现主题,解决词向量相近关系的表示。

?基于这一些知识储备,我们开始对代码进行解析。

二、源代码解析

首先,corpus_prepro.py文件调用了这些python库。其中,spacy是最重要的那个。spacy可以用于进行分词,命名实体识别,词性识别等等,毫不夸张地说,spacy可以解决几乎所有NLP问题,因此其重要性不言而喻。而absl则是一个用于设置参数的python库。

import spacy
import json
import os

from absl import app
from absl import flags
from tqdm import tqdm 

在定义具体的函数之前,本脚本首先先设置了三个参数。这三个参数都会出现在后续的函数定义等过程中。

FLAGS = flags.FLAGS

flags.DEFINE_string("DATA_ROOT", None, "Path to root folder.")
flags.DEFINE_string("CORPUS_PATH", None, "Path to corpus file.")
flags.DEFINE_string("OUTPUT_JSON_PATH", None, "Path to output json file.")
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 10:56:24  更:2021-10-22 10:56:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:28:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码