NLP基础

1.Attention 对齐模型, 机器翻译  NMT

端到端的四种形式

Decode端用到的输入,是encode最后一次的输出

在过长的句子中,很难保存到前面的特征,梯度下降,不断迭代,前面的影响就很小了。

用所有时刻的 加在一起作为一个向量,

把h1-ht时刻的所有东西 拼到一起作为 decode 端的输入,都是一样的。

 

权值是一样的,那么我怎么知道哪些是好的,哪些是不好的呢?

所以用了attention,加了权值,attention训练出来了系数,使得每次训练的过程,使得每次解码的时候,关注的信息可能不一样了。

 

软对齐。

源语言  》》   目标语言。

 

Attention的权重也是自己学出来的。

 

在双向GRU中也有应用

 

Eij 就是我们训练出来的系数

做了归一化,变成0-1之间。

Aij

对齐模型。指得就是原始语言和目标语言每一个词的分数。

表现S(i-1),对齐关系。

怎么去计算对齐。

 

文本分类,找的是标签和词之间的对齐关系。

 

软对齐:每一个都有对应关系

Hard:只找一个对应关系,只关心最大的一个,最大的设为1,其他的设为0,离散的方式。

 

 

Max-polling 给一个矩阵,就可以polling

 

 

Self attention  

Global attention

Positional encoding

 

Attention is all you need 

 

 

 

 

 

 

 

 

  1. 语法树和依赖树

上层应用:语法分析,会进行句法分析,关系抽取。

三元组,五元组。针对一个实体的,几个方面,特征。

对句子进行结构划分。

宾语/主语  做一个同义词的集合,对评论进行了标签抽取。

提取其中的一些语法快,动宾结构,宾补结构,做进一步的分析。片段抽取。

 

 

句法生成,当生成句子的时候,语法树,用语法树抽取了一些短语,用了分类,聚类模型,聚成某个标签,然后再用这个去提取更上层的标签。

一般是作为一个环节。

 

掌握了基础就可以了。

如果没有真正的去做这个项目的话,涉及到大量的规则,你是通过学习得到的,比如在提取经济学的特征的时候,提取的就是NV等结构,这种结构都是用在有很固定化的句子里面。

 

对句子进行语法分析,生成文本本身是一种比较规范化的。

基本上都是规则化的,经济,足球,股票分析等。

 

语法分析就是其中的一个段,要截取结构来提取其中的结构快,或者去分析。

 

依存句法树 去分析这一块东西前面的东西。

 

用到很多规则化的东西。

 

分析句子中的一些东西。

 

命名实体识别,序列标注问题,具体的方法的话,看项目有没有,项目中有什么,基础的东西知道,项目里面涉及到的知识点得知道。

 

快慢指针经常要考的一个点。

 

NLP的项目 阿里的比赛,文本表示,文本相似度检测,分类模型,或者特征工程的方法去做。

 

可以把一个大项目 拆成一个小项目来写。

 

SVC和SVR的区别?

SVM的公式,怎么求解,怎么推导,是什么问题,哪一部分是核函数呢?核函数常见的有哪些呢?目的是干什么呢?

 

线性回归?公式是怎么样呢?怎么解这个问题呢?(最小二乘法求)一般参数求解使用什么方法呢?梯度下降?推导。

ID3算法和C4.5算法?区别?两者的公式?信息增益和信息增益比?

 

机器学习方面的岗位,推荐系统会做70%,所以SVD,基于协同过滤,基于内容的推荐算法他们非常熟。

 

面试前,项目中涉及的知识点都要全部过一遍。

在项目中没有涉及到,如果你知道一些,你就说一些,你说项目中没有涉及到,之前没有研究过。

你大概知道是怎么样子,但是之前没有深入了解过。

 

非结构化的东西结构化。不同领域的需要不同的语料。

 

质量打分,垃圾评论识别,是看评论是否和实体相关,有个意图识别的概念。

意图和评论识别。意图识别?看概念。

 

规则+词典+算法+聚类

 

概念上的一些区别。

 

情感分析这一块写下来。

 

区别一篇新闻是否有营销意图?搜狐的比赛,看一下,判断一个新闻是否有营销意图。

 

评论标签提取这方面的东西。语法分析,特征的评论词的提取,(句法分析,依赖句法,区别哪些是评论词,哪些是特征词)

 

 

 

实体融合。

 

模板,只是复杂,在语言生成LSTM没有诞生之前,用的都是模板,加入了概率模型,语言模型,在统计翻译里面,生成的句子还是要进行拼装,不是直接填进去的。

 

标题挖掘,去判断一个标题是否具有吸引力,给一个标题打分,最简单的办法就是有标注数据。

 

