1

Wang C, Xu B. Convolutional neural network with word embeddings for Chinese word segmentation[J]. arXiv preprint arXiv:1711.04411, 2017.

关键词:CWS(中文词语分割)
过程简述:

  1. 查词典:从字典 NLP文献阅读笔记 - 图1 查询字,将句子拆分成单字(word embeddings)
  2. 利用卷积神经网络编码上下文(encode contextual information)

image.png
训练得到一组标签序列(label sequence):y = (y1, y2, …, yL),
再用维特比算法(Veterbi algorithm)找出可能性最大的标签序列。
@汪军(anjingyuanzougaofei) TODO:这部分的CNN结构需要更进一步了解

  1. 组合单字

image.png
NLP文献阅读笔记 - 图4是一个字,根据上表的规则枚举该字所在的序列,推断可能的词

  1. - 这里借助了_word2vec_来解决词空间过大和稀疏问题(即n个字组合,有![](https://cdn.nlark.com/yuque/__latex/d639e5e9f5a91cd0368e0df475c6aae3.svg#card=math&code=n%21&id=hxPt9)种组合方式,但可能只有少数几种是有效的中文词汇)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/21595544/1657564057126-1f4789aa-e975-4ae3-9980-e62cad320623.png#clientId=u9b93deab-70e6-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=339&id=uf8308f28&margin=%5Bobject%20Object%5D&name=image.png&originHeight=593&originWidth=821&originalType=binary&ratio=1&rotation=0&showTitle=false&size=133285&status=done&style=none&taskId=uef381da6-504d-4ad7-bb5e-2c5620ac3f6&title=&width=469.14285714285717)

Q:“有没有”,假设NLP文献阅读笔记 - 图5是第2个“有”,则会出现“有”、“没有”和“有没有”三个意思完全不同的词,该如何选?

2

Che W, Feng Y, Qin L, et al. N-ltp: A open-source neural chinese language technology platform with pretrained models[J]. arXiv preprint arXiv:2009.11616, 2020.

关键词:CWS
英文NLP工具:CoreNLP (Manning et al., 2014), UDPipe (Straka and Straková, 2017), FLAIR (Akbik et al., 2019),
spaCy and Stanza (Qi et al., 2020)
概览:基于 PyTorch 的神经自然语言处理工具包,支持多种中文自然语言处理任务,多任务学习框架
image.png
POS(词性标注),NER(命名实体识别),DEP(依赖分析),SRL(语义角色标注),SDP(语义依赖解析)
蒸馏法( distillation method)用单任务模型教多任务模型
过程简述:
给定语句 NLP文献阅读笔记 - 图7

  1. 对 s 补上特殊符号[CLS]和[SEP],NLP文献阅读笔记 - 图8,形成结构化的输入
  2. ELECTRA 将结构化输入转换成隐藏表示(hidden representations)序列
    NLP文献阅读笔记 - 图9
  3. 基础任务CWS:采用线性解析器(linear decoder)对每个字符分类
    NLP文献阅读笔记 - 图10
    yi表示每个字的标签的可能性分布
    WCWS和bCWS是训练参数
  4. 其他任务
    1. POS (图画得不太好,POS的输入和CWS的输入都是第2步的序列H)NLP文献阅读笔记 - 图11%22%20aria-hidden%3D%22true%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-79%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-69%22%20x%3D%22693%22%20y%3D%22-213%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-3D%22%20x%3D%221112%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-53%22%20x%3D%222168%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-6F%22%20x%3D%222814%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-66%22%20x%3D%223299%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-74%22%20x%3D%223850%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-6D%22%20x%3D%224211%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-61%22%20x%3D%225090%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-78%22%20x%3D%225619%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-28%22%20x%3D%226192%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(6581%2C0)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-57%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(944%2C-155)%22%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-43%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-57%22%20x%3D%22760%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-53%22%20x%3D%221808%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(9361%2C0)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-68%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-69%22%20x%3D%22815%22%20y%3D%22-213%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-2B%22%20x%3D%2210504%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(11505%2C0)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-62%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(429%2C-155)%22%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-43%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-57%22%20x%3D%22760%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20transform%3D%22scale(0.707)%22%20xlink%3Ahref%3D%22%23E1-MJMATHI-53%22%20x%3D%221808%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fg%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-29%22%20x%3D%2213770%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fsvg%3E#card=math&code=yi%20%3D%20Softmax%28W%7BPOS%7Dhi%20%2B%20b%7BPOS%7D%29&id=SXzJI)
      yi表示每个字的词性标签的可能性分布
    2. NED - 寻找句子中的实体(人名,地名),并对实体分类
      NLP文献阅读笔记 - 图12
      NLP文献阅读笔记 - 图13
      NLP文献阅读笔记 - 图14NLP文献阅读笔记 - 图15加入了方向和距离感知之后转换成的字符
    3. DEP - 分析句子的语义结构
      a deep biaffine neural dependency parser (Dozat and Manning, 2017) and einser algorithm (Eisner, 1996)
      NLP文献阅读笔记 - 图16
      NLP文献阅读笔记 - 图17
      NLP文献阅读笔记 - 图18
      NLP文献阅读笔记 - 图19表示依赖关系NLP文献阅读笔记 - 图20的得分
    4. SDP - 捕获句子的语义结构,确定所有在语义上相互关联的词对并分配特定的预定义语义关系
      NLP文献阅读笔记 - 图21
      NLP文献阅读笔记 - 图22表明词 i 和词 j 关联超过边界(即认为没关联)
    5. SRL - 确定句子潜在的谓词(predicate-argument)结构,理解句子表达的意义
      image.png
      NLP文献阅读笔记 - 图24表示在谓词是NLP文献阅读笔记 - 图25时的任意标签序列
      NLP文献阅读笔记 - 图26计算从NLP文献阅读笔记 - 图27NLP文献阅读笔记 - 图28的过渡分数(transition score)

3

Cui Y, Che W, Liu T, et al. Pre-training with whole word masking for chinese bert[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2021, 29: 3504-3514.

4

L. Jiang, H. Liu, H. Jiang, L. Zhang and H. Mei, “Heuristic and Neural Network Based Prediction of Project-Specific API Member Access,” in IEEE Transactions on Software Engineering, vol. 48, no. 4, pp. 1249-1267, 1 April 2022, doi: 10.1109/TSE.2020.3017794.


5 Transformer

Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

Transformer的组件

image.png

image.png
image.png
Transformer组件的基本特征

  • 编码器(Encoder)和解码器(Decoder)各有6个,且每个都完全一样。
  • 每个编码器的输出都会作为所有解码器的输入。
  • 每个编码器包含两个子层
    • Self-Attention:使每个位置都可以注意到句子中其他的位置。
    • Feed Forward:前馈全连接层。
  • 每个解码器包含三个子层
    • Self-Attention:遮罩层,为了防止泄露,将 Outputs Embedding 偏移一位,保证位置 i 的预测只能依赖 i 前面已知的Outputs。
    • Encoder-Decoder Attention:使每个位置都注意到输入序列中的所有位置。
    • Feed Forward:同编码器。
  • 编码器的输入在经过 Self-Attention 层时是共同参与的,意味着每个单词的向量NLP文献阅读笔记 - 图32会相互依赖;而经过 Feed Forward 层时是分开的,意味着可以并行执行,这是 Transformer 训练更快的重要原因

    自注意计算

    image.png

第一步:生成query,key 和 value的矩阵 Q,K 和 V(矩阵点积),W 为权重矩阵
image.png
第二步:生成 Z 矩阵
image.png
对应的公式:
NLP文献阅读笔记 - 图36

Multi-Head Attention

使用不同的 W 可得到不同的 Z
image.png
把所有NLP文献阅读笔记 - 图38拼接再与 NLP文献阅读笔记 - 图39点积,得到最终的 Z 矩阵
image.png
不同的 W 代表了注意力不同,在编码特定单词时,与之关联的权重最高的单词也就不同
image.png

6 BERT

Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

NLP 预训练模型流派

feature-based fine-tuning
unidirectional Brown et al., 1992
Ando and Zhang, 2005
Blitzer et al., 2006
Mikolov et al., 2013
Pennington et al.,2014
Mnih and Hinton, 2009
Kiros et al., 2015
Logeswaran and Lee, 2018
Le and Mikolov, 2014
Jernite et al., 2017
Logeswaran and Lee, 2018
Dai and Le, 2015
Howard and Ruder, 2018
Radford et al., 2018
OpenAI GPT (Radford et al., 2018)
bidirectional Peters et al., 2017,2018a
Melamud et al. 2016
BERT
  1. non-neural current work

BERT 步骤

pre-training:在不同的预训练任务上对未打标签的数据进行训练
fine-tuning:在下游任务中使用已打标签的数据进行微调
image.png

  • 一个句子拆分成若干个token(Tokenizer),每个句子开头用特殊符号[CLS]标记。
  • 多个句子也会拼成一个句子,用特殊符号[SEP]标记句子结束。
  • 句子的token矩阵和Embedding矩阵点积,[CLS]转换后为向量C,Tokeni转换后为向量Ti。
  • Pre-training和Fine-Tuning的结构相同,每个下游任务(MINLI、NERSQuAD)的预训练参数也相同。
  • 输入Embedding(上图的黄色块)由三个部分相加构成:

image.png

Pre-training

Task 1 - Masked LM:将输入句子的token随机选取一部分,替换成[MASK]或别token(80% [MASK],10% 其他,10% 不变)。其目的是为了Transformer的编码器不知道哪个词将用于预测,或者哪个词被替换过,它只能保留每个输入token的上下文表征(representation)(即每个词都需要注意)。
Task 2 - Next Sentence Prediction (NSP):选取两句话A和B,B中有50%的情况是A的下一句,50%是与A无关的其他句子。其目的是获取句子的层次表征,理解句子之间的联系。
例如:

  1. Input = [CLS] the man went to [MASK] store [SEP]
  2. he bought a gallon [MASK] milk [SEP]
  3. Label = IsNext
  4. Input = [CLS] the man [MASK] to the store [SEP]
  5. penguin [MASK] are flight ##less birds [SEP]
  6. Label = NotNext

两个任务可以同时进行训练,两个任务的损失之和就是

Fine-Tuning BERT

输入:句子A和B,有4种情况

  • 段落种的句子对;
  • 前提-假设句子对;
  • 问题-答案句子对;
  • 文本-∅对。

输出:

  • Token表征,可用于诸如sequence tagging 或 question answering等token层面的任务。
  • [CLS]表征,可用于语义分析等任务。

7 DECOM

Automatic Comment Generation via Multi-Pass Deliberation

image.png

变量 解释
NLP文献阅读笔记 - 图45 源代码
NLP文献阅读笔记 - 图46 Ground Truth
NLP文献阅读笔记 - 图47 代码中的关键词
NLP文献阅读笔记 - 图48 注释
NLP文献阅读笔记 - 图49 初始草稿
NLP文献阅读笔记 - 图50 NLP文献阅读笔记 - 图51个Deliberation模型优化后的注释,将作为第NLP文献阅读笔记 - 图52个Deliberation模型的输入
NLP文献阅读笔记 - 图53 最终注释结果
NLP文献阅读笔记 - 图54 输入代码NLP文献阅读笔记 - 图55的隐状态
NLP文献阅读笔记 - 图56 关键词NLP文献阅读笔记 - 图57的隐状态
NLP文献阅读笔记 - 图58 注释NLP文献阅读笔记 - 图59的隐状态
NLP文献阅读笔记 - 图60 NLP文献阅读笔记 - 图61个解码器第NLP文献阅读笔记 - 图62个子层的隐状态
  1. 使用BM25方法将语料库中的代码和输入的源代码NLP文献阅读笔记 - 图63进行相似度计算,将相似度最高的代码的注释作为初始草稿NLP文献阅读笔记 - 图64

BM25的一般公式
NLP文献阅读笔记 - 图65%3D%5Csum%7Bi%7D%5E%7Bn%7D%20W_iR(q_i%2Cd)%20%5Ctag%20%7B1%7D%0A#card=math&code=Score%3D%28Q%2Cd%29%3D%5Csum%7Bi%7D%5E%7Bn%7D%20W_iR%28q_i%2Cd%29%20%5Ctag%20%7B1%7D%0A&id=TTnYs)
NLP文献阅读笔记 - 图66表示一条query,NLP文献阅读笔记 - 图67是其中的单词,NLP文献阅读笔记 - 图68表示被检索的文档,NLP文献阅读笔记 - 图69表示第NLP文献阅读笔记 - 图70个词NLP文献阅读笔记 - 图71的权重,NLP文献阅读笔记 - 图72#card=math&code=R%28q_i%2Cd%29&id=q5GhQ)表示词NLP文献阅读笔记 - 图73与文档NLP文献阅读笔记 - 图74的相关性得分。
词权重等于IDF(逆文档频率)的值,如果一个词在很多文档中出现,则这个词可能是常用词,不能很好地表征某个句子,因此权重应当更小。
文章越长,相关性得分越小。因为当文档较长时,包含NLP文献阅读笔记 - 图75的机会更大,相同词频时,长文章与NLP文献阅读笔记 - 图76的相关性理应更小。

  1. 将输入代码片段NLP文献阅读笔记 - 图77转换为向量,输入到编码器中计算隐状态(hidden states)

向量转换公式,输入NLP文献阅读笔记 - 图78%7D%5D#card=math&code=x%3D%5Bx1%2Cx_2%2C%5Cdots%2Cx%7Bl%28x%29%7D%5D&id=diprG)
NLP文献阅读笔记 - 图79
NLP文献阅读笔记 - 图80是一个可训练的embedding矩阵,NLP文献阅读笔记 - 图81表示第NLP文献阅读笔记 - 图82个词的位置编码,位置编码根据输入embedding的不同维度使用正弦或余弦函数计算而来。

NLP文献阅读笔记 - 图83
NLP文献阅读笔记 - 图84
NLP文献阅读笔记 - 图85表示embedding向量的第NLP文献阅读笔记 - 图86个维度,NLP文献阅读笔记 - 图87表示向量的维度数。

  • 这里直接用的Transformer的原公式。

得到向量 NLP文献阅读笔记 - 图88%7D%7D%5D#card=math&code=%5B%5Coverrightarrow%7Bx1%7D%2C%5Coverrightarrow%7Bx_2%7D%2C%5Cdots%2C%5Coverrightarrow%7Bx%7Bl%28x%29%7D%7D%5D&id=wl38m),输入到第一个编码器中,一共有N个编码器。

隐状态计算公式
NLP文献阅读笔记 - 图89
NLP文献阅读笔记 - 图90
NLP文献阅读笔记 - 图91是第NLP文献阅读笔记 - 图92个编码器的第一个子层的隐状态,NLP文献阅读笔记 - 图93是后续子层的隐状态。每个编码器总共有两个子层。

经过N个编码器之后,得到输入代码NLP文献阅读笔记 - 图94的最终隐状态 NLP文献阅读笔记 - 图95%7D%5D#card=math&code=H%3D%5Bh1%2Ch_2%2C%5Cdots%2Ch%7Bl%28x%29%7D%5D&id=xFvN0)
同理,可得NLP文献阅读笔记 - 图96的隐状态 NLP文献阅读笔记 - 图97NLP文献阅读笔记 - 图98的隐状态 NLP文献阅读笔记 - 图99

  • z的序号是k-1是因为还没有经过最后一个解码器

image.png
到这一步为止,基本没有动Transformer原版的编码器结构

  1. 解码器输出注释NLP文献阅读笔记 - 图101

首先使用公式(3)计算出解码器第一个子层的隐状态NLP文献阅读笔记 - 图102
计算第二个子层的隐状态
NLP文献阅读笔记 - 图103
其中
NLP文献阅读笔记 - 图104
NLP文献阅读笔记 - 图105
NLP文献阅读笔记 - 图106
NLP文献阅读笔记 - 图107表示代码和关键词之间的结合程度,越大则模型越需要注意源码的信息。NLP文献阅读笔记 - 图108是一个可训练参数矩阵。

计算第三个子层的隐状态
NLP文献阅读笔记 - 图109
最后,根据公式(4),每个解码器的最后一个子层使用NLP文献阅读笔记 - 图110计算隐状态。

计算概率分布
NLP文献阅读笔记 - 图111
NLP文献阅读笔记 - 图112表示解析步骤(原文𝑗-th decoding step,如何理解?),NLP文献阅读笔记 - 图113见上文Transformer。
最终NLP文献阅读笔记 - 图114
NLP文献阅读笔记 - 图115

  1. 评估NLP文献阅读笔记 - 图116

NLP文献阅读笔记 - 图117的最终隐状态NLP文献阅读笔记 - 图118
计算注释的表征(representation)NLP文献阅读笔记 - 图119
NLP文献阅读笔记 - 图120
NLP文献阅读笔记 - 图121
同理可计算代码的表征NLP文献阅读笔记 - 图122,然后使用余弦相似性计算NLP文献阅读笔记 - 图123NLP文献阅读笔记 - 图124的相似程度
NLP文献阅读笔记 - 图125

启示

语料库:

the training set of the benchmark dataset as the retrieval corpus

去benchmark找找看

分词器:

javalang [3] and tokenize [5] libraries to tokenize the code snippet for JCSD and PCSD,

试试效果