深度知识追踪(Deep Knowledge Tracing)

0 摘要

在计算机支持的教育中,知识追踪(机器在学生与课程作业交互时对学生的知识进行建模)是一个公认的问题。虽然有效地对学生知识进行建模会产生很高的教育影响,但这项任务存在许多内在的挑战。在这篇文章中,我们探索使用递归神经网络(RNNs)来模拟学生的学习。与以前的方法相比,RNN模型家族具有重要的优势,因为它们不需要对人类领域知识进行显式编码,并且可以捕获更复杂的学生知识表示。使用神经网络可以显著提高对一系列知识跟踪数据集的预测性能。此外,学习的模型可以用于智能课程设计,并允许直接解释和发现学生任务中的结构。这些结果为知识追踪提供了一条很有前途的新研究方向,并为RNN提供了一个典型的应用任务。

1 介绍

计算机辅助教育承诺开放获取世界级的教育,并降低日益增长的学习成本。我们可以通过在Khan Academy、Coursera和EdX等流行的教育平台上构建大规模学生跟踪数据模型来实现这一承诺。
知识追踪的任务是对学生的知识进行建模,这样我们就可以准确地预测学生在未来的互动中将如何表现。对这项任务的改进意味着可以根据学生的个人需要向他们建议资源,并且可以跳过或推迟预测太容易或太难的内容。尝试定制内容的手动调整智能教学系统已经显示出令人振奋的结果。一对一的人类辅导可以为普通学生带来大约两个标准差的学习收益,而机器学习解决方案可以免费为世界上任何人提供高质量个性化教学的这些好处。由于人类学习的基础是人脑和人类知识的复杂性,因此知识追溯问题本身就很困难。因此,使用丰富的模型似乎是合适的。然而,以往的教育工作大多依赖于函数形式受限的一阶马尔可夫模型。
本文提出了一种称为深度知识追踪(Deep Knowledge Tracing,DKT)的公式,它将时间上“深度”的灵活递归神经网络应用到知识追踪任务中。这一系列模型使用大量人工“神经元”来表示潜在的知识状态及其时间动态,并允许从数据中学习学生知识的潜在变量表示,而不是硬编码。这项工作的主要贡献是:
1.一种将学生交互编码为递归神经网络输入的新方法。
2.在知识跟踪基准上,AUC比之前最好的结果提高了25%。
3.证明了我们的知识追踪模型不需要专家注释。
4.练习影响的发现和改进练习课程的生成。


图1:一个学生和她在解决50个Khan练习时的预测反应。她似乎掌握了寻找x和y截距的技巧,然后在将知识转化为线性方程时遇到了困难。

知识追踪的任务可以形式化为:给定对交互的观察X0。学生在特定学习任务中使用的xt,预测他们下一次交互的各个方面xt+1。在最普遍的知识跟踪实例化中,交互采用xt={qt,at}的元组的形式,该元组将正在回答的练习的标签qt与在练习中是否被正确回答结合在一起。当进行预测时,模型被提供回答的练习的标签qt,并且必须预测学生是否会正确地完成练习。图1显示了学习8年级数学的单个学生的跟踪知识的可视化。学生首先正确回答两个平方根问题,然后得到一个错误的x截取练习。在随后的47次互动中,学生解决了一系列的x-截取、y-截取和绘图练习。每次学生回答练习时,我们都可以预测她是否会在下一次互动中正确回答每种类型的练习。在可视化中,我们只显示随着时间的推移对相关练习类型子集的预测。在大多数以前的工作中,练习标签表示人类专家分配给练习的单一“概念”。我们的模型可以利用但不需要这样的专家注释。我们证明了在没有注释的情况下,该模型可以自主学习内容子结构。

2 相关工作

建模和预测人类如何学习的任务涉及教育、心理学、神经科学和认知科学等多个领域。从社会科学的角度来看,学习被理解为受到复杂的宏观层面的相互作用的影响,包括情感、动机,甚至身份认同。目前存在的挑战在微观层面上进一步暴露出来。学习本质上是人类认知的反映,人类认知是一个高度复杂的过程。认知科学领域中两个特别相关的主题是理论,即人类的大脑及其学习过程是递归的,并由类比驱动。首先提出了知识竞赛的问题,并在智能家教社区中进行了深入的研究。面对上述挑战,建立可能无法捕捉所有认知过程但仍有用的模型一直是一个主要目标。