文本转录成视频,通过对它进行整体情感分析,情感相关的乐曲,找到图文相似的一段,把话给读出去,这句话和哪个图片最相似。怎么找到图片和文本的相似度。图文一致性。

给你一句话,找到最合适的配图。给一张图片,找描述的句子。

图像和文字的东西。生成和匹配。语音合成,怎么生成的更舒服一点,而不是一个字一个字读。

 

 

统计和神经网络的激活函数都看一遍。Sgd,rmr,rmso,rmsprop,adma等

  1. 常见的5种激活函数。

为什么要用激活函数:如果没有激活函数,就没有隐含层的意义了。

做了非线性变换,当不用激活函数的时候,加隐藏层就没有意义了。

Sigmoid和softmax的区别?一般用在全连接层的最后一层。

Tan函数和relu函数,会用在全连接层前面的几层,作为激活函数。

激活函数的硬饱和和软饱和。

Sigmoid和softmax放在前面,会趋近两边,求导的时候梯度下降很慢,可能就出现梯度不能下降的情况。

Relu函数下降速度很快,收敛速度是最快的,而且不会出现梯度消失的情况。

如果层数多了,可能会把数据落在0这边,让大量神经元死亡。

Maxsort函数?

全连接层,embedding层,卷积层,池化层,隐层。

Early stop,测试,loss或者评价指标,如果连续几次没有下降,那么就说明这个东西已经训练好了,再训练下去是没有意义的。

NLP相关的项目,要加在预训练层,之前的embedding层,是vac_size*emb_size,刚开始的权重是随机初始化的,把embedding这个matixs初始化了。这样会加快速度,也能提升效果。

训练的效率下降,加载embedding可能会更好。Epcho

Dropout是一个随机的概率层,会将matrixs的某些点,变成0,使得样本更加符合真实的分布,使得模型的鲁棒性更高,这样相当于增加了一些新的样本点。

关于参数调整,adam优化函数,下降速度很快,训练很方便,不知道用什么梯度下降函数的时候,就用这个,如果用其他梯度下降的话,要知道为什么要用这些梯度下降。

 

神经网络的流程?

神经网络权值初始化的方法:随机化初始的话,一般是付一个符合正态分布的方法。

预训练过的权值,一定要比初始化的权值要好,有先验,就会提高训练的结果。

比如在图像中,在特别大的样本中,输入一个特别大的模型,再去得到结果。

 

第一个用tensorflow去用,看看stars比较高的代码,最好去看官方的示例。

 

  1. 为什么遗忘门要用sigmode函数。

就是说sigmode函数是想达到遗忘的根本目的,是0和1,但为什么要用sigmode而不是直接是分段的0和1,因为神经网络中是连续的,要求可导的,但是其他的,就求导很麻烦,所以用很接近0,1跃阶函数。

细胞状态和隐状态的区别?

GRU和LSTM的区别?GRU没有隐状态,门也改变了。

双向RNN和双向LSTM,这两个方向是怎么融合的?

是把正向RNN的输出和反向的RNN的输出进行串联的合并,相当于正向和反向是并行的,两个是并行的。它们是把两个的hidden states的输出并到一起,但是不是把上一个的hidden states输入到下一个。

端到端模型:有两部分,应该又三部分,encode  decode ,  

context vector(编码向量),编码向量最原始的就是hidden states的ht,最后一个状态的输出,把这个作为encode的输出,decode的输入。最原始的RNN的想法。

Soft端的ht作为decode的h0.

后来有人分析了,觉得这样不太好,认为每一次都要用ht,在每一时刻都作为输入。

前面两种用的是ht时刻的,但是后面两种用的是h0-ht。

每一次的编码都是有反馈的,每一次都是要把soft端encode端h0-ht的输入都用起来,作为解码的输入。

Attention就是指关注某一些权重比较大的。最早没有attention之前,大家都想着把h0和ht都用起来,每次解码的时候,关注编码端的所有东西,有attention就只关注有权重的那几个层。

第一种和第四种用的比较多。下去把attention再看一下,有啥不了解的再问一下。

 

  1. LSTM 、GRU与RNN的区别

LSTM:增加了长短期记忆,加了机制可以解决梯度爆炸的问题。

RNN是一个递归模型,每次都要把前面的信息记住。

可能是很长的模型,需要记住前面所有的信息,显然,在反向求导求参数的过程中,因为过长,反向梯度求解的过程,这样会梯度弥散或者梯度爆炸。

RNN不能在过长的模型上训练。

LSTM和GRU发明了长短记忆,选择性的遗忘前面的信息。

LSTM的结构,多了一个cell线,多了cell之后呢,可以选择性的,RNN的隐藏窗口,变成了细胞状态,来记录它哪些东西应该保留,哪些要丢弃。

LSTM的图和公式

主要是Cell中的公式记住,LSTM三个门,遗忘们,输出门和输入门,这三个门记住,这三个门分别是干什么的,公式的那一部分。

在遗忘门里通常是Sigmode函数作为激活函数,最重要的就是遗忘门,使得在激活的时候,可以选择性的记住前面的重要信息,被激活的会放大,没有被激活的变小,选择性的遗忘一些东西。

GRU把LSTM两根状态线合到了一起。大家在平时用的过程中,有几个点要注意:能用GRU,LSTM的时候,先用双向GRU,双向LSTM。很多语言的语法是向后的。有些词是依赖后面的信息,语法的滞后。

机器翻译,文本生成,都会用到双向的。

RNN的训练速度要比CNN慢。

所以机器学习首选CNN,次选LSTM和GRU。

对于关系的抓取,GRU和RNN可能效果更好一点。

GRU和LSTM就会考公式怎么写,cell中的门怎么画。

 

  1. 端到端模型:

有几种变式:

端到端的四种模式

 

端到端模型的机制:联合加入到Decode端,共同解码,但不好,并没有充分体现encode的信息。

所以变成了attention,attention就是关注一部分词。

Copynet :端到端的关键词生成中,直接去copy,代替attention,并不是具有关系之间的权重,而是直接copy过去。

 

  1. https://www.cnblogs.com/DjangoBlog/p/737274html

此博客及相关文章写得极好,很清楚,多看看。

深度学习最初在之所以图像和语音取得巨大成功,一个很重要的原因是图像和语音原始数据是连续和稠密的,有局部相关性。应用深度学习解决大规模文本分类问题最重要的是解决文本表示,再利用CNN/RNN等网络结构自动获取特征表达能力,去掉繁杂的人工特征工程,端到端的解决问题。

  1. FastText

把句子中所有的词向量进行平均(某种意义上可以理解为只有一个avg pooling特殊CNN),然后直接接 softmax 层。其实文章也加入了一些 n-gram 特征的 trick 来捕获局部序列信息。文章倒没太多信息量,算是水文吧,带来的思考是文本分类问题是有一些线性问题的部分,也就是说不必做过多的非线性转换、特征组合即可捕获很多分类信息,因此有些任务即便简单的模型便可以搞定了。

  1. TextCNN

过程:第一层是图中最左边的75的句子矩阵,每行是词向量,维度=5,这个可以类比为图像中的原始像素点了。然后经过有 filter_size=(2,3,4) 的一维卷积层,每个filter_size 有两个输出 channel。第三层是一个1-max pooling层,这样不同长度句子经过pooling层之后都能变成定长的表示了,最后接一层全连接的 softmax 层,输出每个类别的概率。

特征:这里的特征就是词向量,有静态(static)和非静态(non-static)方式。static方式采用比如word2vec预训练的词向量,训练过程不更新词向量,实质上属于迁移学习了,特别是数据量比较小的情况下,采用静态的词向量往往效果不错。non-static则是在训练过程中更新词向量。推荐的方式是 non-static 中的 fine-tunning方式,它是以预训练(pre-train)的word2vec向量初始化词向量,训练过程中调整词向量,能加速收敛,当然如果有充足的训练数据和资源,直接随机初始化词向量效果也是可以的。

通道(Channels):图像中可以利用 (R, G, B) 作为不同channel,而文本的输入的channel通常是不同方式的embedding方式(比如 word2vecGlove),实践中也有利用静态词向量和fine-tunning词向量作为不同channel的做法。

一维卷积(conv-1d):图像是二维数据,经过词向量表达的文本为一维数据,因此在TextCNN卷积用的是一维卷积。一维卷积带来的问题是需要设计通过不同 filter_size filter 获取不同宽度的视野。

 

 

CNN的文本分类

神经网络的第一层,输入层(词变成数字(one-hot层),

先序列化,有10个词,神经网络中是定长的,比如说设定了30个,就补充20个零,如果超过了,就截断。

embedding(词汇长度*词向量维度,初始化,最开始就是随机生成的,最常见的是用gensim预训练的方法训练出来词向量模型,将词向量的模型加载进去,通过反向传播算法,把这个embedding层学出来,乘出来的)),

CNN有卷积和池化层,

卷积操作,卷积核点乘大矩阵,kernel size,窗口眼?把维度设置的和词向量的维度一样,

步长2,设置超参数。卷积可能有很多个,卷积核,随机化的向量,随机化200个2*200的核,把这200个向量拼起来。感受眼为2的有200个featre,200个卷积核的输出,向量要进行polling操作。

池化:max polling 和average polling,通过求平均和求最大值,把它压平,方便计算。

按纵轴求最大或者求平均。

Feature map了

接一个全连接层或者是Softmax层,得到概率值。

通过loss的方法不断训练,就会得到结果。

TextCNN

就是感受也多变成几个,2,3,4,5,等,把多个层次的输入,变成的多个kernel size ,而不是单一的kernel size。

预训练!!!会得到所谓的先验知识。

 

  1. RNN的文本分类

尽管TextCNN能够在很多任务里面能有不错的表现,但CNN有个最大问题是固定 filter_size 的视野,一方面无法建模更长的序列信息,另一方面 filter_size 的超参调节也很繁琐。CNN本质是做文本的特征表达工作,而自然语言处理中更常用的是递归神经网络(RNN, Recurrent Neural Network),能够更好的表达上下文信息。具体在文本分类任务中,Bi-directional RNN(实际使用的是双向LSTM)从某种意义上可以理解为可以捕获变长且双向的的 "n-gram" 信息。

 

RNN是时序模型,T1时刻对应第一个词,Tn对应第n个词,进入RNN的矩阵里面去。

Hidden size,和 直接的输出。

会把上一个时间的输出,作为下一个时间的输入。

T2时刻对T1时刻有一个记忆的功能,通过输入之后,常见的最基本的分类模型,就是Tn时刻的输出,会记录前面Tn所有状态的输出,会把Tn时刻的作为feature map来作分类。

T1时刻一直到加attention去做分类。

在分类算法里面,要先试一下TextCNN,在新闻文本里面分类,如果不考虑到上下文之间的联系的话,一般CNN的算法会更好一点。

但是像关系算法和情感分类,RNN算法会更好一点,但是RNN训练算法比较慢,并且不稳定。

双向BIGRU模型,双向LSTM模型。

 

  1. CNNRNN用在文本分类任务中尽管效果显著,但都有一个不足的地方就是不够直观,可解释性不好,特别是在分析badcase时候感受尤其深刻。而注意力(Attention)机制是自然语言处理领域一个常用的建模长时间记忆机制,能够很直观的给出每个词对结果的贡献,基本成了Seq2Seq模型的标配了。

 

  1. 做项目的话,情感分类模型有很多可以做的。

0,1,2 急性分析

情绪分类,高兴,伤心,悲伤

关系分类,

新闻文本分类,长分类

相似度判断,输入两个句子,输出是否相似。

 

多标签分类,给一段话,分类出有多少个类型的标签。

  1. Sem eval 2018 这里有很多task,给你微博,去预测emoji.

 

  1. 文本表示

one-hot representation 和 distributed representation

One-hot Representation

每个词都是茫茫 0 海中的一个 1。这种 One-hot Representation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,话筒记为 3,麦克记为 8(假设从 0 开始记)。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。

缺点:1、向量的维度会随着句子的词的数量类型增大而增大;2、任意两个词之间都是孤立的,根本无法表示出在语义层面上词与词之间的相关信息,而这一点是致命的。

distributed representation

到目前为止,基于分布假说的词表示方法,根据建模的不同,主要可以分为三类:基于矩阵的分布表示(Global Vector)基于聚类的分布表示基于神经网络的分布表示(word embedding)。尽管这些不同的分布表示方法使用了不同的技术手段获取词表示,但由于这些方法均基于分布假说,它们的核心思想也都由两部分组成:一、选择一种方式描述上下文;二、选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系

 

  1. wordEmbedding和w2v(两种方法 skipgram和CBOW)

https://blog.csdn.net/scotfield_msn/article/details/69075227#commentBox (一篇讲NLP各方面基础知识很好的博客)

word embedding 是神经网络训练的副产物。神经网络语言模型,大约有以下这些:

a) Neural Network Language Model ,NNLM

b) Log-Bilinear Language Model, LBL

c) Recurrent Neural Network based Language Model,RNNLM

d) Collobert 和 Weston 在2008 年提出的 C&W 模型

e) Mikolov 等人提出了 CBOW( Continuous Bagof-Words)和 Skip-gram 模型。

 

  1. CBOW( Continuous Bagof-Words)和 Skip-gram 模型

http://www.cnblogs.com/pinard/p/7160330.html  (刘建平的讲CBOW和SKGM)

 CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。我们的输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。

问题:输入的是上下文的词向量,这个词向量是怎么得到的?

最后的输出是词汇表大小个的softmax,中心词的词向量表示也是用词会表的维度来表示的,那么它并没有降低维度啊?

所有词对应的词向量,其实是拿出来了某一个隐藏层?

霍夫曼树?(Hierarchical softmax ) 负采样(negative sampling)?

