《A Boundary-aware Neural Model for Nested Named Entity Recognition》
论文链接:A Boundary-aware Neural Model for Nested Named Entity Recognition
模型代码:Github
Abstract
在自然语言处理中,实体中包含其他实体是一种常见的情况。现有的大多数关于命名实体识别的工作只处理扁平实体,而忽略了嵌套实体。本文提出了一种边界感知的嵌套NER神经网络模型,它利用实体的边界来预测实体类别标签。模型通过使用序列标记模型来检测边界以精确定位实体。该模型在检测到的边界的基础上,利用边界相关区域预测实体类别标签,降低了分层序列标记模型的计算成本,缓解了误差传播问题。同时引入多任务学习来捕获实体边界及其类别标签的依赖关系,这有助于提高实体识别的性能。在嵌套NER数据集上的实验表明该模型优于其他最先进的方法。
1 Introduction
命名实体识别任务旨在定位非结构化文本中的命名实体并分类到预定义的类别中,如人名、地点或医疗代码。NER一般被视为单层序列标记问题(Lafferty et al., 2001; Lample et al., 2016),其中每个Token有且仅有一个标签。标签由实体边界标签和类别标签组成。例如,一个Token可以被标记为B-PER,其中B表示实体的边界标签,PER表示实体的类别标签。但是当实体相互嵌套时,单层序列标记模型不能同时提取两个实体,因为嵌套实体中的Token可能有不止一个实体类别标签。考虑图1中来自GENIA语料库的一个例子(Kim et al., 2003),“Human TR Beta 1”是一种蛋白质,同时也是DNA:“Human TR Beta 1 mRNA”的一部分。两个实体都包含一个相同的Token:“Human”。因此此Token应该有两个不同的类别标签。在这种情况下,为"Human"指定一个单独的类别标签是不合适的。
处理嵌套实体的传统方法依赖于手工制作的特征(Shen et al., 2003; Alex et al., 2007),并受限于复杂的特征工程。最近的研究使用神经网络模型来解决嵌套的NER,而不依赖于语言学特征或外部知识资源。Ju et al. (2018)提出了一种分层序列标记模型,Sohrab and Miwa (2018)提出了一种穷举区域分类模型。
- 分层序列标记模型首先提取内层实体(被其他实体所包含),然后把它们送到下一层去提取外部实体。因此,该模型存在误差传播。当上一层提取的实体错误时,会影响下一层的性能。而且,当先提取外部实体时,内部实体将不会被检测到。
- 穷举区域分类模型在一个句子中列举所有可能的区域或跨度,以预测单一神经网络层中的实体。该方法的一个问题是忽略了显式的边界信息,导致提取出一些非实体。考虑一个例子:在GENIA数据集的标记序列中,“novel TH protein”是一个实体,而“a novel TH protein” 不是一个实体。但是由于它们共享了许多Tokens,它们的融合区域表示彼此相似。“novel”和“protein” 是实体的边界。在没有边界信息的情况下,两个候选区域都将被提取以作为实体。
虽然分层序列标记模型和穷举区域分类模型有各自的不足之处,但两者是互补的。因此,我们可以结合它们来提高嵌套NER的性能。我们利用序列标记模型来考虑边界信息以定位实体。在上面提到的例子中,“novel”是实体“novel TH protein”的边界,然而"a"是一个一般的Token,它的表示方式不同于"novel"。在边界信息的引导下,该模型可以将“novel”作为实体的边界来检测,而不是"a"。我们还利用区域分类模型来预测实体,而不考虑内部实体和外部实体的依赖关系。在这种情况下,我们的模型不会出现误差传播问题。
本文提出了一种边界感知神经网络模型,它将序列标记模型和区域分类模型融合在一起。由于嵌套实体中的Tokens可以共享边界标签,因此我们采用单层序列标记模型来识别实体边界。例如图1中,"Human"可以被标记为B,尽管它是两个不同实体的开始。基于检测到的实体边界,我们通过对边界相关区域进行分类来预测实体类别标签。如图1所示,我们将标签为B的每个Token与标签为E的Token进行匹配。它们之间的区域被视为候选实体。候选实体的表示将被用来分类类别标签。
该模型比穷举区域分类模型有两方面的改进:(1)我们利用显式的边界信息来指导模型精确地定位和分类实体。穷举区域分类模型对实体区域进行分类,但我们的模型可以利用序列标记模型考虑边界Tokens的上下文信息,这有助于对边界的检测。(2)我们的模型只对边界相关区域进行分类,这些区域比所有可能区域都要少得多,这减少了时间成本。我们的模型比分层序列标记模型先进,因为我们提取实体时不区分内部实体和外部实体。
多任务学习被认为善于通过交替调整两个以上的子目标来优化整体目标,这些子目标相互强化(Ruder, 2017)。考虑到我们的边界检测模块和实体类别标签预测模块共享实体边界,我们采用多任务损失函数来同时训练这两个任务。通过双向长短时记忆(LSTM)层提取两个模块的共享特征。大量实验表明,多任务学习框架在很大程度上提高了最终性能。
综上所述,本文做出了以下主要贡献:
- 提出了一个边界感知神经网络模型,它利用实体边界来预测类别标签。模型通过使用序列标记模型检测边界来精确定位实体。该模型在检测边界的基础上,利用边界相关区域预测实体类别标签,降低了计算成本,缓解了误差传播问题。
- 引入多任务学习来捕获实体边界及其类别标签的依赖关系,这有助于提高实体识别的性能。
- 在公共嵌套的NER数据集上进行实验。实验结果表明,本文的模型优于以往的先进方法,并且推理速度更快。
2 Related Work
NER引起了许多NLP研究者的注意,因为实体链接(Gupta et al., 2017)、关系提取(Mintz et al., 2009; Liu et al., 2017)、共指消解(Chang et al., 2013)和会话系统(Ren et al., 2019)等下游任务都依赖于它。针对扁平命名实体识别任务已经提出了多种方法(Lample et al., 2016; Ma and Hovy, 2016; Strubell et al., 2017),但其中很少有针对嵌套实体的方法。嵌套实体的早期工作依赖于手工制作的特征或基于规则的后处理(Zhang et al., 2004; Zhou et al., 2004; Zhou, 2006)。他们用隐马尔可夫模型检测最内部的扁平实体,然后使用基于规则的后处理来提取外部实体。
虽然大多数工作关注的是命名实体,Lu and Roth(2015)提出了一种基于超图的新方法来解决实体Mention检测问题。他们方法的一个问题是超图的伪结构。Muis and Lu(2017)改进了Lu and Roth(2015)的方法,通过将Mention Separators和特征结合在一起。
近年来的研究表明,叠加像条件随机场(CRF)一样的序列模型可以从内到外提取实体。Alex et al. (2007)针对GENIA数据集提出了几种基于CRF的方法。但是,他们的方法不能识别相同类型的嵌套实体。Finkel and Manning (2009)提出了一种基于图表的解析方法,其中每个命名实体都是解析树中的一个组成部分。然而,他们的方法由于具有三次方时间复杂度而无法扩展到大型语料库。Ju et al. (2018)通过动态堆叠扁平NER层来提取嵌套实体,每个扁平层基于Bi-LSTM层和级联CRF层。他们的模型存在层与层之间的误差传播,当首先识别外部实体时,内部实体就不能被检测到。
序列模型(如CRF)很难提取嵌套实体。Wang et al. (2018)提出了一种使用森林表示的基于转换的嵌套Mention检测模型。他们模型的一个缺点是贪婪的训练和解码。Sohrab and Miwa (2018)在一个句子中考虑所有可能的区域,并将它们分为实体类型或非实体类型。然而,他们的穷举方法在检测实体类型时考虑了太多的无关区域(非实体区域),并将这些区域单独分类,而没有考虑上下文信息。我们的模型专注于边界相关区域,这是非常少的,明确利用边界信息有助于更精确地定位实体。
3 Method
本文提出了一种边界感知神经模型,该模型将边界信息考虑到实体的定位和分类中。模型的体系结构如图2所示。
模型建立在一个共享的双向LSTM层上。它利用LSTM层的输出来检测实体边界和预测类别标签。我们将实体边界提取为带有标签B和标签E的成对Tokens,B表示实体的开始,E表示实体的结束。将每个检测到的Token与标签B进行匹配,将其对应的Token与标签E进行匹配,将它们之间的区域识别为候选实体。然后使用共享LSTM对应区域的输出来表示实体,并将它们分类到类别标签中。
边界检测模块和实体类别标签预测模块同时使用多任务损失函数进行训练,该函数能够捕获实体边界及其类别标签的底层依赖关系。我们将详细描述模型的每个部分。
3.1 Token Representation
Ma and Hovy (2016)和Lample et al. (2016)成功利用字符嵌入进行扁平命名实体识别任务,我们据此来表示句子中的每一个Token。
对于一个由nnn个Tokens组成的句子(t1,t2,...tn)(t_1, t_2, ...t_n)(t1,t2,...tn),我们将第iii个Tokentit_iti的词嵌入表示为式(1):
其中ewe^wew表示一个词嵌入查找表(Embedding-lookup)。我们使用预先训练好的词嵌入(Chiu et al., 2016) 来初始化它。
我们通过整合字符表示法来捕捉单词的正字法和形态特征。将tit_iti内的字符表示为xicx_i^cxic,Tokentit_iti中每个字符的嵌入表示为ec(cj)e^c(c_j)ec(cj)。ece^cec是随机初始化的字符嵌入查找。然后我们将它们输入到一个双向的LSTM层来学习隐藏状态。前向和后向输出连接在一起以构造字符表示:
其中hic→\overrightarrow{h_i^c}hic
最终的Token表示形式如式(3)所示,其中[;][;][;]表示连接。
3.2 Shared Feature Extractor
如图2所示,我们利用双向LSTM作为共享特征提取器,采用硬参数共享机制(Ruder, 2017)进行多任务训练。硬参数共享机制大大降低了过拟合的风险(Baxter, 1997),增加了我们的边界检测模块和类别标签预测模块的相关性。具体来说,双向LSTM的隐藏状态可以表示为
其中xitx_i^txit是3.1节中提到的Token表示。我们将xitx_i^txit输入到Dropout层以防止过拟合。hit→\overrightarrow{h_i^t}hit
3.3 Entity Boundary Detection
之前关于扁平NER的研究(Lample et al., 2016; Ma and Hovy, 2016) 联合预测实体边界和类别标签。但是当实体嵌套在其他实体中时,一个单独的Token可以包含在许多不同的实体中。这意味着为每个Token分配一个类别标签是不合适的。
我们将嵌套NER划分为两个子任务:实体边界检测和类别标签预测任务。与为每个Token分配实体类别标签不同,我们首先预测边界标签。形式上,给定一个句子(t1,t2,...tn)(t_1, t_2, ...t_n)(t1,t2,...tn),以及句子中的一个实体。我们将实体表示为R(i,j)R(i,j)R(i,j),它表示该实体由一个连续的Token序列(ti,ti+1,...tj)(t_i, t_{i+1}, ...t_j)(ti,ti+1,...tj)组成。特别地,我们将边界Tokentit_iti标记为B, tjt_jtj标记为E。实体内的Tokens用标签I标记,而非实体Tokens用标签O标记。
检测实体边界的过程如图3所示。对于句子中的每个Tokentit_iti,通过将其对应的共享特征表示hith_i^thit送入ReLU激活函数和softmax分类器来预测边界标签:
其中UUU和bbb是可训练的参数。我们计算真实分布dit^\hat{d^t_i}dit^和预测分布ditd^t_idit之间的KL−KL-KL−散度多标签损失函数,如式(9):
条件随机场 (Lafferty et al., 2001)可以很好的建模序列标签依赖(例如,标签I必须在B之后)。由于我们的序列标签不同于扁平NER模型,我们对于Softmax还是CRF作输出层做了一个比较。
3.4 Entity Categorical Label Prediction
给定一个输入句子序列X=(x1,x2,...,xn)X=(x_1,x_2,...,x_n)X=(x1,x2,...,xn),以及相应的边界标签序列L=(l1,l2,...,ln)L=(l_1,l_2,...,l_n)L=(l1,l2,...,ln),我们将每个标记为B的Token与标记为E的Token进行匹配,以构造候选实体区域。特别是,考虑到存在包含单个Token的实体,我们首先将标签为B的Token与它们自己匹配。实体R(i,j)R(i,j)R(i,j)的表示由如下式子得到:
其中hkth_k^thkt为句子中第kkk个Token的共享双向LSTM层输出。我们只需平均边界区域内每个Token的表示。实体的最终表示将被发送到ReLU激活函数和Softmax层,以预测实体类别标签。我们在式子(11-12)中计算类别标签预测的损失:
其中Ui,jeU_{i,j}^eUi,je和bi,jeb_{i,j}^ebi,je是可训练的参数。di,je^\hat{d^e_{i,j}}di,je^和di,jed^e_{i,j}di,je分别表示实体类别标签的真实分布和预测分布。
3.5 Multitask Training
由于我们的模型在检测到所有边界相对区域后才对实体类别标签进行预测,因此存在不方便和效率低下的问题。考虑到我们的边界检测模块和实体类别标签预测模块共享相同的实体边界,我们采用多任务损失函数来同时训练这两个任务。
在训练阶段,我们将ground-truth边界标签输入到实体类别标签预测模块中,这样就可以在不受错误边界检测影响的情况下训练分类器。在测试阶段,会采集边界检测的输出。检测到的边界将表明在预测类别标签时应考虑哪些实体区域。多任务损失函数定义如下:
其中LbclsL_{bcls}Lbcls和LeclsL_{ecls}Lecls分别表示边界检测模块和实体类别标签预测模块的分类交叉熵损失函数。ααα是一个超参数,用来控制每个任务的重要程度。
4 Experimental Settings
4.1 Dataset
为了提供所提出模型有效性的经验证据,我们在三个嵌套NER数据集上进行了实验: GENIA (Kim et al., 2003), JNLPBA (Kim et al., 2004)和GermEval 2014 (Benikova et al., 2014)。
GENIA数据集是基于 GENIA v3.0.2 语料库构建的。我们按照 (Finkel and Manning, 2009)和(Lu and Roth, 2015)的相同设置对数据集进行预处理。数据集按照8.1:0.9:18.1:0.9:18.1:0.9:1被划分为训练、开发和测试集。GENIA数据集的统计数据如表1所示。
JNLPBA数据集来源于GENIA语料库。它包含一个训练和测试数据集。然而,只有扁平实体和最顶层实体被保留下来。我们按照GENIA数据集相同的设置将子类别分解为5个类别。
GermEval 2014数据集包含德语嵌套命名实体。该数据集覆盖了31000多个句子,对应于59万多个Tokens。
4.2 Baseline Methods
我们将我们的模型与GENIA数据集上的几个最先进的模型进行了比较。这些方法可以分为三组:
Finkel and Manning (2009)和Ju et al. (2018)提出了基于CRF的序列标记方法用于嵌套命名实体识别。Finkel and Manning (2009)利用实体级特征,而Ju et al. (2018)基于神经网络的方法。我们重新运行了Ju et al. (2018)的代码,因为他们没有共享他们的预处理数据集。
Sohrab and Miwa (2018)提出了一种针对嵌套区域的穷举区域分类模型。我们根据他们的论文重现了他们的方法,因为他们没有共享代码。
Lu and Roth (2015)和Muis and Lu (2017)构建超图来表示嵌套实体及其Mentions。Muis and Lu (2017)改进了Lu and Roth (2015)的方法。
4.3 Parameter Settings
我们的模型是由PyTorch框架实现的。我们使用Adam优化器来训练我们的模型。与Ju et al. (2018)和Sohrab and Miwa (2018)一样,我们使用200维的预训练词嵌入初始化词向量,而字符嵌入则设置为50维并随机初始化。学习率设置为0.005。在训练阶段,对于部署在Token-level LSTM后的Dropout层,我们将Dropout Rate设置为0.5。共享的双向LSTM的输出维数是200。多任务损失函数中的系数ααα在开发过程中进行调整。我们所有的实验都是在同一台机器上进行的(NVIDIA 1080ti GPU and Intel i7-8700 CPU)。
4.4 Evaluation Metrics
我们使用一种严格的评估指标:当实体边界和实体类别标签同时正确时,实体才被认为是正确的。我们采用精确率(Precision)、召回率(Recall)和F值(F-score)来评价该算法的性能。
5 Results and Discussion
5.1 Overall Evaluation
我们在GENIA测试数据集上进行了嵌套命名实体识别实验。表2显示,我们的方法在召回率和F值上都优于比较方法。基于CRF的模型被认为在序列标记任务中更有效,因此我们比较了Softmax和CRF作为边界检测模块的输出层的利用率。结果显示,他们在准确率、召回率和F值方面得分相当。然而,基于CRF的模型耗时较长,推理速度比基于Softmax的模型慢3-5倍。
我们模型的召回率为73.6%,在召回率方面有较大的优势。我们认为与其他方法相比,我们的模型在提取实体边界时更为精确。我们在边界检测模块的实验中对其进行了评估。
来自KONVENS 2014共享任务的GermEval 2014数据集是一个德国NER数据集。它包含很少的嵌套实体。该数据集上的先前工作忽略嵌套实体或在两个独立模型中提取内部和外部实体。我们的方法可以以端到端的方式提取嵌套实体。我们将我们的方法与两种最先进的方法进行比较,如表3所示。结果表明我们的方法在召回率和F值上都优于他们的方法。
表4描述了我们的模型在测试数据集中五个类别上的性能。我们的模型在所有类别上的F值都优于Ju et al. (2018)和Sohrab and Miwa (2018)所描述的模型。
5.2 Performance of Boundary Detection
我们进行了边界检测实验,以证明我们的模型比Sohrab and Miwa (2018)和Ju et al. (2018)可以更精确地提取实体边界。表5给出了在GENIA测试数据集上边界检测的结果。我们的模型比比较方法可以更准确地定位实体,具有更高的召回值 (76.9%)。这就解释了为什么我们的模型在召回率上优于其他最先进的方法。我们显式地利用边界信息,并利用多任务损失函数来衡量边界和实体类别标签之间的依赖关系。而在Sohrab and Miwa (2018)的方法中,候选实体区域是单独分类的。
表6描述了我们的模型在检测句子中每个Token的边界标签方面的性能。结果是基于共享的双向LSTM和一个Softmax分类器得到的。我们的模型在提取实体边界时具有相对较高的性能。这有助于预测实体类别标签,因为候选实体区域更有可能是真正的实体。
5.3 Inference Time
图4(a)显示了我们使用的基于Softmax的模型和Sohrab and Miwa (2018)模型中候选实体区域的数量对比。与对句子中所有可能的区域进行分类相比,我们的模型只关注与边界相关的区域,而这要少得多。我们在图4(b)中比较了我们的模型与Sohrab and Miwa (2018)和Ju et al. (2018)模型的推理速度。我们的模型比Sohrab and Miwa (2018)模型大约快四倍,比Ju et al. (2018)模型大约快三倍。Ju et al. (2018)模型所使用的级联CRF层限制了推理速率。
5.4 Performance of Multitask Learning
表7显示了流水线模型和多任务模型在GENIA开发集和测试集上的性能。对于流水线模型,我们分别训练边界检测模块和实体类别标签预测模块。结果表明多任务模型在开发集和测试集上都有较高的F值。
多任务学习可以捕获边界和实体类别标签的潜在依赖关系。它帮助模型将注意力集中在那些真正重要的特征上(Ruder, 2017)。在流水线模型中,实体类别预测模块与边界检测模块是单独训练的,因此不会共享信息。然而实体类别预测模块和边界检测模块具有相同的实体边界。我们分配了一个共享的特征提取器(双向LSTM层)来提取实体类别预测和边界检测中共同使用的特征。结果表明,多任务学习框架提高了最终性能。
5.5 Ablation Study and Flat NER
我们在GENIA开发集上进行了消融实验,以评估包括Dropout层、预训练词嵌入和字符级LSTM在内的神经网络组件的贡献。结果如表8所示。结果表明所有这些组件都有助于我们模型的有效性,Dropout层对准确性和召回值都有显著的贡献。
为了证明我们的模型可以在嵌套NER和扁平NER任务上工作,我们在JNLPBA数据集上进行了实验。我们的F值达到了73.6,与Gridach (2017)的最先进结果相当。
6 Case Study
表9显示了一个将我们的模型与穷举模型(Sohrab and Miwa, 2018)和分层模型(Ju et al., 2018)进行比较的案例。在本例中,“human TATA binding factor”是一个嵌套在实体“transcriptionally active human TATA binding factor”中的实体。我们的多任务学习模型提取出了这两个实体,并具有精确边界和实体类别标签。穷举模型得到了错误边界,并忽略了实体中的“human”。与只检测外部实体的分层模型相比,我们的模型同时提取了内部实体和外部实体。结果表明,将序列标记模型和区域分类模型相结合,可以对实体进行精确定位,并提取出内部实体和外部实体。
对于我们的流水线模型,如果没有来自实体类别标签的依赖关系信息,它就会忽略外部实体边界,而只提取内部实体边界。它验证了多任务学习可以在边界检测模块和实体类别标签预测模块之间共享边界信息,这对于嵌套NER非常有效。
7 Conclusion
本文提出了一个边界感知模型,该模型利用边界来预测实体类别标签。该模型结合了序列标记模型和区域分类模型,实现了对嵌套实体的高效定位和分类。为了捕获边界检测模块和实体类别预测模块的底层依赖关系,我们采用多任务损失来同时训练这两个任务。我们的模型在F值方面优于现有的嵌套模型。
在未来的工作中,我们考虑对实体区域间的依赖关系进行显式建模,并提高边界检测模块的性能,这对实体类别标签的预测具有重要意义。
《A Boundary-aware Neural Model for Nested Named Entity Recognition》相关推荐
- 《Deep Exhaustive Model for Nested Named Entity Recognition》
论文链接:Deep Exhaustive Model for Nested Named Entity Recognition Abstract 我们提出了一种简单的深层神经网络模型用于嵌套命名实体 ...
- [论文阅读笔记14]Nested named entity recognition revisited
一, 题目 Nested Named Entity Recognition Revisited 重访问的嵌套命名实体识别 二, 作者 Arzoo Katiyar and Claire Cardie D ...
- Nested Named Entity Recognition from Medical Texts: An Adaptive Shared Network Architecture with Att
论文名称:Nested Named Entity Recognition from Medical Texts: An Adaptive Shared Network Architecture wit ...
- 回归初心——读《Deep Big Simple Neural Nets Excel on Hand-written Digit Recognition》
见个人博客: https://ziyubiti.github.io/2016/10/18/mlppaper/
- 论文笔记 Bipartite Flat-Graph Network for Nested Named Entity Recognition | ACL2020
论文作者: 论文链接:https://arxiv.org/pdf/2005.00436.pdf 代码实现:https://github.com/cslydia/BiFlaG Abstract 作者为嵌 ...
- 【ACL 2021】Locate and Label A Two-stage Identifier for Nested Named Entity Recognition
一.Introduction 命名实体识别(NER)是自然语言处理中一项研究非常广泛的任务.传统的NER研究只处理平面实体,而忽略了嵌套实体.例如:北京大学,北京大学不仅是一个组织,同时北京也是一个地 ...
- 《Parallel Instance Query Network for Named Entity Recognition》论文阅读
来源:ACL 2022 论文认为存在的问题: 当前的NER任务被转换为MRC任务,但是存在以下问题: 每次一个问题只能抽取到一种类型的实体,效率不够高 不同实体之间抽取是分割,没有考虑到实体之间的依赖 ...
- 论文阅读笔记(三)【ACL 2021】Locate and Label: A Two-stage Identifier for Nested Named Entity
论文标题: Locate and Label: A Two-stage Identifier for Nested Named Entity Recognition 论文链接: https://arx ...
- 视频显著性检测----《Flow Guided Recurrent Neural Encoder for Video Salient Object Detection》
本文将重点与大家探讨和分享发表于CVPR2018上的视频显著性检测文章–<Flow Guided Recurrent Neural Encoder for Video Salient Objec ...
最新文章
- OO实现ALV TABLE 八:ALV的布局功能
- 通过LDAP验证Active Directory服务
- oracle日常函数应用,oracle日常 常用函数与脚本
- 折线分割平面(HDU-2050)
- 了解PostCSS原理
- 什么是句柄?为什么会有句柄?HANDLE
- Spring Boot 2.x 集成 SLF4j + log4j2 日志框架
- Hvdc-vsc. 基于vsc的柔性直流输电模型 pscad实现
- HEVC与AVC的区别与联系(十二)
- Javamail配置阿里云邮箱发送邮件
- 【索引】Rujia Liu's Problems for Beginners
- 指南:情人节表白h5源码
- 精仿互站模板 友价源码商城T5内核二次开发运营版
- 荣耀70什么时候发布 荣耀70发布时间曝光
- 【刷题日记】网易——丰收
- Wootrade 评级报告:B,展望稳定 | TokenInsight
- Discuz论坛推广的十个方向总结
- java 方麦子_南方麦子什么时候成熟?小麦有什么营养价值呢?
- Teamcenter: RAC开发
- 为等待特朗普政府审核,DHS未按时提交网络安全战略
热门文章
- git操作遇见fatal: Exiting because of unfinished merge.错误
- 为了自己的身体学几道药膳养生菜谱犒劳自己
- 建筑能耗管理系统,大型公共建筑电能耗的监测及能源管理迫在眉睫!
- 【视觉高级篇】25 # 如何用法线贴图模拟真实物体表面
- 10招搞定MES系统软件项目
- 【ES6】Module 语法(import 和 export)
- 如何设计大量数据的查重和去重
- Android资源编译和打包过程分析
- android 写号工具原理,MTK平台IMEI写号工具操作说明.pdf
- NvidiaKepler开普勒Ventura13.1 驱动成功