2.1 贝叶斯知识追踪

贝叶斯知识追踪(Bayesian Knowledge Tracking,BKT)是建立学生学习时间模型最常用的方法。BKT将学习者的潜在知识状态建模为一组二元变量,每个变量代表对单个概念的理解或不理解。当学习者正确或错误地回答给定概念的练习时,隐马尔可夫模型(HMM)被用来更新这些二进制变量中的每一个的概率。最初的模型公式假设,一旦学习了一项技能,它就永远不会被忘记。该模型最近的扩展包括猜测和滑动估计的情境化,估计单个学习者的先验知识,以及估计问题难度。
无论有没有这样的扩展,知识追踪都会遇到几个困难。首先,学生理解的二进制表示可能是不切实际的。其次,隐藏变量的含义及其在练习中的映射可能是模糊的,很少能满足模型对每个练习只有一个概念的期望。已经开发了几种技术来创建和改进概念类别和概念练习映射。当前的黄金标准,认知任务分析是一个艰难而迭代的过程,领域专家要求学习者在解决问题的同时讨论他们的思维过程。最后,用于建模转换的二元响应数据限制了可以建模的练习类型。

2.2 其他动态概率模型

部分可观测的马尔可夫决策过程(POMDP)已经被用来模拟学习者随着时间的推移的行为,在学习者沿着一条开放的路径到达解决方案的情况下。虽然POMDP提供了一个极其灵活的框架,但它们需要探索指数级大的状态空间。当前的实现也被限制在离散状态空间,对于潜在变量具有硬编码的含义。这使得它们在实践中变得顽固或僵化,尽管它们有可能克服这两个限制。
来自绩效因素分析(PFA)框架和学习因素分析(LFA)框架的更简单的模型已经显示出与BKT相当的预测能力。为了获得比单独使用任何一个模型更好的预测结果,各种集成方法被用来结合BKT和PFA。AdaBoost、Random Forest、线性回归、Logistic回归和前馈神经网络支持的模型组合都显示出比BKT和PFA本身更好的结果。但由于他们所依赖的学习者模型,这些集成技术面临着同样的限制,包括对准确的概念标注的要求。
最近的工作探索了将项目反应理论(IRT)模型与切换非线性卡尔曼滤波器以及与知识跟踪相结合。虽然这些方法很有前途,但目前它们在函数形式上受到更多限制,而且(由于潜变量的推断)比我们这里提出的方法更昂贵。

2.3 递归神经网络

递归神经网络是一类灵活的动态模型,随着时间的推移将人工神经元连接起来。信息的传播是递归的,因为隐藏的神经元基于对系统的输入和它们先前的激活而进化。与教育中出现的隐马尔可夫模型不同,隐马尔可夫模型也是动态的,RNN具有对潜在状态的高维、连续的表示。RNN的更丰富表示的一个显著优势是它们能够在更晚的时间点将来自输入的信息用于预测。这对于长期短期记忆(LSTM)网络尤其如此–这是一种流行的RNN。
递归神经网络对于几个时间序列任务(例如,语音到文本、翻译和图像字幕)是竞争性的或最先进的,在这些任务中有大量的训练数据可用。这些结果表明,如果我们将这项任务表述为时间神经网络的一种新应用,我们可以更成功地追踪学生的知识。

3 深度知识追踪

我们认为,人类的学习受到许多不同属性的支配–材料、上下文、呈现的时间进程和涉及的个人–其中许多属性很难量化,只依靠第一原则为练习分配属性或构建图形模型。在这里,我们将应用两种不同类型的RNN-一个带有乙状结节的普通RNN模型和一个长短期记忆(LSTM)模型-来根据学生过去的活动来预测学生对练习的反应。

3.1 模型

传统的递归神经网络(RNNs)映射向量的输入序列(x1,…,Xt)转换为矢量的输出序列(y1,…,YT)。这是通过计算一系列“隐藏”状态(h1,…,hT)可以被视为来自过去观测的相关信息的连续编码,这将对未来的预测有用。有关图解,请参见图2。变量使用由公式定义的简单网络进行关联:


图2:简单递归神经网络中变量之间的联系。动态网络的输入(Xt)是学生动作的单热编码或压缩表示,而预测(Yt)是表示让每个数据集练习正确的概率的向量。

其中,TANH和Sigmoid函数σ(·)都是按元素应用的。该模型由输入权重矩阵Whx、递归权重矩阵Whh、初始状态H0和读出权重矩阵Wyh参数化。潜伏单元和读出单元的偏置由bh和by给出。
长短期记忆(LSTM)网络是RNN的一种更复杂的变体,通常被证明更强大。在LSTM中,潜在单元保留它们的值,直到通过“遗忘门”的动作将其显式清除。因此,它们更自然地在许多时间步长内保持信息,这被认为使它们更容易训练。此外,隐藏单元使用乘法交互进行更新,因此它们可以对相同数量的潜在单元执行更复杂的转换。LSTM的更新公式比RNN复杂得多,可以在附录A中找到。

3.2 输入输出时间序列

为了对RNN或LSTM进行关于学生交互的训练,有必要将这些交互转换成固定长度的输入向量序列XT。根据这些交互的性质,我们使用两种方法来实现这一点:
对于具有少量M个独特练习的数据集,我们将xt设置为学生交互元组ht={qt,at}的一次one-hot编码,它表示哪个练习被回答的组合,以及该练习是否被正确回答,因此xt∈{0,1}^2M。我们发现,对qt和at有单独的表示会降低性能。
对于大的特征空间,one-hot编码可能很快就会变得不切实际的大。因此,对于具有大量独特练习的数据集,我们改为为每个输入元组分配一个随机向量nq∼N(0,i),其中nq∈R^N,和N<<M.然后我们将每个输入向量xt设置为对应的随机向量xt=nqt。这种一个one-hot高维向量的随机低维表示是由压缩传感驱动的。压缩传感指出,d维的k-稀疏信号可以从k log d随机线性投影(最大比例和加性常数)中精确恢复。由于一one-hot编码是1稀疏信号,因此可以通过将学生交互元组分配给长度为∼log 2M的固定随机高斯输入向量来对其进行精确编码。虽然目前的论文只涉及1-one-hot向量,但这一技术可以很容易地扩展到以固定长度向量捕捉更复杂的学生交互的各个方面。
输出yt是一个长度等于问题数量的向量,其中每个条目代表学生正确回答该特定问题的预测概率。因此,然后可以从对应于qt+1的yt中的条目中读取at+1的预测。

3.3 Optimization

训练目标是在该模型下观察到的学生反应序列的负对数似然。设δ(qt+1)是练习在时间t+1回答的one-hot编码,l是二进制交叉熵。给定预测的损失是l(y^Tδ(qt+1),at+1),并且单个学生的损失是:

该目标是最小化的随机梯度下降的小批量。为了防止训练过程中的过度拟合,在计算读数yt时,将丢弃应用于ht值,但在计算下一个隐藏状态ht+1时不应用。我们通过截断范数高于阈值的梯度的长度来防止梯度在时间中反向传播。对于本文中的所有模型,我们始终使用200的隐藏维度和100的小批量大小。为了促进对DKTS的研究,我们发布了我们的代码和相关的预处理数据。

4 教育应用

知识追踪的训练目标是根据学生过去的活动来预测他们未来的表现。这是直接有用的。例如,如果学生的能力经过持续的评估,就不再需要正式测试。正如第6节中的实验所探讨的那样,DKT模型还可以推动其他一些改进。

4.1 改善课程设置

我们的模型最大的潜在影响之一是选择最佳的学习项目顺序呈现给学生。给定一个具有估计的隐藏知识状态的学生,我们可以查询我们的RNN来计算如果我们给他们布置一个特定的练习,他们的预期知识状态会是什么。例如,在图1中,在学生回答了50个练习之后,我们可以测试我们可以向她展示的每一个可能的下一个练习,并计算她在给定该选择的情况下的预期知识状态。对于这个学生来说,预计最优的下一个问题是重温y-截距的求解。
我们使用一个训练有素的DKT来测试教育文献中的两个经典课程规则:在不同主题的练习混合的情况下混合,在学生回答相同类型的一系列练习的情况下封闭。由于选择下一练习的整个序列以最大化预测精度可以表述为马尔可夫决策问题,因此我们还可以评估使用期望最大算法选择最优问题序列的好处。