隐藏层的神经元就是词汇表的大小?

 

 Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。

 

  1. LDA模型

http://www.cnblogs.com/pinard/p/6831308.html (LDA主题模型)

二项分布,Beta分布(二项分布共轭的分布),Dirichlet分布(狄利克雷分布,Beta分布是其二维时的特殊形式)

 

         LDA主题模型:

         假设有M篇文档,对应第d个文档中有有Nd个词。即输入为:

 

目标:找到每一篇文档的主题分布和每一个主题中词的分布。

假定:在LDA模型中,我们需要先假定一个主题数目K,这样所有的分布就都基于K个主题展开。

LDA假设文档主题的先验分布是Dirichlet分布。即对于任一文档d, 其主题分布θd为

 

 

 

 

 

LDA假设主题中词的先验分布是Dirichlet分布,即对于任一主题k, 其词分布βk为:

 

 

 

 

 

 

 

 

  1. 文本表示:

文本在计算机中不是一个矩阵,所以要在计算机中计算,要进行表示才能作为输入。

文本表示主要有两块, 词袋模型(词袋模型) 和 分布式模型

 

词集模型,有多少个词汇。

词袋模型,词和权值。开放性思路去想,权值是一个比较大的概念,可以作为一个开放性的,可以改进的地方去思考。(稀疏向量)

 

如何得到一个词集模型?

分词,过滤停用词(有可能还需要过滤词性)

 

分布式模型:(稠密向量来表示)

模型本身是和上下文有关系的,不是单纯的词,所以叫做分布式表示。

LDA,W2V。

 

LDA的输出是文档-主题,主题-词 矩阵,还是有上下文的关系的,之间有相关关系的。

W2V :工具,训练W2E的方法,两种方法 skipgramCBOW,loss是相似度,不断迭代,把模型训练出来,训练好之后,把embedding这一层拿出来。可解释性比较差。

 

W2Embedding:这个才是对文档的词的表示,真正的模型,神经网络的副产品,是embedding那一层。300维的embedding是一种表示学习的方法,每一行到底是什么,是不知道的,神经网络可解释性很差。调参。

 

  1. 综合性的方法:

单纯用词袋不够,加一行feature进去。

通过特征工程的方法,让词袋表示的方法更加完善一点。让文本表示的信息量更丰富一点。

加各种各样的feature的方法。

 

W2Embedding对文章的表示,

一种,文档有10个词,将这10词的词向量直接加起来

另一种,加起来, 取平均,average polling

TF.IDF的加权w2E表示,是目前看到的比较好并且简单的方法。

 

  1. CNN模型的最后一层,分类器模型那一层取出来,模仿图像提取特征的方法,把一个分类模型训练好之后,把softmax 全连接前一层拿出来作为文档表示。

这样表示的目的是:要做新闻文本的分类,那就在一个分类的模型是进行训练,取出来权值表示,这里一定要想清楚,任务是什么。

输入是embedding的向量,

 

分类模型的,深度NLP的第一层都是embedding层,

抽出来之后,会接一个全连接网络做分类,用来代替embedding那一层。

通用的做法是把这个Feature拿出来之后,喂给LSTM或者全连接网络 都可以。

 

Skipsouce  三个LSTM

输入:一个句子,输出是:上一个句子和下一个句子,

编码器之类的。

 

  1. TF.IDF

http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

原理:

比如某一个生僻词在语料库中没有,这样我们的分母为0, IDF没有意义了。所以常用的IDF我们需要做一些平滑,使语料库中没有出现的词也可以得到一个合适的IDF值。平滑的方法有很多种,最常见的IDF平滑后的公式之一为:

 

分母上加1是为了防止这个词没有在语料库中出现过,分母没有意义了,最后加1,是为了防止一些热词会有N(x)=N,导致IDF值为0, 接着TF-IDF也为0,影响整个算法的过程。

 

 

  1. TextRank

http://www.letiantian.me/2014-12-01-text-rank/ (这个有代码)

https://www.cnblogs.com/xueyinzhe/p/7101295.html (这个讲得更详细)

原理:

基于PageRank,用于生成文本关键字和摘要的。

PageRank最开始用来计算网页的重要性。整个www可以看作一张有向图图,节点是网页。如果网页A存在到网页B的链接,那么有一条从网页A指向网页B的有向边。

 

