序列模型与注意力机制

Seq2Seq 模型

Seq2Seq模型的核心思想是,通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入与解码输出两个环节构成。在经典的实现中,编码器和解码器各由一个循环神经网络构成,既可以选择传统循环神经网络结构,也可以使用长短期记忆模型、门控循环单元等。在Seq2Seq模型中,两个循环神经网络是共同训练的。

知识追踪模型调研

一、前言

知识追踪是构建自适应系统的关键。在自适应系统中,无论是做习题路径规划,推荐,还是后期的知识图谱,都需准确评估学生的知识点掌握情况。从历年提交论文来看,知识追踪领域相关的研究依次经历了以下几个阶段:

  • IRT(Item response theory) 项目反应理论
  • PFA评估模型
  • BKT(Bayesin knowledge tracing) 基于贝叶斯网络的学生知识点追踪模型
  • DKT(Deep konwledge traing) 基于深度神经网络的学生知识点追踪模型
  • DKT+(针对DKT模型的缺点提出的增强模型)
  • DKVMN(Dynamic Key-Value Memory Networks for Knowledge Tracing)知识追踪场景下的动态key-value记忆网络
  • DKVMN+(针对DKVMN模型的缺点提出的增强模型)
  • Deep-IRT(IRT+DKVMN)

本文意在通过以上论文,分析知识追踪在教学的技术可行性,思考怎么帮助学生摒弃题海战术,高效精准提升。

试题知识点智能标注

一. 项目结构

GitLab 项目地址
|- knowledge-automatic-tagging
|  |- ckpt            # 训练后的模型
|  |- data            # 经过预处理得到的结果数据
|  |- data_process        # 数据预处理代码
|  |- doc        # 项目细节文档
|  |- models           # 模型代码
|  |  |- word-cnn-concat    # CNN网络
|  |  |  |- network.py    # 模型网络结构
|  |  |  |- train.py      # 训练
|  |  |  |- predict.py     # 验证集/测试集预测
|  |  |- word-bigru-cnn-concat   # bigru + cnn 网络
|  |  |  |- network.py    # 模型网络结构
|  |  |  |- train.py      # 训练
|  |  |  |- predict.py     # 验证集/测试集预测
|  |  |- … # 其他待验证模型
|  |- notebook        # jupyter notebook代码
|  |- raw_data          # 题库提取的原始数据集
|  |- summary          # tensorboard 数据
|  |- tmp            # 临时文件夹,存放测试代码
|  |- data_helpers.py       # 数据处理函数
|  |- Dockerfile        # docker部署文件
|  |- evaluator.py        # 测评方案

从NB到语言模型

1. 引言:朴素贝叶斯的局限性

我们知道朴素贝叶斯的局限性来源于其条件独立假设,它将文本看成是词袋子模型,不考虑词语之间的顺序信息,就会把“武松打死了老虎”与“老虎打死了武松”认作是一个意思。那么有没有一种方法提高其对词语顺序的识别能力呢?有,就是这里要提到的N-gram语言模型。

2. N-gram语言模型是啥?

2.1从假设性独立到联合概率链规则

照抄我们垃圾邮件识别中的条件独立假设,长这个样子:

为了简化起见,我们以字母表示每一个词语,并且先不考虑条件“S”。于是上式就变成了下面的独立性公式。

贝叶斯与垃圾邮件

1. 引言

贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来。因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口。

2. 贝叶斯公式

贝叶斯公式就一行:

而它其实是由以下的联合概率公式推导出来:

其中叫做先验概率,叫做后验概率,叫做联合概率。
贝叶斯最核心的公式就这么些。

自然语言处理与词嵌入

词嵌入

one-hot 向量将每个单词表示为完全独立的个体,不同词向量都是正交的,因此单词间的相似度无法体现。

换用特征化表示方法能够解决这一问题。我们可以通过用语义特征作为维度来表示一个词,因此语义相近的词,其词向量也相近。

将高维的词嵌入“嵌入”到一个二维空间里,就可以进行可视化。常用的一种可视化算法是 t-SNE 算法。在通过复杂而非线性的方法映射到二维空间后,每个词会根据语义和相关程度聚在一起。相关论文:van der Maaten and Hinton., 2008. Visualizing Data using t-SNE

词嵌入(Word Embedding)是 NLP 中语言模型与表征学习技术的统称,概念上而言,它是指把一个维数为所有词的数量的高维空间(one-hot 形式表示的词)“嵌入”到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。对大量词汇进行词嵌入后获得的词向量,可用于完成 命名实体识别(Named Entity Recognition) 等任务。

命名实体识别

命名实体识别

命名实体识别(Named EntitiesRecognition, NER)是自然语言处理(Natural LanguageProcessing, NLP)的一个基础任务,常用在信息抽取、信息检索、机器翻译、问答系统中。

命名实体是命名实体识别的研究主体,一般包括3大类(实体类、时间类和数字类)7小类(人名、地名、机构名、时间、日期、货币和百分比)命名实体。

评判一个命名实体是否被正确识别包括两个方面:

  • 实体的边界是否正确
  • 实体的类型是否标注正确
    主要错误类型包括文本正确,类型可能错误;反之,文本边界错误,标记的类型正确。

命名实体识别的主要技术方法分为:

  • 基于规则和词典的方法
  • 基于统计的方法
  • 二者混合的方法等。

基于规则的方法多采用语言学专家手工构造规则模板,选用特征包括统计信息、标点符号、关键字、指示词和方向词、位置词(如尾字)、中心词等方法,以模式和字符串相匹配为主要手段,这类系统大多依赖于知识库和词典的建立。

基于统计机器学习的方法主要包括:隐马尔可夫模型(HiddenMarkovMode,HMM)、最大熵(MaxmiumEntropy,ME)、支持向量机(Support VectorMachine,SVM)、条件随机场( ConditionalRandom Fields,CRF)等。


调参技巧

一、参数和超参数

参数即是我们在过程中想要模型学习到的信息(模型自己能计算出来的),例如 $W^{[l]}$,$b^{[l]}$。

超参数(hyper parameters)即为控制参数的输出值的一些网络信息(需要人经验判断)。超参数的改变会导致最终得到的参数 $W^{[l]}$,$b^{[l]}$ 的改变。

典型的超参数有:
(1)学习速率:α
(2)迭代次数:N
(3)隐藏层的层数:L
(4)每一层的神经元个数:$n^{[1]}$,$n^{[2]}$,…
(5)激活函数 g(z) 的选择

当开发新应用时,预先很难准确知道超参数的最优值应该是什么。因此,通常需要尝试很多不同的值。应用深度学习领域是一个很大程度基于经验的过程。

比如常见的梯度下降问题,好的超参数能使你尽快收敛:

sgd_good
sgd_bad

深度学习笔记

神经网络初始化权重为什么不能初始化为0

将所有权重初始化为零将无法破坏网络的对称性。这意味着每一层的每个神经元都会学到相同的东西,这样的神经元网络并不比线性分类器如逻辑回归更强大。

需要注意的是,需要初始化去破坏网络对称性(symmetry)的只有W,b可以全部初始化为0。

吴恩达目标检测课堂笔记

目标检测是计算机视觉领域中一个新兴的应用方向,其任务是对输入图像进行分类的同时,检测图像中是否包含某些目标,并对他们准确定位并标识。

本文所涉及的目标检测算法是 Ng 课堂上所讲的 YOLO,除此之外流行的还有 RCNN、Fast RCNN、Faster RCNN 和 SSD。

相关链接: