【论文笔记】命名实体识别论文
其实实体识别这块看了挺久了的,今天就来好好聊一聊它。实体识别(Name Entity Recognition)是属于NLP任务中的序列标注问题:给定一个输入句子,要求为句子中的每一个token做实体标注(如人名、组织/机构、地名、日期等等)。
NER算法回顾
明白了NER任务的目的,那我们就来看看具体是怎么实现的。到目前为止,可以大致分为基于规则、基于传统机器学习方法和基于深度学习方法这三大类(其实很多任务的算法都可以从这三个方面去入手)。基于规则的方法效果可能很高,但是实在是太硬核了,很大程度上取决于个人对规则的定义,而且费时费力,基本不可取。
传统机器学习
不是今天的重点。简单介绍一下标准流程:
Training
- 获取训练数据(文本+标注)
- 设计适合该文本和类别的特征提取方法
- 训练一个类别分类器来预测每个token的label
Predicting
- 获取测试数据
- 运行训练好的模型给每个token做标注
- 输出实体
深度学习方法
也不是今天的重点。最经典最sate-of-the-art的模型就是LSTM+CRF(当然得除去bert这种)
paper list:
- Fast and Accurate Entity Recognition with Iterated Dilated Convolutions(2017) [paper]
- Chinese NER Using Lattice LSTM(2018)[paper]
- Adversarial Transfer Learning for Chinese Named Entity Recognition
with Self-Attention Mechanism(2018)[paper] - Adversarial Learning for Chinese NER from Crowd Annotations(2018)[paper]
- Adaptive Co-Attention Network for Named Entity Recognition in Tweets(2018)[paper]
Paper: IDCNN for NER
前面废话了那么多,赶紧开始吧。
众所周知,目前在NLP领域用的最多的还是要数RNN这一个大类,因为RNN简直就是为文本这类序列数据而生的。但是在实现中也会有很多问题,所以这时候就可能试试CNN。相对于RNN, CNN由于可以并行训练,使得其训练速度远远高与RNN,可以使得在精度不变或损失一点的情况下打打提高效率。这一点也在前面文本分类任务中有提及。 【论文复现】使用CNN进行文本分类
Fast and Accurate Entity Recognition with Iterated Dilated Convolutions(2017)这篇论文就是基于CNN类来做命名实体识别的。
传统CNN的缺陷
CNN运用于文本处理,有一个劣势,就是经过卷积之后,末层神经元可能只是得到了原始输入数据中一小部分的信息。所以为了获取上下文信息,可能就需要加入更多的卷积层,导致网络原来越深,参数越来越多,而模型越大越容易导致过拟合问题,所以就需要引入Dropout之类的正则化,带来更多的超参数,整个网络变得庞大冗杂难以训练。
Dilated CNN
基于上述问题,Multi-Scale Context Aggregation by Dilated Convolutions一文中提出了dilated convolutions,中文意思大概是“空洞卷积”。正常CNN的filter,都是作用在输入矩阵一片连续的位置上,不断sliding做卷积,接着通过pooling来整合多尺度的上下文信息,这种方式会损失分辨率。既然网络中加入pooling层会损失信息,降低精度。那么不加pooling层会使感受野变小,学不到全局的特征。如果我们单纯的去掉pooling层、扩大卷积核的话,这样纯粹的扩大卷积核势必导致计算量的增大,此时最好的办法就是Dilated Convolutions(扩张卷积或叫空洞卷积)。
具体使用时,dilated width会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而receptive field却是指数增加的,可以很快覆盖到全部的输入数据。
对应到文本上,输入是一维向量:
Iterated Dilated CNN
论文中提出的IDCNN模型是4个结构相同的Dilated CNN block拼接在一起,每个block里面是dilation width为1,1,2的三层DCNN。
IDCNN对输入句子的每一个字生成一个logits,这里就和biLSTM模型输出logits之后完全一样,放入CRF Layer,用Viterbi算法解码出标注结果。
在biLSTM或者IDCNN这样的深度网络模型后面接上CRF层是一个序列标注很常见的方法。biLSTM或者IDCNN计算出的是每个词分类的概率,而CRF层引入序列的转移概率,最终计算出loss反馈回网络。
关于IDCNN在NER任务的实现:
官方开源代码
超1k satr github代码
Paper: Chinese NER Using Lattice LSTM
作者首先综述了目前NER算法的主要思路,然后集中于LSTM-CRF模型分析了集中变种模型的优缺点:
- 基于词的LSTM-CRF:一般的pipeline是对文本进行分词之后embedding后输入深度网络预测序列中单词的类别标记。但是这样的话会受限于分词那一步的表现,也就是说如果分词过程效果不好的话,会进一步影响整个NER模型的误差。而对于NER任务中,许多词都是OOV;
- 基于字的LSTM-CRF:那么把词输入改为字输入是不是会有所改进呢?答案是肯定的。因为字向量可以完美克服上述分词过程引入的误差。但是如果单纯采用字向量的话会丢失句子中词语之间的内在信息。(当然基于该问题,学者们也提出了很多解决方案:例如利用segmentation information作为NER模型的soft features;使用multi-task learning等等)
Lattice LSTM 模型
基于上述问题,作者们提出了一种新型的Lattice LSTM:将潜在的词语信息融合到基于字模型的传统LSTM-CRF中去,而其中潜在的词语信息是通过外部词典获得的。如下所示,lattice lstm模型会在字向量的基础上额外获取词特征的信息。
但是上述模型中每个词语路径都考虑的话,会导致模型复杂度的指数增长,于是作者利用门结构来控制信息流动。例如,以最后一个“桥”字为例,除了需要考虑该字本身的向量特征,还需要考虑“长江大桥”和“大桥”这些词语信息的贡献量,而这个就是由图中红色圈圈代表的门结构来控制信息流入的。
在论文中,作者们还提出了自己改进过的基于字和词语的NER模型,但是这些应该都是为了最后的Lattice LSTM做铺垫的,所以这里就不做详细介绍。关于Lattice的整体模型如下:
- 模型的输入为字向量:c1,c2,...,cmc_1,c_2,...,c_mc1,c2,...,cm与所有与外部分词词典对应的字序列:wb,edw_{b, e}^{d}wb,ed(表示该词语起始于句子下标b,结束于句子下标e,例如w7,8dw_{7,8}^{d}w7,8d代表“大桥”)
- 经过Embedding层映射,其中每一个字和词被表示为:
xjc=ec(cj)x^c_j=e^c(c_j)xjc=ec(cj) xb,ew=ew(wb,ed)\mathbf{x}_{b, e}^{w}=\mathbf{e}^{w}\left(w_{b, e}^{d}\right)xb,ew=ew(wb,ed) - 然后将字表示部分送入LSTM网络训练,就是经典的那个结构
[ijcojcfjcc~jc]=[σσσtanh](Wc⊤[xjchj−1c]+bc)\left[ \begin{array}{c}{\mathbf{i}_{j}^{c}} \\ {\mathbf{o}_{j}^{c}} \\ {\mathbf{f}_{j}^{c}} \\ {\tilde{c}_{j}^{c}}\end{array}\right]=\left[ \begin{array}{c}{\sigma} \\ {\sigma} \\ {\sigma} \\ {\tanh }\end{array}\right]\left(\mathbf{W}^{c \top} \left[ \begin{array}{c}{\mathbf{x}_{j}^{c}} \\ {\mathbf{h}_{j-1}^{c}}\end{array}\right]+\mathbf{b}^{c}\right) ⎣⎢⎢⎡ijcojcfjcc~jc⎦⎥⎥⎤=⎣⎢⎢⎡σσσtanh⎦⎥⎥⎤(Wc⊤[xjchj−1c]+bc)cjc=fjc⊙cj−1c+ijc⊙c~jchjc=ojc⊙tanh(cjc)\begin{aligned} \mathbf{c}_{j}^{c} &=\mathbf{f}_{j}^{c} \odot \mathbf{c}_{j-1}^{c}+\mathbf{i}_{j}^{c} \odot \widetilde{\boldsymbol{c}}_{j}^{c} \\ \mathbf{h}_{j}^{c} &=\mathbf{o}_{j}^{c} \odot \tanh \left(\mathbf{c}_{j}^{c}\right) \end{aligned}cjchjc=fjc⊙cj−1c+ijc⊙cjc=ojc⊙tanh(cjc) - 如果只有以上部分就仅仅与基于字向量的LSTM相同了,本文继续计算了词向量的表示:
[ib,ewfb,ewc~b,eψ]=[σσtanh](Ww⊤[xb,ewhbc]+bw)\left[ \begin{array}{c}{\mathbf{i}_{b, e}^{w}} \\ {\mathbf{f}_{b, e}^{w}} \\ {\widetilde{c}_{b, e}^{\psi}}\end{array}\right]=\left[ \begin{array}{c}{\sigma} \\ {\sigma} \\ {\tanh }\end{array}\right]\left(\mathbf{W}^{w \top} \left[ \begin{array}{c}{\mathbf{x}_{b, e}^{w}} \\ {\mathbf{h}_{b}^{c}}\end{array}\right]+\mathbf{b}^{w}\right)⎣⎡ib,ewfb,ewcb,eψ⎦⎤=⎣⎡σσtanh⎦⎤(Ww⊤[xb,ewhbc]+bw)cb,ew=fb,ew⊙cbc+ib,ew⊙c~b,ew\mathbf{c}_{b, e}^{w}=\mathbf{f}_{b, e}^{w} \odot \mathbf{c}_{b}^{c}+\mathbf{i}_{b, e}^{w} \odot \widetilde{\boldsymbol{c}}_{b, e}^{w}cb,ew=fb,ew⊙cbc+ib,ew⊙cb,ew
注意这里并没有输出门,因为我们的词向量只是作为一种额外特征,最终的类别标记还是从字向量那一套LSTM中获取。 - 那么我们怎么把词语信息特征加入到最终需要输出的字向量的那一套LSTM中去呢?使用了一个额外的门控制每一个词语信息对与其对应的字的贡献:
ib,ec=σ(Wl⊤[xeccb,ew]+bl)\mathbf{i}_{b, e}^{c}=\sigma\left(\mathbf{W}^{l \top} \left[ \begin{array}{c}{\mathbf{x}_{e}^{c}} \\ {\mathbf{c}_{b, e}^{w}}\end{array}\right]+\mathbf{b}^{l}\right)ib,ec=σ(Wl⊤[xeccb,ew]+bl) - 更新我们的字向量LSTM中的状态向量:
cjc=∑b∈{b′∣wb′,jd∈D}αb,jc⊙cb,jw+αjc⊙c~jc\mathbf{c}_{j}^{c}=\sum_{b \in\left\{b^{\prime} | w_{b^{\prime}, j}^{d} \in \mathbb{D}\right\}} \boldsymbol{\alpha}_{b, j}^{c} \odot c_{b, j}^{w}+\boldsymbol{\alpha}_{j}^{c} \odot \tilde{c}_{j}^{c}cjc=b∈{b′∣wb′,jd∈D}∑αb,jc⊙cb,jw+αjc⊙c~jc
这里两个alpha系数是门控制输出值ib,jc\mathbf{i}_{b, j}^{c}ib,jc和ijc\mathbf{i}_{j}^{c}ijc的归一值。计算公式为:αb,jc=exp(ib,jc)exp(ijc)+∑b′∈{b′′∣wb′′,jd∈D}exp(ib′,jc)αjc=exp(ijc)exp(ijc)+∑b′∈{b′′∣wb′′,jd∈D}exp(ib′,jc)\begin{array}{c}{\boldsymbol{\alpha}_{b, j}^{c}=\frac{\exp \left(\mathbf{i}_{b, j}^{c}\right)}{\exp \left(\mathbf{i}_{j}^{c}\right)+\sum b^{\prime} \in\left\{b^{\prime \prime} | w_{b^{\prime \prime}, j}^{d} \in \mathbb{D}\right\}} \exp \left(\mathbf{i}_{b^{\prime}, j}^{c}\right)} \\ {\alpha_{j}^{c}=\frac{\exp \left(\mathbf{i}_{j}^{c}\right)}{\exp \left(\mathbf{i}_{j}^{c}\right)+\sum b^{\prime} \in\left\{b^{\prime \prime} | w_{b^{\prime \prime}, j}^{d} \in \mathbb{D}\right\}} \exp \left(\mathbf{i}_{b^{\prime}, j}^{c}\right)}\end{array}αb,jc=exp(ijc)+∑b′∈{b′′∣wb′′,jd∈D}exp(ib,jc)exp(ib′,jc)αjc=exp(ijc)+∑b′∈{b′′∣wb′′,jd∈D}exp(ijc)exp(ib′,jc)
至此LSTM模型部分已经搭建完成了,总结一下:就是由两套LSTM子结构分别是基于字的和基于词的,然后得到基于词的状态输出之后将其加入到基于字的结构中输出预测。
之后就是跟其他模型一样套上一层CRF层。
打完收工。不知道有没有讲清楚,欢迎留言讨论~
代码实现
官方开源代码
看了一下好像没有TF实现的star比较高的代码,暂时就先不贴了。
Paper: ATL for NER
来自论文Adversarial Transfer Learning for Chinese Named Entity Recognition with Self-Attention Mechanism。
主要抓住三个关键词,也是构建本文模型的关键点:
- Adversarial Transfer Learning:对抗迁移学习
- task-share:本文中是将NER与CWS(Chinese Word Segment)两个类似的任务综合训练
- self-attention:为了解决长程依赖问题
整个框架看图也比较好理解,左半部分是NER任务学习网络, 右半部分是CWS任务学习网络,中间则是对抗学习网络。
Adversarial training 用来预测当前输入是哪一个task, NER 或者 CWS,希望shared bilstm学到的信息跟具体任务无关,而跟ner 和 cws task 都有关。Transfer learning to learn task-shared information, adversarial training to remove task-specific information.
Paper:Adversarial Learning for Chinese NER from Crowd Annotations
在训练命名实体识别系统时,往往需要大量的人工标注语料。为了保证质量,通常需要雇佣专家来进行标注,但这样会造成代价成本高且规模难于扩大。另一种方式是采用众包标注方法,雇佣普通人员来快速低成本完成标注任务,但这样获取的数据含有很多噪音。
作者提出了一种利用众包标注数据学习对抗网络模型的方法,来构建中文实体识别系统。受对抗网络学习的启发,他们在模型中使用了两个双向 LSTM 模块,来分别学习标注员的公有信息和属于不同标注员的私有信息。对抗学习的思想体现在公有块的学习过程中,以不同标注员作为分类目标进行对抗学习。从而达到优化公有模块的学习质量,使之收敛于真实数据 (专家标注数据)。算法框架如下:
Baseline: LSTM-CRF
右边模块属于传统的NER网络:BiLSTM+CRF ,在文章中也被叫做 private LSTM,用于拟合不同标注员的独立标注。
Worker Adversarial
对抗学习部分,首先第一块是一个common LSTM
, 输入与private LSTM
一样为中文句子的字向量,目的是学习不同标注员之间共同的部分。第二块是一个label LSTM
,输入为对应标注员的标签数据。要注意的是,我们希望标注员分类器最终失去判断能力,所以它在优化时要反向更新
R(Θ,Θ′,X,y‾,z‾)=loss(Θ,X,y‾)−loss(Θ,Θ′,X)=−logp(y‾∣X)+logp(z‾∣X,y‾)\begin{aligned} \mathrm{R}\left(\Theta, \Theta^{\prime}, \mathbf{X}, \overline{\mathbf{y}}, \overline{z}\right) &=\operatorname{loss}(\Theta, \mathbf{X}, \overline{\mathbf{y}})-\operatorname{loss}\left(\Theta, \Theta^{\prime}, \mathbf{X}\right) \\ &=-\log p(\overline{\mathbf{y}} | \mathbf{X})+\log p(\overline{z} | \mathbf{X}, \overline{\mathbf{y}}) \end{aligned}R(Θ,Θ′,X,y,z)=loss(Θ,X,y)−loss(Θ,Θ′,X)=−logp(y∣X)+logp(z∣X,y)
Paper:Adaptive Co-Attention Network for Named Entity Recognition in Tweets
文章提出之前关于NER的研究仅仅关注文本信息是不够的,因为在社交网络(如推特等)上很多内容都是包含图片的,而且如下图所示仅仅考虑文本信息我们可能会认为"Rocky"是一个人名,但是综合考虑图片信息之后就可以判定其为一条狗。基于以上,文章提出一种综合考虑文本和图像信息的NER网络。
对于文本信息: 使用CNN提取字符向量表示,并从lookup table中提出word embedding。输入为两者的拼接,送入Bi-LSTM抽取更高层特征表示。
对于图像信息: 利用16层的VGG-net,注意本文抽取的特征是last pooling layer。并用一个全联接层转化为和文本信息相同维度的向量。
Adaptive Co-attention Network
如上图右半部分所示,包含了两个attention和两个gate mechanism。
Word-Guided Visual Attention
用于表征对于输入中的特定的词,对应整个图像中的哪个部分。输入为第t时间步的单词表示hth_{t}ht和图像特征矩阵vIv_{I}vI,然后做attention操作zt=tanh(WvIvI⊕(Whtht+bht))z_{t}=\tanh \left(W_{v_{I}} v_{I} \oplus\left(W_{h_{t}} h_{t}+b_{h_{t}}\right)\right)zt=tanh(WvIvI⊕(Whtht+bht))αt=softmax(Wαtzt+bαt)\alpha_{t}=\operatorname{softmax}\left(W_{\alpha_{t}} z_{t}+b_{\alpha_{t}}\right)αt=softmax(Wαtzt+bαt)v^t=∑iαt,ivi\hat{v}_{t}=\sum_{i} \alpha_{t, i} v_{i}v^t=i∑αt,ivi
Image-Guided Textual Attention
同上,通过结合图片信息,来综合考虑句子中每一个词对整体的贡献。输入为句子经过LSTM后的所有隐层表示x=(h1,h2,⋯,hn)x=\left(h_{1}, h_{2}, \cdots, h_{n}\right)x=(h1,h2,⋯,hn)和上一步得到的图像权重v^t\hat{v}_{t}v^t
zt′=tanh(Wxx⊕(Wx,v^tv^t+bx,v^t))βt=softmax(Wβtzt′+bβt)h^t=∑jβt,jhj\begin{array}{l}{z_{t}^{\prime}=\tanh \left(W_{x} x \oplus\left(W_{x, \hat{v}_{t}} \hat{v}_{t}+b_{x, \hat{v}_{t}}\right)\right)} \\ {\beta_{t}=\operatorname{softmax}\left(W_{\beta_{t}} z_{t}^{\prime}+b_{\beta_{t}}\right)} \\ {\hat{h}_{t}=\sum_{j} \beta_{t, j} h_{j}}\end{array}zt′=tanh(Wxx⊕(Wx,v^tv^t+bx,v^t))βt=softmax(Wβtzt′+bβt)h^t=∑jβt,jhj
Gated Multimodal Fusion
用于自适应地从文本和图像中学习有用的特征。hv^t=tanh(Wv^tv^t+bv^t)hh^t=tanh(Wh^th^t+bh^t)gt=σ(Wgt(htt⊕hh^t))mt=gthv^t+(1−gt)hh^t\begin{aligned} h_{\hat{v}_{t}} &=\tanh \left(W_{\hat{v}_{t}} \hat{v}_{t}+b_{\hat{v}_{t}}\right) \\ h_{\hat{h}_{t}} &=\tanh \left(W_{\hat{h}_{t}} \hat{h}_{t}+b_{\hat{h}_{t}}\right) \\ g_{t} &=\sigma\left(W_{g_{t}}\left(h_{t_{t}} \oplus h_{\hat{h}_{t}}\right)\right) \\ m_{t} &=g_{t} h_{\hat{v}_{t}}+\left(1-g_{t}\right) h_{\hat{h}_{t}} \end{aligned}hv^thh^tgtmt=tanh(Wv^tv^t+bv^t)=tanh(Wh^th^t+bh^t)=σ(Wgt(htt⊕hh^t))=gthv^t+(1−gt)hh^t
Filtration Gate
上面的多模态的信息用门控的方式进行融合,由于文本信息还是占主要部分,再通过一个过滤门控,因为,在预测动词或副词的标签时,图像特征是不必要的。由于多模态融合特征或多或少地包含图像特征并且可能引入一些噪声,使用过滤门来组合来自不同信号的特征,这些特征更好地代表解决特定问题所需的信息。
st=σ(Wst,htht⊕(Wmt,stmt+bmt,st))ut=st(tanh(Wmtmt+bmt))m^t=Wm^t(ht⊕ut)\begin{aligned} s_{t} &=\sigma\left(W_{s_{t}, h_{t}} h_{t} \oplus\left(W_{m_{t}, s_{t}} m_{t}+b_{m_{t}, s_{t}}\right)\right) \\ u_{t} &=s_{t}\left(\tanh \left(W_{m_{t}} m_{t}+b_{m_{t}}\right)\right) \\ \hat{m}_{t} &=W_{\hat{m}_{t}}\left(h_{t} \oplus u_{t}\right) \end{aligned}stutm^t=σ(Wst,htht⊕(Wmt,stmt+bmt,st))=st(tanh(Wmtmt+bmt))=Wm^t(ht⊕ut)
最后是一个标准的CRF tagging层。
以上
2019.04.10
【论文笔记】命名实体识别论文相关推荐
- 2021ACL 命名实体识别论文汇总
2021 ACL已接受论文网址:ACL-IJCNLP 2021 命名实体识别论文汇总: 1.Named Entity Recognition with Small Strongly Labeled a ...
- lstm原始论文_命名实体识别NER论文调研
因为NER任务与笔者之前做的CCF互联网金融新实体识别竞赛相关,所以这两个月也调研了一些NER的算法,这两年的NER算法思想主要集中在将词典信息融入训练过程,达到减少中文语义歧义的效果. CCF互联网 ...
- 命名实体识别_用膨胀卷积进行命名实体识别 NER
BiLSTM+CRF 是命名实体识别中最为流行的模型,但是 LSTM 需要按顺序处理输入的序列,速度比较慢.而采用 CNN 可以更高效的处理输入序列,本文介绍一种使用膨胀卷积进行命名实体识别的方法 I ...
- 超详综述 | 基于深度学习的命名实体识别
©PaperWeekly 原创 · 作者|马敏博 单位|西南交通大学硕士生 研究方向|命名实体识别 论文名称:A Survey on Deep Learning for Named Entity Re ...
- 《复杂命名实体识别》
1 常见词汇解释 Mention: 可参考:命名实体识别相关论文中常出现的Mention该如何理解? Span: 可参考: Token: 可参考:NLP领域中的Token和Tokeniza ...
- 【ACL2021】基于边界检测增强的中文命名实体识别
点击下面卡片,关注我呀,每天给你送来AI技术干货! 来自:复旦DISC 作者:石霭青 引言 命名实体识别(Named Entity Recognition,NER)是自然语言处理领域的一个基础任务,是 ...
- 【论文笔记】《基于深度学习的中文命名实体识别研究》阅读笔记
作者及其单位:北京邮电大学,张俊遥,2019年6月,硕士论文 摘要 实验数据:来源于网络公开的新闻文本数据:用随机欠采样和过采样的方法解决分类不均衡问题:使用BIO格式的标签识别5类命名实体,标注11 ...
- 实体对齐 算法_中英命名实体识别及对齐中的中文分词优化 论文笔记
1.计算命名实体词汇对齐的置信度:对一个中英双语句对,中文在初始分词的基础上进行命名实体识别. 2.分词工具:采用中科院分词工具ICTCLAS.Stanford分词工具对中文句子进行分词,其中Stan ...
- 论文浅尝 | 基于微量资源的神经网络跨语言命名实体识别
论文笔记整理:谭亦鸣,东南大学博士生,研究方向为跨语言知识图谱问答. 来源:EMNLP 2018 链接:https://www.aclweb.org/anthology/D18-1034 问题背景与动 ...
最新文章
- java中注解的使用_java中注解的使用
- 反射效果,自己公司内部编码,在text上输入内容后,通过输入内容查询数据库,弹出下拉框
- linux 使cpu使用率升高_linux命令总结(二)
- plsql command window 执行批量脚本
- Unity shader学习之屏幕后期处理效果之高斯模糊
- 去java文件 注释_去除java文件中注释部分
- 在SAP WebIDE Database Explorer里操作hdi实例
- lamba把逗号拼接的字符串转为list
- poj 3710——Christmas Game
- 论文浅尝 - AAAI2020 | 多轮对话系统中的历史自适应知识融合机制
- emacs shell插件_Windows 下 Emacs 中的 zsh shell 使用方法
- 程序员最想得到的十大证件
- 撩课-Web大前端每天5道面试题-Day4
- JavaScript实现按钮点击上/下一张切换图片
- win10u盘被写保护怎么解除_教你win10系统中u盘被写保护怎么解除
- C语言show用法,show的用法和例句
- margin: 0 auto;的作用
- xampp 403 禁止访问 问题解决
- EOS DApp 已成黑客提款机
- Virus_JS3_PyAnalysisAndSummary
热门文章
- MySQL高级知识(四)——Explain
- 产品需求文档、需求结构图、数据字典、全局说明、用例描述、需求描述、逻辑流程、原型设计、页面交互、登录注册、词汇表、数据统计、用户表设计、接口需求、功能清单、业务流程图、Axure原型、prd、文档实例
- 如何使用JS来开发室内地图商场停车场车位管理系统
- Hi!怂程见证我开博。
- Unity3D手游开发日记(6) - 适合移动平台的水深处理
- 【转】CSS和SVG中的剪切——clip-path属性和clipPath元素
- 模拟计算器进行四则运算(同等优先级)(内测第2届第3题)
- 深入理解异步I/O+epoll+协程
- [转]Ble蓝牙的使用手册
- 【01】blockqote美化