NLP 是什么?
NLP 是计算机科学领域与 人工智能 领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的学科。NLP 由两个主要的技术领域构成:自然语言理解和自然语言生成。
自然语言理解方向,主要目标是帮助机器更好理解人的语言,包括基础的词法、句法等语义理解,以及需求、篇章、情感层面的高层理解。
自然语言生成方向,主要目标是帮助机器生成人能够理解的语言,比如文本生成、自动文摘等。
NLP 技术基于大数据、知识图谱、 机器学习 、语言学等技术和资源,并可以形成机器翻译、深度问答、对话系统的具体应用系统,进而服务于各类实际业务和产品。
NLP在金融方面
金融行业因其与数据的高度相关性,成为人工智能最先应用的行业之一,而NLP与知识图谱作为人工智能技术的重要研究方向与组成部分,正在快速进入金融领域,并日益成为智能金融的基石。舆情分析舆情主要指民众对社会各种具体事物的情绪、意见、价值判断和愿望等。
事件(Event ):在特定时间、特定地点发生的事情。主题(Topic):也称为话题,指一个种子事件或活动以及与它直接相关的事件和活动。专题(Subject):涵盖多个类似的具体事件或根本不涉及任何具体事件。需要说明的是,国内新闻网站新浪、搜狐等所定义的“专题”概念大多数等同于我们的“主题”概念。热点:也可称为热点主题。热点和主题的概念比较接近,但有所区别。
1 词干提取
什么是词干提取?词干提取是将词语去除变化或衍生形式,转换为词干或原型形式的过程。词干提取的目标是将相关词语还原为同样的词干,哪怕词干并非词典的词目。
2 词形还原
什么是词形还原? 词形还原是将一组词语还原为词源或词典的词目形式的过程。还原过程考虑到了POS问题,即词语在句中的语义,词语对相邻语句的语义等。
3 词向量化什么是词向量化?词向量化是用一组实数构成的向量代表自然语言的叫法。这种技术非常实用,因为电脑无法处理自然语言。词向量化可以捕捉到自然语言和实数间的本质关系。通过词向量化,一个词语或者一段短语可以用一个定维的向量表示,例如向量的长度可以为100。
4 词性标注
什么是词性标注?简单来说,词性标注是对句子中的词语标注为名字、动词、形容词、副词等的过程。
5 命名实体消歧
什么是命名实体消岐?命名实体消岐是对句子中的提到的实体识别的过程。例如,对句子“Apple earned a revenue of 200 Billion USD in 2016”,命名实体消岐会推断出句子中的Apple是苹果公司而不是指一种水果。一般来说,命名实体要求有一个实体知识库,能够将句子中提到的实体和知识库联系起来。
6 命名实体识别
体识别是识别一个句子中有特定意义的实体并将其区分为人名,机构名,日期,地名,时间等类别的任务。
7 情感分析
什么是情感分析?情感分析是一种广泛的主观分析,它使用自然语言处理技术来识别客户评论的语义情感,语句表达的情绪正负面以及通过语音分析或书面文字判断其表达的情感等等。
8 语义文本相似度
什么是语义文本相似度分析?语义文本相似度分析是对两段文本的意义和本质之间的相似度进行分析的过程。注意,相似性与相关性是不同的。
9语言识别
什么是语言识别?语言识别指的是将不同语言的文本区分出来。其利用语言的统计和语法属性来执行此任务。语言识别也可以被认为是文本分类的特殊情况。
10 文本摘要
什么是文本摘要?文本摘要是通过识别文本的重点并使用这些要点创建摘要来缩短文本的过程。文本摘要的目的是在不改变文本含义的前提下最大限度地缩短文本。
11评论观点抽取
自动分析评论关注点和评论观点,并输出评论观点标签及评论观点极性。目前支持 13 类产品用户评论的观点抽取,包括美食、酒店、汽车、景点等,可帮助商家进行产品分析,辅助用户进行消费决策。
11DNN 语言模型
语言模型是通过计算给定词组成的句子的概率,从而判断所组成的句子是否符合客观语言表达习惯。在机器翻译、拼写纠错、语音识别、问答系统、词性标注、句法分析和信息检索等系统中都有广泛应用。
12依存句法分析
利用句子中词与词之间的依存关系来表示词语的句法结构信息 (如主谓、动宾、定中等结构关系),并用树状结构来表示整句的的结构 (如主谓宾、定状补等)。
1、NLTK
一种流行的自然语言处理库、自带语料库、具有分类,分词等很多功能,国外使用者居多,类似中文的 jieba 处理库
2、文本处理流程
大致将文本处理流程分为以下几个步骤:
Normalization
Tokenization
Stop words
Part-of-speech Tagging
Named Entity Recognition
Stemming and Lemmatization
下面是各个流程的具体介绍
Normalization
第一步通常要做就是Normalization。在英文中,所有句子第一个单词的首字母一般是大写,有的单词也会全部字母都大写用于表示强调和区分风格,这样更易于人类理解表达的意思。
Tokenization
Token是"符号"的高级表达, 一般值具有某种意义,无法再拆分的符号。在英文自然语言处理中,Tokens通常是单独的词,因此Tokenization就是将每个句子拆分为一系列的词。
Stop Word
Stop Word 是无含义的词,例如’is’/‘our’/‘the’/‘in’/'at’等。它们不会给句子增加太多含义,单停止词是频率非常多的词。 为了减少我们要处理的词汇量,从而降低后续程序的复杂度,需要清除停止词。
Named Entity
Named Entity 一般是名词短语,又来指代某些特定对象、人、或地点 可以使用 ne_chunk()方法标注文本中的命名实体。在进行这一步前,必须先进行 Tokenization 并进行 PoS Tagging。
Stemming and Lemmatization
为了进一步简化文本数据,我们可以将词的不同变化和变形标准化。Stemming 提取是将词还原成词干或词根的过程。
3、Word2vec
Word2vec是一种有效创建词嵌入的方法,它自2013年以来就一直存在。但除了作为词嵌入的方法之外,它的一些概念已经被证明可以有效地创建推荐引擎和理解时序数据。在商业的、非语言的任务中。
### 四、NLP前沿研究方向与算法
1、MultiBERT
2、XLNet
3、bert 模型
BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
BERT提出之后,作为一个Word2Vec的替代者,其在NLP领域的11个方向大幅刷新了精度,可以说是近年来自残差网络最优突破性的一项技术了。BERT的主要特点以下几点:
使用了Transformer作为算法的主要框架,Trabsformer能更彻底的捕捉语句中的双向关系;
使用了Mask Language Model(MLM)和 Next Sentence Prediction(NSP) 的多任务训练目标;
使用更强大的机器训练更大规模的数据,使BERT的结果达到了全新的高度,并且Google开源了BERT模型,用户可以直接使用BERT作为Word2Vec的转换矩阵并高效的将其应用到自己的任务中。
BERT的本质上是通过在海量的语料的基础上运行自监督学习方法为单词学习一个好的特征表示,所谓自监督学习是指在没有人工标注的数据上运行的监督学习。在以后特定的NLP任务中,我们可以直接使用BERT的特征表示作为该任务的词嵌入特征。所以BERT提供的是一个供其它任务迁移学习的模型,该模型可以根据任务微调或者固定之后作为特征提取器。
模型结构: 由于模型的构成元素Transformer已经解析过,就不多说了,BERT模型的结构如下图最左:
对比OpenAI GPT(Generative pre-trained transformer),BERT是双向的Transformer block连接;就像单向rnn和双向rnn的区别,直觉上来讲效果会好一些。
优点: BERT是截至2018年10月的最新state of the art模型,通过预训练和精调横扫了11项NLP任务,这首先就是最大的优点了。而且它还用的是Transformer,也就是相对rnn更加高效、能捕捉更长距离的依赖。对比起之前的预训练模型,它捕捉到的是真正意义上的bidirectional context信息。
缺点: MLM预训练时的mask问题
[MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现
每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)
BERT火得一塌糊涂不是没有原因的:
使用Transformer的结构将已经走向瓶颈期的Word2Vec带向了一个新的方向,并再一次炒火了《Attention is All you Need》这篇论文;
11个NLP任务的精度大幅提升足以震惊整个深度学习领域;
无私的开源了多种语言的源码和模型,具有非常高的商业价值。
迁移学习又一次胜利,而且这次是在NLP领域的大胜,狂胜。
BERT算法还有很大的优化空间,例如我们在Transformer中讲的如何让模型有捕捉Token序列关系的能力,而不是简单依靠位置嵌入。BERT的训练在目前的计算资源下很难完成,论文中说的训练需要在64块TPU芯片上训练4天完成,而一块TPU的速度约是目前主流GPU的7-8倍。
这里可以参考CSDN上的文章-BERT原理和实践: https://blogcsdnnet/jiaowoshouzi/article/category/9060488
在解释BERT,ELMO这些预训练模型之前,我们先看一下很久之前的计算机是如何读懂文字的?
每个字都有自己的独特的编码。但是这样是有弊端的,字和字之间的关联关系是无法得知的,比如计算机无法知道dog和cat都是动物,它反而会觉得bag和dog是比较相近的。
所以后来就有了Word Class,将一系列的词进行分类然后让一类词语和一类词语之间更有关联,但是这样的方法太过于粗糙,比如dog,cat,bird是一类,看不出哺乳动物鸟类的区别。
在这个基础之上,我们有了Word Embedding,Word Embedding我们可以想象成是一种soft的word class,每个词都用向量来表示,它的向量维度可能表示这个词汇的某种意思,如图中dog,cat,rabbit的距离相比其他更近。那么word embendding是如何训练出来的,是根据每个词汇的上下文所训练的。
每个句子都有bank的词汇,四个bank是不同的token,但是同样的type。(注:token-词例, type-词型, class-词类 or token是出现的总次数(还有种理解是token是具有一定的句法语义且独立的最小文本成分。 ),type是出现的不同事物的个数。)
对于典型的Word Embedding认为,每个词type有一个embedding,所以就算是不同的token只要是一样的type那么word embedding就是一样的,语义也就是一样的。
而事实上并非如此,1,2句bank指的是银行,3,4为水库。所以我们希望让机器给不同意思的token而且type还一致,给予不同的embedding。在这个问题上,之前的做法是从字典中去查找这个词包含几种意思,但是这样的做法显然跟不上现实中词语的一些隐含的含义。比如bank有银行的意思,与money一起是银行的意思,而与blood一起却是血库的意思。
所以我们想让机器今天进一步做到每一个word token都可以有自己的embedding(之前是每个type有一个embedding或者有固定的一个或多个embedding),那么怎么知道一个word应该有怎样的embedding呢?我们可以取决于该词的上下文,上下文越相近的token它们就会越相近的embedding。比如之前提到的bank,下面两个句子它们的word token的embedding可能是相近的,而和上面的word token的embedding是相远的。
所以我们想使用一种能够基于上下文的Contextual word Embedding来解决一词多义的问题。
这里使用ELMO可以做到这件事情,即每个word token拥有不同的word embedding。(右上角动物是芝麻街(美国公共广播协会(PBS)制作播出的儿童教育电视节目)里的角色)。
它是基于RNN的预训练模型,它只需要搜集大量语料(句子)且不需要做任何标注,就可以训练这个基于RNN的语言模型,预测下一个token是什么,学习完了之后就得到了上下文的embedding。因为我们可以将RNN的隐藏层中的某一节点拿出来(图中橙蓝色节点),它就是输入当前结点的词汇的word embedding。
从当计算识别到<BOS>,模型训练开始。首先输入"潮水",然后当作输入输出"退了",退了当做输入输出"就"。
假设当前要得到”退了”这个词的上下文embedding,首先,因为前边的RNN只考虑到了前文而没有考虑到后文,所以这里就使用了同前文一样的反向的RNN。然后,它从句尾开始进行,比如给它喂”知道”,它就要预测”就”,给它喂”就”,它就要预测”退了”。这时候就不仅考虑每个词汇的前文,还会考虑每个词的后文。最后将正向和逆向得到的两个不同的上下文embedding(因为方向不同训练结果也不一样)拼接起来。
现在我们训练的程度都会越来越深度,当层数增加,这样就会产生Deep的RNN,因为很多层,而且每一层都会产生上下文Embedding,那么我们到底应该使用哪一层?每一层这种深度LSTM中的每个层都可以生成潜在表示(方框处)。同一个词在不同的层上会产生不同的Embedding,那么我们应该使用哪一层呢?ELMo的策略是每一层得到的上下文embedding都要。
在上下文embedding的训练模型中,每个词输入进去都会有一个embedding输出来。但是在ELMo中,每个词汇输入进去,都会得到不止一个embedding,因为每层的RNN都会给到一个embedding,ELMo将它们统统加起来一起使用。
以图中为例,这里假设ELMo有两层RNN,这里是将α1(**,第一层得到的embedding)和α2(绿色,第二层得到embedding)加起来得到蓝色的embedding,并做为接下来要进行不同任务的输入。
但是这里存在一些问题,α1和α2是学习得到的,而且它是根据当前要进行的任务(如QA,POS of tagging ),然后根据接下来要进行的这些任务一起被学习出来。所以就导致不同任务导向下的α1和α2也不一样。
ELMo的论文中提到,在不同任务下(SRL,Coref,SNLI,SQuAD,SST-5)。蓝色的上下文embedding在经过token(这里为没有经过上下文的embedding),LSTM1,LSTM2后,它在不同阶段需要的weight也不一样。
BERT相当于是Transformer的Encoder部分,它只需要搜集大量的语料去从中学习而不经过标注(不需要label),就可以将Encoder训练完成。如果之前要训练Encoder,我们需要通过一些任务来驱动学习(如机器翻译)。
BERT就是句子给进去,每个句子给一个embedding。
这里可以回忆下,Transformer的Enoder中有self-attention layer,就是给进去一个sequence,输出也得到一个sequence。
虽然图中使用是用词作为单元进行输入,但是在使用BERT进行中文的训练时,字会是一个更好的选择。比如,我们在给BERT进行输入时,用one-hot给词进行编码,但是词在中文中数量庞大,会导致维度过高。但是,字的话相对会少很多,特别是中文(大约几千个,可以穷举)。这样以字为单位进行输入会占很大优势。
共有两种方法,一种是Mask LM遮盖语言模型,另一种是Next Sentence Prediction下一句预测。
下面用上图的例子来理解BERT是怎么样来进行填空的:
1)这里假设在所有句子中的词汇的第2个位置上设置一个<MASK>;
2)接下来把所有的词汇输入BERT,然后每个输入的token都会得到一个embedding;
3)接下来将设置为<MASK>的embedding输入到Linear Multi-class Classifier中中,要求它预测被<MASK>的词汇是哪个词汇?
但是这个Linear Multi-class Classifier它仅仅是一个线性分类器,所以它的能力十分弱,这也就需要在之前的BERT模型中需要将它的层数等参数设计的相当好,然后得到非常出色的representation,便于线性分类器去训练。
那么我们怎么知道最后得到的embedding是什么样的呢?如果两个<MASK>下的词汇(输入时设置的<MASK>和最后预测的<MASK>)都放回原来的位置而且没有违和感(就是语句还算通顺),那它们就有类似的embedding(比如退下和落下)。
如图中,给定两个句子1)醒醒吧 和 2)你没有妹妹。其中特殊符号[SEP]是告诉BERT两个句子的分隔点在哪里。
特殊符号[CLS]一般放在句子的开头,它用来告诉BERT从这开始分类任务,[CLS]输入BERT后得到embedding然后通过Linear Binary Classifier得出结果说明:经过BERT预测后现在我们要预测的两个句子是接在一起 or 不应该被接在一起。
这里可能会有疑问,为什么不将[CLS]放在句尾,等BERT训练完两个句子再输出结果?
对于上图中的任务,BERT现在要做的事情就是给定两个句子,让BERT输出结果这两个句子是不是应该接在一起?
所以在语料库的大量句子中,我们是知道哪些句子是可以接在一起的,所以也需要我们告诉BERT哪些句子是接在一起的。
Linear Binary Classifier和BERT是一起被训练的,通过预测下一句这个任务,我们就可以把将BERT部分的最优参数训练出来。
现在我们知道了任务一和任务二,在原论文中两种任务是要同时进行的,这样才能将BERT的性能发挥到最佳。
现在我们知道了BERT要做什么事情,那么我们要如何去使用它?共有四种方法。论文中是将BERT模型和接下来你要进行的任务结合在一起做训练。
第一种,假设当前任务是Input一个sentence,out一个class,举例来说输入一句话来判断分类。
训练流程:1)将做要分类的句子丢给BERT;
2)需要在句子开始加上分类的特殊符号,这个特殊符号经过BERT输出的embedding经过线性分类器,输出结果为当前的句子属于的类别是真还是假。BERT和Linear Classifier的参数一起进行学习;
3)这里的Linear Classifier是Trained from Scratch是白手起家从头开始,即它的参数随机初始化设置,然后开始训练;
4)而BERT则是加上Fine-tune微调策略(一种迁移学习方式),例如Generative Pre-trained Transformer(OpenAI GPT生成型预训练变换器)(Radford等,2018),引入了最小的任务特定参数,并通过简单地微调预训练参数在下游任务中进行训练。
这里不得不提一下迁移学习中的Fine-tune,这里可以参考csdn的一篇文章: https://blogcsdnnet/u013841196/article/details/80919857
( https://arxivorg/abs/180512471 )
第二种,假设当前任务是input一个sentence,输出这个句子中的每个词汇属于正例还是负例。举例现在的任务是slot filling填槽任务(填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程)(另一种解释是从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot fillers))(槽可以理解为实体已明确定义的属性),输入的句子是 arrive Taipei on November 2nd输出的槽是other dest on time time
训练流程:
1)将句子输入BERT,句子中的每个词汇都会映射出一个embedding;
2)每个词汇的embedding输入Linear Classifier,输出结果;
3)Linear Classifier 白手起家和Bert微调的方式一起去做学习。
第三种,假设当前任务是input输入两个句子,输出class。举例现在要进行自然语言预测,让机器根据premise前提,预测这个hypothesis假设是True还是False还是unknown不知道。实际上,我们可以把这个任务当成三分类问题。
训练过程:
1)在一个sentence前设置特殊符号[CLS],然后在要输入的两个sentence中间设置[SEP]分隔符号;
2)将两个sentence连同特殊符号一起输入到BERT中;
3)将[CLS]输入BERT后得到的embedding,再把它输入linear Classifier中,得到class。
如图所示,假设gravity的token序号是17,即 ,我们现在有一个问题通过QA Model后得到的s=17,e=17,那么答案就是 为gravity;
同理,假设within a cloud的序号顺序是77到79,即 到 ,我们现在有一个问题通过QA Model后得到的s=77,e=79,那么答案就是 为within a cloud。
https://arxivorg/abs/190505950
https://openreviewnet/pdfid=SJzSgnRcKX
这张图显示了BERT从0-24层的层数在针对不同的NLP任务上的表现。
https://d4mucfpksywvcloudfrontnet/better-language-models/language_models_are_unsupervised_multitask_learnerspdf
而所谓的GPT,它其实就是Transformer的Decoder。
我们简单的描述下GPT的训练过程:这里我们input<BOS>这个token和潮水,想要GPT预测输出“退了”这个词汇。
1)首先输入[BOS](begin of sentence)和潮水,通过Word Embedding再乘上matrix W变成a 1到a 4,然后把它们丢进self-attention 层中,这时候每一个input都分别乘上3个不同的matrix产生3个不同的vector,分别把它们命名为q,k,v。
q代表的是query (to match others用来去匹配其它的向量)
k代表的是key (to be matched用来去被query匹配的向量)
v代表的是value(information to be extracted用来被抽取的信息的向量)
2)现在要做的工作就是用每个query q 去对每个 key k做attention(吃2个向量,输出就是告诉你这2个向量有多么匹配或者可以说输入两个向量输出一个分数\alpha(而怎么去吃2个向量output一个分数,有很多不同的做法))。这里要预测潮水的下一个词,所以乘 , 乘上 , 乘上 再经过soft-max分别得到 到 。
3)我们用 和每一个v相乘, 和 相乘加上 和 相乘。以此类推并相加,最终得到 。
4)然后经过很多层的self-attention,预测得到”退了”这个词汇。
同理,现在要预测”退了”的下一个词汇,按照前面的流程可以得到 ,然后经过很多层的self-attention层,得到”就”这个词汇。
GPT的神奇之处在于它可以在完全没有训练数据的情况下,就可以做到阅读理解,摘要,翻译。折线图中显示了它在参数量上升的情况下,F1的值的效果。
1Transformer的问题:
word Embedding 无上下文
监督数据太少
解决方法:
Contextual Word Embedding
2ELMo( E mbeddings from L anguages Mo del)
- 多层双向的LSTM的NNLM
- RNN-based language models(trained from lots of sentences)
ELMo的问题:
Contextual Word Embedding作为特征
不适合特定任务
3OpenAI GPT的改进
根据任务Fine-Tuning
使用Transformer替代RNN/LSTM
OpenAI GPT的问题:
单向信息流的问题
Pretraining(1)和Fine-Tuning(2)不匹配
解决办法:
Masked LM
NSP Multi-task Learning
Encoder again
Tips:
- 使用中文模型
- max_seq_length可以小一点,提高效率
- 内存不够,需要调整train_batch_size
- 有足够多的领域数据,可以尝试Pretraining
lonely/solitary/unccomanied都是孤独的
happy/joyful/cheerful/gay都是高兴的愉快的
unhappy/upset/不高兴的sad/sorrowful悲伤的/depressed 沮丧的
当我的灵气变的无比强大时,我想要保护的人都已经不在了
when my spirit become extremely powerful, I want to protect the people have gone
就在那一瞬间,我仿佛听见了全世界崩溃的声音。
at that moment, I heard the voice of the world collapse
我站在人群里,伤心的感觉如同灭顶,我的眼泪大颗大颗地滴下来,滴在他们牵手走过的红毯上。
I stood in the crowd, sad feeling like drowned, my tears big star big star to drop down, drop in their hand on the red carpet
我蹲在路边,哭泣的象个孩子。
I crouched in the roadside, crying like a child
曾经一直想让别人知道自己的心情,那些沉重,那些无法讲述的悲伤和苍凉。可是,我要如何在浅薄的纸上为你画出我所有的命轮我要如何让你明白
had always wanted to let others know of their feelings, those heavy, who cannot tell the sadness and desolation But, how do I in shallow paper for you to draw all my life round How can I make you see
我们一直在寻觅,寻觅,那个我们都有的结局 几米
we have been looking for, find, that we have
飞机场的骚乱一会儿就停止了,这里的人都是有着自己的方向的,匆匆地起飞,匆匆地下降,带走别人的故事,留下自己的回忆。
airport riots soon stopped, where people are with their own direction, hurried off, hurried down, take another story, leaving his memories
习惯了你对人的'依赖,虽然我也是一个孩子。
The habits of the people you rely on, although I was a child
红莲即将绽放,双星终会汇聚,命运的转轮已经开始,请您耐心地等待
lotus coming into bloom, double star will eventually converge, the fate of the wheel has started, please wait patiently
我想知道这些仓皇南飞的大雁带走了谁的思念
I want to know these hurried away geese flying south who miss
我站得太久说的太久了我自己都累了,你怎么还是听不懂我写的太多了写得太久了我自己都累了,你怎么还是看不懂
I stand for too long too long to say I have tired, how can you still do not understand I write too much to write too long I have tired, how can you still cannot read 搞笑语句
当你真正爱一样东西的时候你就会发现语言多么的脆弱和无力。
when you really love something when you will find that the language of how fragile and weak
遗忘是我们不可更改的宿命,所有的一切都像是没有对齐的图纸 从前的一切回不到过去 就这样慢慢延伸 一点一点的错开来 也许 错开了的东西 我们真的应该遗忘了
forgetting is we can not change the fate, everything is not aligned drawings all go back to the past so slowly extends one point one points to stagger perhaps stagger the things we really should forget
歌声形成的空间,任凭年华来去自由,所以依然保护着的人的容颜不曾改和一场庞大而没有落幕的恨
song of the space, despite freedom of movement for love, so people who still protect the face has not changed, and not a huge curtain of hate
总有一天我会从你身边默默地走开,不带任何声响我错过了很多,我总是一个人难过
one day I will be away from your side in silence, without any sound I missed a lot, I always sad one
在每个星光陨落的晚上,一遍一遍数我的寂寞 。
in the fall of each star of the evening, again and again for my loneliness
每当我看天的时候我就不喜欢再说话,每当我说话的时候我却不敢再看天。
whenever I see when I don't like to speak again, whenever I speak, I didn't see
I do a lot of thinking before I go to sleep
睡前我总是想得很多。
我就像现在一样看着你微笑,沉默,得意,失落,于是我跟着你开心也跟着你难过,只是我一直站在现在而你却永远停留过去
I just look at you now smiling, silent, complacent, lost, so I follow you follow you happy and sad, but I always stand now but you never stay in the past
如果我们都是孩子,就可以留在时光的原地,坐在一起一边听那些永不老去的故事一边慢慢皓首
寂寞的人总是记住生命中出现的每一个人,正如我总是意犹未尽地想起你!
lonely people always remember the life of every man, as I kept thinking of you!
I hate when people tell me I’ve changed… maybe I’ve just stopped faking happiness
我讨厌别人说我变了。。。也许我只是停止了假装开心。 郭敬明2012
We are wasting our days now worrying about the days we will not have later
我们总在浪费现在的时间去担心以后不会发生的事。
One day you’ll find someone who shows you why it never worked out with someone else
总有一天你会找到那个人,而他就是你和其他人没有结果的原因。
No matter how much you think you hate school, you’ll always miss it when you leave
无论你多么讨厌你的学校,当你离开久了,你还是会想念它。
I know I’m good for something, I just haven’t found it yet
我坚信自己定有所长,我只是还没发现它而已。
There’s a war inside of me 张小娴语录
我的心中有场小小战争。
The happiness of your life depends on the quality of your thoughts
你思想的深度决定了你生活的幸福度。
My life My choices My mistakes My lessons Not your business
我的人生,我做选择,我犯的错,我吸取教训,但这一切都不关你的事。
Life is a game You can choose——play it or not
人生就像游戏,你能选择的是游戏人生或者认真对待。
n-gram语言模型:根据前面n个词预测当前词,它的缺点是,一般只能取1-2,n越大计算成本越高,这就使得它关注的信息是非常局限的。
预训练语言模型:wordvec\glove\fasttext。wordvec是根据周围词预测当前词或当前词预测周围词,相比于n-gram,它关注了下文,但它仍然是关注局部信息。glove通过构建词频共现矩阵来训练词向量,将全局信息融入到词向量中。fasttext仍然是局部的,只是他分词是基于subword,对于oov词相对友好。三者共同的缺点是,无法解决一词多义问题。
高级语言模型:elmo\GPT,elmo采用1层静态向量+2层单向LSTM提取特征,并且能够解决一词多义,elmo是一个双向语言模型,但实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比 BERT 一体化融合特征方式弱。GPT采用Transformer的decoder单元提取特征,同样也可以解决一词多义问题,但GPT是单向的。所以,对上下文信息的融合,二者能力还不够。
bert是双向语言模型,句子没有shift_mask操作,所以是完整的上下文环境,证实了双向语言模型对文本特征表示的重要性。bert同时证实了预训练模型能够简化很多繁重任务的网络结构,在11个nlp任务上都有显著提升。
bert采用Transformer的encoder单元提取特征,encoder中包含几个重要的机制:self-attention、muti-head attention、position encoding。
bert分为bert_base和bert_large大小两个模型,bert_base采用了12个encoder单元,768维隐藏层,12个attention。bert_base采用了24个encoder单元,1024维隐藏层,16个attention。
input:单句或句对组合,有[cls]作为句子开头的标记,[sep]作为句子分隔和结束的标记。
token embedding:对于英文采用WordPiece embeddings,也就是一个单词会被拆成词根词缀的,比如图中的playing被拆成了play和ing两个token;对于中文,就是单子拆分。
segment embedding:相邻句子采用不同的标志分隔,形如111111111100000011111100000。
position embedding:在transformer中,单词之间是没有先后顺序的,而语言本身是有序的,所以采用采用正余弦函数来计算每个单词的先后顺序,这种方式有点勉强,算是折中方式。
前面讲到elmo也是双向语言模型,它是采用bi-LSTM来提取特征,如下:
比如一句话:‘北京是中国的首都’,在LSTM中从左往右,预测‘中国’的时候只能看到‘北京’,从右往左,预测‘中国’的时候只能看到‘首都’,然后将两个lstm的输出做拼接来达到上下文信息融合的目的。其实是没有完全做到双向,只是以结构的改变来接近双向语言模型。真正的双向是预测‘中国’的时候,需要同时看到‘北京’和‘首都’。由此,mask LM产生了。
mask LM的原理是将‘中国’遮盖住,同时用‘北京’和‘首都’来预测‘中国’。‘北京’和‘首都’联系起来语言模型很容易联想到就是‘中国’啦。这个思想和wordvec的CBOW模型如出一辙,就是用周围词预测当前词,只是这个思想放在厉害的transformer中,便能大显其能。
BERT的mask方式:在选择mask的15%的词当中,80%情况下使用mask掉这个词,10%情况下采用一个任意词替换,剩余10%情况下保持原词汇不变。这样mask的优点是什么?
1)被随机选择15%的词当中以10%的概率用任意词替换去预测正确的词,相当于文本纠错任务,为BERT模型赋予了一定的文本纠错能力;
2)被随机选择15%的词当中以10%的概率保持不变,缓解了finetune时候与预训练时候输入不匹配的问题(预训练时候输入句子当中有mask,而finetune时候输入是完整无缺的句子,即为输入不匹配问题)。
在Mask LM任务中,模型学到了词与词之间的关系,而NSP任务是要模型学到句子与句子之间的关系,比如问答、推理等。它将训练语料分为两类,一是将50%语料构建成正常语序的句子对,比如A-B句子对,B就是A的实际下一个句子,并做标记为isnext;二是将50%语料构建成非正常语序句子对,B是来自语料库的随机句子,并做标记为notnext。然后通过对句子对的关系做分类,预测B到底是不是A句子的下一个句子,使模型具有句子级别的识别能力。
微调的目的在于我们的任务与bert预训练任务是不一致的,但是bert是非常好的语言模型,他具备提取词法和句法的强大能力。将bert嵌入到我们的网络结构中,能够简化在语言模型方面的复杂结构。只需要将输入做成和bert适配的格式就行,而在bert后面接上全连接、CNN等简单模型进行训练,就能够使训练得到一个比较好的效果。
GPT 和 BERT 都采用Transformer,Transformer 是encoder-decoder 结构,GPT 的单向语言模型采用 decoder 部分,decoder 的部分见到的都是不完整的句子;BERT 的双向语言模型则采用 encoder 部分,采用了完整句子。他俩最主要的区别在于BERT是双向语言模型,更适合文本分类等任务,GPT是单向语言模型,更适合生成式任务。
1)低层网络捕捉了短语级别的结构信息
2)表层信息特征在底层网络(3,4),句法信息特征在中间层网络(6~9),语义信息特征在高层网络。(9~12)
3)主谓一致表现在中间层网络(8,9)
1)ROBERTA
•静态mask->动态mask:在bert中每一个epoch被mask的是相同的词,而ROBERTA在每一个epoch结束,重新随机15%的词,使不同的词被mask。
•去除句对NSP任务,输入连续多个句子:在bert中最长是512个token,输入单句或者句对不容易把512个token占满,ROBERTA输入更多句子占满512个坑位。
•训练使用更多数据 更大batch size 更长时间
2)ALBERT
•减少参数:词表 V 到隐层 H 的中间,插入一个小维度 E,即一个VxH的embedding变成两个VxE, ExH的两个fc。
•共享所有层的参数:Attention 和 FFN,在bert中每一层的Attention 和 FFN的参数是不一样的。
•SOP 替换 NSP:负样本换成了同一篇文章中的两个逆序的句子,bert中是A-->B和A-->随机,ALBERT中是A-->B,B-->A。
•BERT对MASK 15% 的词来预测。ALBERT 预测的是 n-gram 片段,包含更完整的语义信息。
•训练数据长度:90%取512,BERT90% 128
•对应BERT large:H:1024 ->4096 L:24->12 窄而深->宽而浅
I love not love you one minute only 60 seconds
我爱的不多, 一分钟只爱了你六十秒。
The most important thing is not to despair
最重要的是不要绝望
I don't care if you don't care about me"
我不在乎你对我的不在乎。 -
Not sad, not happy, just a little cold
不难过,不快乐,只是心有点冷而已。
- e people, some things, I just look at the heart
有些人,有些事,我只是看在心里
Don't fear you forsake, just afraid of losing you
不是怕你丢弃,只是怕失去你
I may be a blessing
记忆是痛苦的根源,忘记也是一种福气
Vulnerable to the attack, hing that once made you smile
只要曾给你带来过笑容,就不要后悔。
We are the same, meet different people to the same injury
我们都一样,遇见不同的人给了同样的伤。
How many time, because get, so pretend not to want
多少时候,因为得不到,所以假装不想要。
I only smile very joy, sorrow will not be see
我只有笑的很欢,忧伤才不会被看穿。
Think you know everything, so do not say the pain
以为你都懂,所以不说痛。
I will Lengnuanzizhi it, More will look out for themselves。
我会冷暖自知,更会好自为之。
Even broke hearts, heart is the man, and that is love
就算伤透了心,心里还是那人,这便是爱情。
No one even lives lost nor will I lose。
会不会有人, 就算把命丢掉也不会把我丢掉。
Do not make life difficult in the past, did not make life difficult in the past
不要与过去过不去,
Cried enough, you will go, injury will be good
哭过了就好了,你都会走的,伤也会好的。
I’d rather be a happy fool than a sad sage
做个悲伤的智者,不如做个开心的傻子。
Dream most deep place, only then the smile is not tired
梦的最深处,只有微笑不累。
I want you to understand me even I don't say a word
我希望你能懂即使我什么也不说。
See through all, is to see don't wear their own heart
看穿了所有,就是看不穿自己的心
I don't trust words, I trust actions
我不相信言语,只相信行动。
Human nature is selfish, is always the look not thoroughly
人性是自私的,永远是看不透
失落的心情:只因那时年少,总把未来想得太好。1 总有一些人,原本只是生命里的过客,后来却成了记忆里的常客。
2 当你和别人聊的很亲密很嗨的时候,别忘了还有那么一个人在辛辛苦苦的等你一个回复。
3 总有一些人会来到你的世界教会你成长然后离开
4 最糟糕的一种感觉是,你无法爱上别人,只因你依然留恋那个伤害你的人。
5 只因那时年少,总把未来想得太好。
6 你夸我百毒不侵,那你知不知道,万箭穿心之后什么也都不怕了。
7 有的人,该忘就忘了吧,人家不在乎你,你又何必委屈自己呢?再怎么痛,再怎么难过,人家也看不到。
8 世界上最短的咒语就是你的名字
9 你是不是有时候因为觉得自己多余才选择先离开的
10 请牢牢记住让你疼的喘不过气的人,因为他们教会你什么叫忍或残忍。
11 大部分的想通只是代表了放弃
12 我的千言万语,抵不过你的一句,好聚好散。
13 不要等我变了以后、才说怀念以前的我
14 最难过不是大吼,而是痛到最深处喘不上气手发抖连泪都得忍着
15 可能我只是个过客,但你不会遇到第二个我
16 教会你最初舞步的人却未必能陪你走到散场。
17 想你的时候有些幸福,幸福的有些难过。
18 她拿着匕首,从背后捅了你一刀,然后放在我手里,惊慌的看着我,跑过去问你疼么。
19 你的眼是我永生再也不会遇见的海。
20 男人控制不了的是新欢,女人抵抗不了的是旧爱
21 我们戴久了面具。等摘下面具却发现。我们的脸早就跟面具一样了。
22 沿途的风景我只能边看边忘。
23 有些话总是像鱼刺一样被卡在喉间进退两难想说却难以启齿。
24 那种亲密的人突然陌生,希望完全落空的感觉,就好像喝口凉水居然被烫到。
25 爱一个你不爱的人就好像抱着一个仙人掌,抱得越紧,你越疼。
26 我的满腔热情,终于成功的被你的冷漠完全消磨了
27 因为你我再也不敢奋不顾身的去爱一个人了
28 每个人的心中都有一个残缺不全的故事,每个故事都有一个无法忘却的人
29 世界上最勇敢的事情,是微笑着听你说你们之间的爱。
生活不顺心的句子 只因那时年少,总把未来想的太好_伤感的句子一、就像被摧残了的肢体,一旦被截去就是永久的丧失。
二、其实我的同桌,不发起癫,不装起逼,还是很好哒
三、是你自己像个傻逼一样把心捧出来,别人才有机会一刀一刀捅上去
四、对于人生,有多少人都是盼望,希望,奢望,失望,绝望,这么过来的。
五、原来有些你自以为很重要的人,你不联系他,他就真的永远不会联系你。
六、我找不到天堂,也摘不到月亮,对不起,让你失望。
七、真正爱一个人,是希望看到他/她快乐;而不是让他/她扮演,你认为的快乐。
八、候鸟已飞过,那么,我的爱情为何迟迟未到
九、其实我的执着依然执着。却决心和你不再联络。
十、容易心软的人,往往狠心起来最绝情
十一、被伤过的心还可以爱谁,没人来陪的滋味,你的爱不在,我一片空白
十二、如果你累了,需要一个人照顾,我希望你第一想到的人是我。
十三、我也只是个十几岁未成年的小姑娘,我没那么强大,强大到可以安抚所有人,强大到不会为一两句话所伤其实骨子里我自卑透了,因为其实说穿了我什么都没有。
十四、有太多期望,会让自己有太多失望
十五、握不住的沙,放下也罢。握不住的他,放下也罢。
十六、不知不觉,有些人越走越远
十七、曾经对上的瞬间难道是一种错觉
十八、他说我高冷,我笑了。知道我有多怕他厌烦我说我烦。
十九、很久之前,打死我也没想到现在的我是这个样子。
二十、带着复杂的心情,看复杂的人生,走复杂的路。
二十一、活在悲剧中,说明老天让我自强不息。
二十二、这辈子,和谁过,怎样过,过多久。有人因为爱情,有人因为物质,有人因为容貌,有人因为前途,有人因为压力。而当这日子真的要和选择的人一起过了,你才明白,钱够花就好,容貌不吓人就行,其实真正幸福的标准,无需理由很简单,只要笑容比眼泪多,你就找对人了。
二十三、我一个人又不是不行 我从来强悍得不用人担心
二十四、你喜欢什么我都给你可是你收下后却捅我一刀。
二十五、在失恋之后我们只是认为或许我们还年轻,爱情并没有经验。
二十六、每个幸福的开始,在之前必定有个悲伤的结局。
二十七、谁都以为我健忘,谁又知道我把过往都用来珍藏,常常一个人空想也会不小心红了眼眶
二十八、只因那时年少,总把未来想的太好。
二十九、所谓爱,就是当感觉、热情、浪漫统统拿掉之后,你仍然珍惜对方。
三十、一切的一切都只是过往云烟,当烟散开的时候,我们将什么都不存在。
三十一、其实你也明白,这个年龄谁都不会是谁的一生。
关于爱情唯美说说:我们都曾年少无知,总把未来想得太美好1、只因那时年少无知,总把爱的承诺说的太早;
2、那条叫做时间的轨道,我们在努力奔跑;
3、爱,找一个能一起吃苦的,而不是一起享受的;找一个能一起承担的,而不是一起逃避的;找一个能对你负责的,而不是对爱情负责的。爱不是一个人的事,是两个人的努力,两个人的共同创造。
4、我们都曾年少无知,总把未来想得太美好;
5、曾经以为可以这样到老,后来才明白爱情故事只剩下了回忆。
6、世界上最残忍的事,不是没遇到爱的人,而是遇到却最终错过;世界上最伤心的事,不是你爱的人不爱你,而是他爱过你后,最后却不爱你。“我们曾相爱,想到就心酸。”
7、两人在一起,不要去想对方爱不爱你,因为爱是经不起想的,你想得越多,伤就会越痛。有一天你会发现,原来爱情真没那么重要。这一路上你会受到伤害,有一些爱,也是会成为隐隐作痛的回忆。
8、爱情是生活里最闪亮的那一部分。用一俗气的比喻,是一桌菜里放的那半勺盐。没有盐,什么都没味道,时间长了,还会得病。但要真是有些日子没盐,寡淡的日子还得照过。
9、我对你的爱,与你无关,即使是夜晚无尽的思念,也只属于我自己,不会带到天亮。我爱你,与你无关,就算此刻站在你身边,依然背着我的双眼,不想让你看见。我爱你,它只属于我的心。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)