d表示阻尼系数,是用来克服这个公式中“d *”后面的部分的固有缺陷用的:如果仅仅有求和的部分,那么该公式将无法处理没有入链的网页的PR值,因为这时,根据该公式这些网页的PR值为0,但实际情况却不是这样,所有加入了一个阻尼系数来确保每个网页都有一个大于0PR值,根据实验的结果,在0.85的阻尼系数下,大约100多次迭代PR值就能收敛到一个稳定的值,而当阻尼系数接近1时,需要的迭代次数会陡然增加很多,且排序不稳定。公式中S(Vj)前面的分数指的是Vj所有出链指向的网页应该平分VjPR值,这样才算是把自己的票分给了自己链接到的网页。

 

使用TextRank提取关键字:

 

该公式仅仅比PageRank多了一个权重项Wji,用来表示两个节点之间的边连接有不同的重要程度。

1)把给定的文本T按照完整句子进行分割,即

http://od6jpuxvb.bkt.clouddn.com/GJJp0dC+Iu3nuQnt95RllXzy3V5AAAAABJRU5ErkJggg==.png

  2)对于每个句子http://od6jpuxvb.bkt.clouddn.com/YtRBAzUQPjHVjQv3z50sjICMhubGwk1kF1YIBVaUZGBjBnYYp7gAEuCyBg9uzZ+BXgdBAecPHiRScnJ+LVkwdIc1BRURHtnAIBpDkImLrnzZtHO9cwkOSgFy9e0M4dcDDoGmgA9CATy1d+XhEAAAAASUVORK5CYII=.png,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,即http://od6jpuxvb.bkt.clouddn.com/wdRhSHL8S992WFn2WXCWwAAAABJRU5ErkJggg==.png,其中 ti,j 是保留后的候选关键词。

  3)构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。(这边共现就可以,不用考虑是否相邻)

  4)根据上面公式,迭代传播各节点的权重,直至收敛。

  5)对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词。

  6)5得到最重要的T个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。

 

将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。

 

参照“使用TextRank提取关键词”提取出若干关键词。若原文本中存在若干个关键词相邻的情况,那么这些关键词可以构成一个关键短语。

将每个句子看成图中的一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。

 

公式中,Si,Sj分别表示两个句子,Wk表示句子中的词,那么分子部分的意思是同时出现在两个句子中的同一个词的个数,分母是对句子中词的个数求对数之和。分母这样设计可以遏制较长的句子在相似度计算上的优势。

我们可以根据以上相似度公式循环计算任意两个节点之间的相似度,根据阈值去掉两个节点之间相似度较低的边连接,构建出节点连接图,然后计算TextRank值,最后对所有TextRank值排序,选出TextRank值最高的几个节点对应的句子作为摘要。

 

  1. LDA主题模型

http://www.cnblogs.com/pinard/p/6831308.html (刘建平大神讲的)

下去去看 LDA 数学八卦 的文档。

隐含狄利克雷分布(Latent Dirichlet Allocation,以下简称LDA)。注意机器学习还有一个LDA,即线性判别分析,主要是用于降维和分类的。

 

老师上课讲的:

(得到一个文档和词频的矩阵,横轴文章,纵轴是所有文章中的词汇。)

再加一个Topic,符合隐狄利克雷分布。初始:文档-词矩阵。主题和文档的矩阵-主题的矩阵

某篇文档下的词是什么,某篇文档下的主题是什么。

主题和词的矩阵,主题是从词汇中总结出来的。

吉布斯采样GIBBS

隐狄利克雷分布。(伯努利,二项式一直推过来)

 

  1. 关系抽取(没找到太好的博客,之后看老师给出来的资料有没有)

http://www.voidcn.com/article/p-tqwyziqq-w.html

从文本中识别实体并抽取实体之间的语义关系

关系抽取,主要的方法还是分类方法。(老师讲的)

 

  1. 规则抽取

https://yq.aliyun.com/articles/158691

规则抽取,拟定规则,句式比较固定的文本上。可以通过规则,通过正则表达式或者正则的方法来提取出来。

 

  1. 术语抽取(和命名实体抽取很像?)

实体抽取

命名实体抽取(字标注法)人名,地名,书名等

在短文本中,命名实体在大部分情况下是关键词,但在长文本中,命名实体很可能不是关键词。

 

  1. MI PMI

MI 互信息(Mutual Information)表示两个变量X与Y是否有关系,以及关系的强弱。

https://blog.csdn.net/lk7688535/article/details/52529610 (MI)

PMI 点互信息(Pointwise Mutual Information)指标来衡量两个事物之间的相关性(比如两个词)。

https://blog.csdn.net/luo123n/article/details/48574123

 

  1. 神经网络交叉熵

https://blog.csdn.net/u014313009/article/details/51043064

取代二次损失代价函数的交叉熵代价函数。

 

  1. NEI  (没找到相关资料,老师再讲一下)

 

  1. C value (没找到相关资料,wiki的不是)