4.2 发现训练关系

DKT模型还可以应用于发现数据中的潜在结构或概念的任务,该任务通常由人类专家执行。我们通过给每个有向的练习i和j对分配一个影响Jij来解决这个问题,

其中(j|i)是RNN在第二个时间步分配给练习j的正确概率,假设学生在第一个时间步正确回答了练习i。我们表明,RNN捕获的依赖项的这种表征恢复了与练习相关的前提条件。

5 数据集

我们在三个数据集上测试了预测学生表现的能力:模拟数据、Khan Academy数据和Assistments benchmark数据集。在每个数据集上,我们测量曲线下面积(AUC)。对于非模拟数据,我们使用5次交叉验证来评估我们的结果,并且在所有情况下都从训练数据中学习超参数。我们将深度知识追踪的结果与标准的BKT进行比较,并在可能的情况下优化BKT的变体。此外,我们将我们的结果与通过简单计算学生在特定练习中答对的边际概率所做的预测进行比较。

表1:测试的所有数据集的AUC结果。BKT是标准的BKT。BKT是literature for Assistments中报道的最好的结果。DKT是使用LSTM深度知识追踪的结果。*

模拟数据: 我们模拟虚拟学生学习虚拟概念,并测试我们在这种受控环境下预测反应的准确性。对于这个实验的每一次运行,我们生成了2000名学生,他们回答了从k∈1…5概念中抽取的50个练习。仅针对此数据集,所有学生回答相同的50个练习序列。每个学生对每个概念都有一个潜在的知识状态“技能”,每个练习都有一个单一的概念和一个难点。使用经典项目反应理论对学生在概念技能正确的情况下完成练习的困难和正确的概率建模为:p(βα|α,β)=c+(1-c)/(1+e^(β−α)),其中c是随机猜测的概率(设置为0.25)。随着时间的推移,学生通过增加与他们回答的练习相对应的概念技能来“学习”。为了理解不同模型如何合并未标记的数据,我们不提供带有隐藏概念标签的模型(相反,输入只是练习指数以及练习回答是否正确)。我们对另外2000名模拟测试生的预测性能进行了评估。对于每个数量的概念,我们用不同的随机生成的数据重复实验20次,以评估准确性、平均数和标准误差。
Khan Academy Data: 我们使用了来自可汗学院八年级共同核心课程的匿名学生使用互动的样本。数据集包括47,495名学生完成的140万个练习,涉及69种不同的练习类型。它不包含任何个人信息。只有从事这篇论文的研究人员才有权访问这个匿名的数据集,它的使用受一项协议的约束,该协议旨在根据Khan Academy的隐私声明保护学生的隐私。Khan Academy提供了一个特别相关的学习数据来源,因为学生经常与网站互动很长一段时间和各种内容,而且学生通常在他们研究的主题和他们通过材料所走的轨迹上是自我指导的。
Benchmark Dataset: 为了了解我们的模型与其他模型相比如何,我们在Assistments 2009-2010“Skill Builder”公共基准数据集2上对模型进行了评估。Assistments是一个在线辅导,同时教授和评估小学数学的学生。据我们所知,它是最大的公开可用的知识跟踪数据集。

6 结果

在所有三个数据集上,深度知识追踪的性能都大大优于以前的方法。在Khan Academy Data上,使用LSTM神经网络模型得到的AUC为0.85,这比标准BKT的性能(AUC=0.68)有了显著的改善,特别是与边缘基线(AUC=0.63)的BKT相比有很小的改善。参见表1和图3(B)。在Assistments数据集上,DKT比之前最好的报告结果(AUC分别为0.86和0.69)提高了25%。与边际基线(0.24)相比,我们在AUC中报告的增益是迄今为止在数据集上实现的最大增益(0.07)的三倍多。
来自合成数据集的预测结果提供了对深层知识追踪能力的有趣演示。LSTM和RNN模型在预测学生反应方面的表现都不亚于一个对所有模型参数都有完美了解的先知(只需拟合潜在的学生知识变量)。参见图3(A)。为了获得与预测不相上下的精确度,模型必须模拟包含以下几个方面的功能:潜在的概念、每次练习的难度、学生知识的先验分布以及发生的概念技能的增长。