解释术语在文档中的意义,词的长度越长 ,并且出现的概率较多,就认为是一个术语。

 

  1. 预过滤 (词性的过滤 和 停用词的过滤)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

基础的NLP任务:

  1. 词/句子分割

Word/sentence segmentation

2002年之前,自动分词方法基本上是基于词(或词典)的,在此基础上可进一步分成基于规则和基于统计的两大类。

以往的分词方法,无论是基于规则的还是基于统计的,一般都依赖于一个事先编制的词表(词典)。自动分词过程就是通过词表和相关信息来做出词语切分的决策。与此相反,基于字标注的分词方法实际上是构词方法。即把分词过程视为字在字串中的标注问题。由于每个字在构造一个特定的词语时都占据着一个确定的构词位置(即词位)假如规定每个字最多只有四个构词位置:即B(词首)M (词中)E(词尾)S(单独成词)那么下面句子()的分词结果就可以直接表示成如()所示的逐字标注形式:

  ()分词结果:/上海/计划/N/本/世纪/末/实现/人均/国内/生产/总值/五千美元/。
  ()字标注形式:上/B海/E计/B划/E NS 本/s世/B 纪/E 末/S 实/B 现/E 人/B 均/E 国/B 内/E生/B产/E总/B值/E 五/B千/M 美/M 元/E 。/S

首先需要说明,这里说到的不只限于汉字。考虑到中文真实文本中不可避免地会包含一定数量的非汉字字符,本文所说的,也包括外文字母、阿拉伯数字和标点符号等字符。所有这些字符都是构词的基本单元。当然,汉字依然是这个单元集合中数量最多的一类字符。
  把分词过程视为字的标注问题的一个重要优势在于,它能够平衡地看待词表词和未登录词的识别问题。在这种分词技术中,文本中的词表词和未登录词都是用统一的字标注过程来实现的。在学习架构上,既可以不必专门强调词表词信息,也不用专门设计特定的未登录词(如人名、地名、机构名)识别模块。这使得分词系统的设计大大简化。在字标注过程中,所有的字根据预定义的特征进行词位特性的学习,获得一个概率模型。然后,在待分字串上,根据字与字之间的结合紧密程度,得到一个词位的标注结果。最后,根据词位定义直接获得最终的分词结果。总而言之,在这样一个分词过程中,分词成为字重组的简单过程。然而这一简单处理带来的分词结果却是令人满意的。

既然基于字标注的中文分词方法是将中文分词当作词性标注的问题来对待,那么就必须有标注对象和标注集了。形象一点,从这个方法的命名上我们就可以推断出它的标注是基本的汉字(还包括一定数量的非汉字字符),而标注集则比较灵活,这些标注集都是依据汉字在汉语词中的位置设计的,最简单的是2-tag,譬如将词首标记设计为B,而将词的其他位置标记设计为I,那么“中国”就可以标记为“中/B 国/I”,“海南岛”则可以标记为“海/B 南/I 岛/I”。

步骤:

要分词的句子

瓦西里斯的船只中有40%驶向远东,每个月几乎都有两三条船停靠中国港口。

                   将标注对象独立出来,事实上就是给每个字符加上空格:

                   西

              其次,假设你已经训练好了一个字标注器,那么就直接给这些字进行标注吧:

/B 西/I /B /I /B /I /B /B /B /I /I /I /I /B /I /B /B /B /I /I /B /I /B /I /B /B /B /I /B /I /B /I /I /I /B

  最后,需要你做得就是按照这两个标记的意思还原中文词,并且除去这些标记:

瓦西 里斯 的船 有40%驶 向远 每个月 几乎 都有 条船 停靠 中国港口

 

字标注法最常用的方法,最大熵模型,CRFHMM也用。

 

常用的分词工具:jieba分词的原理

https://www.cnblogs.com/echo-cheng/p/7967221.html (讲jieba分词原理的)

https://github.com/fxsjy/jieba jiebagithub开源)

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

jieba分词应该属于概率语言模型分词

概率语言模型分词的任务是:在全切分所得的所有结果中求某个切分方案S,使得P(S)最大。

对于未登录的词,采用的是字标注法。

 

  1. 词性标注

http://www.52nlp.cn/hmm-application-in-natural-language-processing-one-part-of-speech-tagging-1

 

如果每个单词仅仅对应一个词性标记,那么词性标注就非常容易了。但是语言本身的复杂性导致了并非每一个单词只有一个词性标记,而存在一部分单词有多个词性标记可以选择,如book这个单词,既可以是动词(book that flight),也可以是名词(hand me that book),因此,词性标注的关键问题就是消解这样的歧义,也就是对于句子中的每一个单词在一定的上下文中选择恰如其分的标记。

 