图3:左:(A)模拟数据和(B)Khan Academy Data的预测结果。右:©关于不同练习课程的辅助数据的预测知识。误差条是平均值的标准误差。

在每次练习之后。相比之下,BKT的预测随着隐藏概念数量的增加而大幅下降,因为它没有学习未标记概念的机制。
我们测试了我们在Assistment数据集中五个概念的子集上智能选择练习的能力。对于每种课程方法,我们使用我们的DKT模型来模拟学生如何回答问题,并评估学生在30次练习后知道了多少。我们重复学生模拟500次,测量学生未来答对问题的平均预测概率。在Assistment上下文中,阻塞策略比混合策略具有显着优势。参见图3©。虽然阻塞的表现与解决期望最大一次练习深度(MDP-1)不相上下,但如果我们在选择下一个问题时更深入地展望未来,我们提出的课程中,学生在解决较少问题后拥有更高的预测知识(MDP-8)。
对合成数据集的预测精度表明,有可能使用DKT模型来提取数据集中评估之间的潜在结构。我们的模型对合成数据集的条件影响图显示了五个潜在概念的完美群集(参见图4),并使用公式4中的影响函数设置了有向边。一个有趣的观察是,同一概念中的一些练习在时间上相隔很远。例如,在节点编号描述序列的合成数据集中,合成数据集中的第5个练习来自隐藏的概念1,尽管直到第22个问题才问到同一概念的另一个问题,但我们能够了解到两者之间的强烈条件依赖性。我们使用相同的技术分析了Khan Academy Data。生成的图表令人信服地清楚地说明了8年级共同核心中的概念是如何相互联系的(参见图4。节点编号描述了练习标签)。我们将分析限制在有序的练习对{A,B}中,以便在A出现之后,B在序列的其余部分中出现的时间超过1%)。为了确定产生的条件关系是否是数据中明显的潜在趋势的产物,我们将我们的结果与两个基线测量进行了比较(1)假设学生刚刚回答了A,那么他们回答B的转移概率;(2)如果学生之前回答了A,那么数据集中正确回答B的概率(不使用DKT模型)。这两种基线方法都生成了不一致的图表,如附录所示。虽然我们发现的许多关系对教育专家来说可能并不令人惊讶,但它们的发现肯定了DKT网络学习了一个连贯的模式。

7 结论

在本文中,我们将RNN应用于教育中的知识跟踪问题,在Assistments测试和Khan Academy Data上显示出比以往更先进的性能。我们的新模型有两个特别有趣的新特性:
(1)它不需要专家注释(它可以自己学习概念模式)
(2)它可以对任何可以矢量化的学生输入进行操作。与简单的隐马尔可夫方法相比,RNN的一个缺点是需要大量的训练数据,因此非常适合在线教育环境,而不是小课堂环境。

图4:DKT模型中练习之间的条件影响图。上图:我们在合成数据中观察到了潜在概念的完美聚类。下面是对8年级数学共同核心练习如何相互影响的令人信服的描述。箭头大小表示连接强度。注意,节点可以在两个方向上连接。幅值小于0.1的边已设置阈值。群集标签是手工添加的,但与每个群集中的练习完全一致。

RNN在知识追踪中的应用为未来的研究提供了很多方向。进一步的研究可以纳入其他特征作为输入(如花费的时间),探索其他教育影响(如提示生成、辍学预测),并验证教育文献中提出的假设(如间隔重复,模拟学生是如何忘记的)。因为DKT接受矢量输入,所以应该可以在更复杂的学习活动中跟踪知识。一个特别有趣的扩展是在学生解决开放式编程任务时跟踪他们的知识。使用最近开发的程序矢量化方法,我们希望能够在学生学习编程的过程中,随着时间的推移对他们的知识进行智能建模。
在与Khan Academy的持续合作中,我们计划在一个对照实验中测试DKT在课程规划方面的有效性,方法是在现场提出练习建议。

论文相关资料

Deep Knowledge Tracing(原文)
论文源码数据集