大多数的标注算法可以归纳为三类:一类是基于规则的标注算法rule-based tagger),一类是随机标注算法stochastic tagger),最后一类是混合型的标注算法。基于规则的标注算法一般都包括一个手工制作的歧义消解规则库;随机标注算法一般会使用一个训练语料库来计算在给定的上下文中某一给定单词具有某一给定标记的概率,如基于HMM的标注算法;而混合型标注算法具有上述两种算法的特点,如TBL标注算法。

  1. 句法分析 Parsing

https://blog.csdn.net/alihonglong/article/details/52333481

基本任务是确定句子的句法结构句子中词汇之间的依存关系

句法分析分为句法结构分析和依存关系分析。

句法结构分析又称成分结构分析或短语结构分析,其又分为二种。以获取整个句子的句法结构为目的分析称为完全句法分析或完全短语结构分析。以获得局部成分(如基本名词短语)为目的的分析称为局部分析或浅层分析。

依存关系分析又称为依存句法分析或依存结构分析。

 

  1. 命名实体识别

https://blog.csdn.net/cuixianpeng/article/details/18084807

命名实体识别(Named EntitiesRecognition, NER)是自然语言处理(Natural LanguageProcessing, NLP)的一个基础任务。其目的是识别语料中人名、地名、组织机构名等命名实体。由于这些命名实体数量不断增加,通常不可能在词典中穷尽列出,且其构成方法具有各自的一些规律性,因而,通常把对这些词的识别从词汇形态处理(如汉语切分)任务中独立处理,称为命名实体识别。命名实体识别技术是信息抽取、信息检索、机器翻译、问答系统等多种自然语言处理技术必不可少的组成部分。

 

命名实体是命名实体识别的研究主体,一般包括3大类(实体类、时间类和数字类)和7小类(人名、地名、机构名、时间、日期、货币和百分比)命名实体。评判一个命名实体是否被正确识别包括两个方面:实体的边界是否正确;实体的类型是否标注正确。主要错误类型包括文本正确,类型可能错误;反之,文本边界错误,而其包含的主要实体词和词类标记可能正确。

 

命名实体识别的主要技术方法分为:基于规则和词典的方法、基于统计的方法、二者混合的方法等。

 

  1. 信息抽取

关键词提取(抽取式提取和抽象式提取)

关键词:是一篇文章中重要的词   和命名实体区别

抽取式提取:出现的词,无监督的方法

TF.IDF,IDF的平滑)

词性的过滤(只要几种词性) 和 过滤停用词(词性的范围更大)

TextRank(原理和流程),图方法提取关键词。可作用于单篇文章。给一个词窗口,来源于pagerrank,五个词,就有五个节点,滑动一个你设定好的窗口,往下再滑一个,确定权重,求出权重的概念,不是用过词频去表现词的关键性,是通过词之间共现的关系,表现词的关键性。

 

抽象式提取:没有出现的,自己提取出来的。(分类)

抽象式(SVM等各种分类方法)

端到端(句子,source 端的句子,在decode端还是分类模型)

 

词袋模型(10篇文档,20种不同的词汇tags,不考虑词序,不考虑词之间的关系。像一个袋子一样。把词汇掏出来)

 

LDA主题模型(得到一个文档和词频的矩阵,横轴文章,纵轴是所有文章中的词汇。)

再加一个Topic,符合隐狄利克雷分布。初始:文档-词矩阵。主题和文档的矩阵-主题的矩阵

某篇文档下的词是什么,某篇文档下的主题是什么。

主题和词的矩阵,主题是从词汇中总结出来的。

LSA 是主成分分析,和图像里面有个降维的方法很像。

吉布斯采样GIBBS

隐狄利克雷分布。(伯努利,二项式一直推过来)

 

其他的抽取方法

关系抽取,主要的方法还是分类方法。

规则抽取,拟定规则,句式比较固定的文本上。可以通过规则,通过正则表达式或者正则的方法来提取出来。

 

实体抽取

命名实体抽取(字标注法)

人名,地名,书名等

在短文本中,命名实体在大部分情况下是关键词,但在长文本中,命名实体很可能不是关键词。

 

预过滤

 

术语抽取(两个词之间的共现频率比较高 MI互信息,神经网络交叉熵等等)

MI和PMI

NEI

C value

解释术语在文档中的意义,词的长度越长 ,并且出现的概率较多,就认为是一个术语。

 

 

 

要补SVM和LR,以及编程。

 

 

文本表示~(周二统一发资料

神经网络 非神经网络的方法

通过一遍遍练习,让面试官明白你在说什么,讲的时候突出关键点。

猜你喜欢

转载自blog.csdn.net/baidu_33718858/article/details/81270709