深度知识追踪(Deep Knowledge Tracing)·论文学习归纳相关推荐

  1. Deep Knowledge Tracing (深度知识追踪)

    boss又让我看这块的内容了,刚开学,还不太适应实验室的学习生活,假期闲散惯了操. 目录 1.概述 2.表示 3.1.DKT的优势 3.2.DKT的不足 4.模型 5.序列的输入和输出 输入 输出 6 ...

  2. 知识跟踪的深度知识跟踪和动态学生分类 Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing

    Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing(译) 知识跟踪的深度知识跟踪和动态学生分 ...

  3. Deep Knowledge Tracing with Transformers论文阅读

    In book: Artificial Intelligence in Education (pp.252-256) 2020年6月 代码https://github.com/scott-pu-pen ...

  4. Deep Knowledge Tracing

    1 Abstract 知识追踪--机器在学生与课程作业交互时对他们的知识进行建模--在计算机支持的教育中是一个公认的问题.尽管有效地建模学生知识会产生很高的教育影响,但这项任务存在许多固有的挑战.在本 ...

  5. Why Deep Knowledge Tracing has less Depth than Anticipated

    Why Deep Knowledge Tracing has less Depth than Anticipated 主要内容 Why Deep Knowledge Tracing has less ...

  6. 基于图神经网络的知识追踪的五篇论文

    本质上是预测回答的对错,是二元分类的预测问题 Context-Aware Attentive Knowledge Tracing 2020 <情境感知的注意力知识追踪>,注意力知识追踪,情 ...

  7. 可解释深度知识追踪模型-刘坤佳

    1 摘要 知识追踪任务通过建模用户的习题作答序列跟踪其认知状态,进而预测其下一时刻的答题情况,实现对用户知识掌握程度的智能评估.当前知识追踪方法多针对知识点建模,忽略了习题信息建模与用户个性化表征,并 ...

  8. ArcFace: Additive Angular Margin Loss for Deep Face Recognition 论文学习

    论文地址:https://arxiv.org/pdf/1801.07698.pdf Abstract 使用 DCNN 进行大规模人脸识别的一个主要挑战就是设计损失函数来增强判别能力.Center lo ...

  9. 【论文解读 ICEIT2022】Heterogeneous Graph Based Knowledge Tracing基于异构图的知识追踪

    文章目录 摘要 1 引言 2 相关工作 2.1 知识追踪 2.2 异构图嵌入 3 基于异构图嵌入的知识追踪 4 实验 5 结论 依然是两阶段 摘要 最近,随着在线辅导系统的发展,对知识追踪(Knowl ...

最新文章

  1. Map容器大小影响key的索引
  2. 基于NMAP日志文件的暴力破解工具BruteSpray
  3. 【错误记录】Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )
  4. python基础-字符串
  5. 颠倒整数的C语言程序,帮忙解决c语言题目1.编写一个程序,用户输入一个小于5位的正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。2.编...
  6. 腾讯DevOps全链路解决方案
  7. 史上最惨锦鲤即将来袭!奖品堪比5年高考3年模拟!
  8. C++ bitset类
  9. 计算机主机组成部分和功能,电脑的组成部分及作用
  10. Spring MVC 实践笔记
  11. scrapy 入门案例
  12. 一款可定制的外国jQuery图表插件jqplot
  13. 数字IC手撕代码--投票表决器
  14. Java线程状态与方法关系
  15. 执行oracle 函数,oracle 函数function语法及简单实例
  16. 研究背景与文献综述的区别是什么?
  17. android 平板的 dpi,Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸...
  18. SDK实现APP一键登录文档
  19. 2020秋季甲级PAT 7-4 Professional Ability Test (30 分)
  20. html渐变不兼容,CSS实现兼容性的渐变背景(gradient)效果兼容众多浏览器

热门文章

  1. 遨博协作机器人ROS开发 - ROS Melodic环境搭建与测试
  2. 陀螺仪器件选型MPU6050、BMX055、icm20602
  3. 自学Web前端开发学习讲解 – 入门篇
  4. 13个UI设计软件,一次满足你的UI设计需求
  5. 逛网上书店、看书评 and .....买书
  6. 【状语从句练习题】since 的时态问题
  7. ftk学习记(label篇)【转】
  8. 欧尼酱讲JVM(19)——执行引擎
  9. 怎么在pta上搜题_舵手期货图解2.7:沪深300、PTA、鸡蛋
  10. 通配符SSL证书的作用有哪些