NLP框架

什么是自然语言处理?

计算机可以根据人类语言建模成计算机可以理解的信息,并且可以将这些信息利用起来,实现一个有用的系统。

语言模型(Bi-Gram/Tri-Gram/N-Gram)

频率派:统计不同词汇出现频率,从而知道某个词汇之后出现下一个词的概率。放弃寻找语言中的规律,直接以概率的方式预测最有可能出现的词汇。

语言模型:用于评估文本符合语言使用习惯程度的模型。计算一句话出现的概率,随着句子长度增加,后续词的概率计算依存指数级增长。

N-Gram语言模型:基于概率的判别模型,输入是一句话,输出是这句话的概率,即这些单词的联合概率。

有一个 n n n个词组成的句子 S = { w 1 , w 2 , … , w n } S=\{w_1,w_2,…,w_n\} S={w1,w2,,wn},每一个单词 w i w_i wi都依赖于"第一个单词 w 1 w_1 w1到它之前一个单词 w i − 1 w_{i-1} wi1"的影响 p ( S ) = p ( w 1 , w 2 , … , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) … p ( w n ∣ w n − 1 … w 2 w 1 ) p(S)=p(w_1,w_2,…,w_n)=p(w_1)p(w_2|w_1)…p(w_n|w_{n-1}…w_2w_1) p(S)=p(w1,w2,,wn)=p(w1)p(w2w1)p(wnwn1w2w1)

参数空间过大,数据稀疏严重。

N-Gram基本思想:将文本里的内容按字节大小为 n n n的滑动窗口操作,形成长度为 n n n的字节片段序列,每个片段称为gram。对所有gram的出现频率进行统计,并按事先设定好的阈值过滤,形成关键gram列表,也就是"文本的向量特征空间",列表中的每一种gram就是一个特征向量维度。

[马尔科夫假设:在一段文本中,第 N N N个词出现只与前面 n − 1 n-1 n1个词相关,而与其他任何词都不相关。]

Markov Assumption:一个词的出现仅与它之前的若干个词有关

p ( w 1 … w n ) = ∏ p ( w i ) p ( w i − 1 … w 1 ) ≈ ∏ p ( w i ∣ w i − 1 … w i − N + 1 ) ​ p(w_1…w_n)=\prod p(w_i)p(w_{i-1}…w_1)\approx\prod p(w_i|w_{i-1}…w_{i-N+1})​ p(w1wn)=p(wi)p(wi1w1)p(wiwi1wiN+1)

Bi-gram:一个词的出现仅依赖于它前面出现的一个词

p ( S ) = p ( w 1 w 2 … w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) … p ( w n ∣ w n − 1 ) ​ p(S)=p(w_1w_2…w_n)=p(w_1)p(w_2|w_1)…p(w_n|w_{n-1})​ p(S)=p(w1w2wn)=p(w1)p(w2w1)p(wnwn1)

Tri-gram:一个词的出现仅依赖于它前面出现的两个词

p ( S ) = p ( w 1 w 2 … w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) … p ( w n ∣ w n − 1 w n − 2 ) p(S)=p(w_1w_2…w_n)=p(w_1)p(w_2|w_1)…p(w_n|w_{n-1}w_{n-2}) p(S)=p(w1w2wn)=p(w1)p(w2w1)p(wnwn1wn2)

马尔科夫假设切断了上下文联系,语境间切换的情况。

如何计算N-Gram语言模型里的每一项条件概率:极大似然估计(模型一定参数未知;样本iid),频率计算。
NLP框架_第1张图片

评价方法:迷惑度、困惑度、混乱度,基本思想是给测试集赋予较高概率值的语言模型较好。

P P ( W ) = P ( w 1 , w 2 , … , w N ) − 1 N PP(W)=P(w_1,w_2,…,w_N)^{-\frac{1}{N}} PP(W)=P(w1,w2,,wN)N1

语料库和语言知识库

语料库(corpus):存放语言材料的仓库;存放在计算机里的原始语料文本,经过加工后带有语言信息标注的语料文本。

腾讯中文语料库:中文词向量数据集包含800多万中文词汇,其中每个词对应一个200维的向量。

https://ai.tencent.com/ailab/nlp/data/Tencent_AILab_ChineseEmbedding.tar.gz

词法分析

将句子转换成词序列,并标记句子中词的词性。不同语言词法分析的任务有所不同。

英文词法分析:用空格隔开,无需分词;词的形态变化表示语法关系。(词识别、词形还原|未登录词处理|词性标注)

汉语词法分析:次与此紧密相连,没有明显的分界标志;词性变化少,靠词序或虚词来表示。(分词|未登录词识别|词性标注)

分词歧义-基于规则的方法[事先人工建好分词词典和规则库、最大匹配(MM)];

​ 基于统计的方法[字与字、词与词之间的同现频率作为分词的依据]

英文分词及词法分析nltk;

中文分词及词法分词jieba[分词模式:精确模式、全模式、搜索引擎模式;提取文本extract_tags;新建自定义分词器posseg]

TF-IDF:用于提取关键字。某个词很少见,但在这篇文章中频繁出现,则这个词可以反映这篇文章的特性。

词 频 ( T F ) = 某 个 词 在 文 章 中 的 出 现 次 数 文 章 的 总 词 数 , 逆 文 档 频 率 ( I D F ) = l o g ( 语 料 库 的 文 档 总 数 包 含 该 词 的 文 档 数 + 1 ) 词频(TF)=\frac{某个词在文章中的出现次数}{文章的总词数},逆文档频率(IDF)=log(\frac{语料库的文档总数}{包含该词的文档数+1}) (TF)=(IDF)=log(+1)

T F − I D F = 词 频 ( T F ) × 逆 文 档 频 率 ( I D F ) ​ TF-IDF=词频(TF)\times逆文档频率(IDF)​ TFIDF=(TF)×(IDF)

TextRank算法:基于PageRank算法,用于为文本生成关键字和摘要。

PageRank算法:通过网页间超链接,计算网页重要性的技术。把整个互联网看成一个有向图,网页看成有向图里的节点,网页之间的超链接看成有向图中的边。

S ( V i ) = ( 1 − d ) + d ∗ ∑ j ∈ I n ( V i ) 1 ∣ O u t ( V j ) ∣ S ( V j ) S(V_i)=(1-d)+d*\sum\limits_{j\in In(V_i)}\frac{1}{|Out(V_j)|}S(V_j) S(Vi)=(1d)+djIn(Vi)Out(Vj)1S(Vj)

S ( V i ) S(V_i) S(Vi)表示当前网页 i i i的重要性, d d d是阻尼系数(一般 d = 0.85 d=0.85 d=0.85), I n ( V i ) In(V_i) In(Vi)指向当前网页 i i i的链接的节点(网页)集合, O u t ( V j ) Out(V_j) Out(Vj)从节点(网页) j j j出发的边指向其余节点(网页)的集合。遍历所有指向网页 i i i的网页 j j j,拿到 j j j的权重 S ( V j ) S(V_j) S(Vj),如果认为 j j j中只有一个网页指向 i i i,则相对于 i i i而言, j j j的重要性 1 O u t ( V j ) S ( V j ) \frac{1}{Out(V_j)}S(V_j) Out(Vj)1S(Vj)。初始化所有网页的重要性 S ( V i ) = 1 S(V_i)=1 S(Vi)=1

TextRank算法:默认节点是句子,权值 W W W是两个句子 S i S_i Si S j S_j Sj的相似程度。

两个句子相似度 S i m ( S i , S j ) = ∣ { w k ∣ w k ∈ S i & w k ∈ S j } ∣ l o g ( ∣ S i ∣ ) + l o g ( ∣ S j ∣ ) \displaystyle Sim(S_i,S_j)=\frac{|\{w_k|w_k\in S_i \verb'&' w_k\in S_j\}|}{log(|S_i|)+log(|S_j|)} Sim(Si,Sj)=log(Si)+log(Sj){wkwkSi&wkSj}

TestRank在PageRank的基础上,为图中的边引入权值的概念:

W S ( V i ) = ( 1 − d ) + d ∗ ∑ V j ∈ I n ( V i ) w j i ∑ V k ∈ O u t ( V j ) w j k W S ( V j ) \displaystyle WS(V_i)=(1-d)+d*\sum\limits_{V_j\in In(V_i)}\frac{w_{ji}}{\sum\limits_{V_k\in Out(V_j)}w_{jk}}WS(V_j) WS(Vi)=(1d)+dVjIn(Vi)VkOut(Vj)wjkwjiWS(Vj)

w i j w_{ij} wij是图中节点 V i V_i Vi V j V_j Vj的边的权值,其余同上。

基于TextRank提取关键词的主要步骤

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

(2)对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容 词等。这些词形成候选关键词;

(3)构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用共现关系(co- occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现;

(4)根据PageRank原理中的衡量重要性的公式,初始化各节点的权重,然后迭代计算各节点的权重,直至收敛;

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

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

细分领域分词工具pkuseg

句法分析

确定句子的句法结构,或句子中词汇间的依存关系。

1.短语结构分析(句法结构分析):a.完全句法分析 b.局部句法分析

2.依存关系分析

完全句法分析:短语结构树,确定句子包含的全部句法信息,句子中各成分的关系

局部句法分析:只要求识别句中某些结构相对简单的独立成分

依存关系分析:依存结构词

依存关系分析工具spacy

语义分析

语义分析包含词语语义分析和句子语义分析

一、词语语义分析:

词语相似度:两个词语在不同的上下文中可以互相替换使用,而不改变文本的句法语义结构的程度。在不同的上下文中,可以互相替换且不改变文本的句法语义结构的可能性越大,二者的相似度就越高。对词语相似度影响最大的是词的语义。

词语距离:与词语相似度反相关,距离为0,相似度为1;距离无穷大,相似度为0。

S i m ( W 1 , W 2 ) = α D i s ( W 1 , W 2 ) + α \displaystyle Sim(W_1,W_2)=\frac{\alpha}{Dis(W_1,W_2)+\alpha} Sim(W1,W2)=Dis(W1,W2)+αα

其中 α \alpha α是一个可调节参数,表示当相似度为 0.5 0.5 0.5时的词语距离。

词语相关性:反映两个词语互相关联的程度,两个词语在同一个语境中"共现"的可能性。

词语相似性——词语之间的聚合特点,词语相关性——词语之间的组合特点。A与B相似度高,则"A与C的相关性"和"A与B的相关性"也很接近;A、B都与其余词语的相关程度很接近,则A与B的相似度很高。

相关性计算方法:利用外部知识(词典)构建"语义分类树形图",节点间路径长。或概念层次树的深度、概念层次树的区域密度。

二、句子语义分析

句子相似度:计算不同句子(语义)相似程度。应用包括多文档自动摘要、自动问答。从语句的分析深度区分,有两种方法:基于向量空间模型的方法、对语句进行完全的句法与语义分析。

(1)基于向量空间模型的方法:把句子看成词的线性序列,利用句子的表层信息——组成句子的词的词频、词性等信息,不考虑句子整体结果的相似性。每个词可以通过tf-idf算出词频,一句话即转化成一个向量,一篇文章就转化成一个向量空间。

(2)对语句进行完全的句法与语义分析:比较句子的生成句法和语义,并在此基础上进行相似度计算。

利用语义依存结构,计算句子的相似度。有效搭配对:只考虑关键成分。

NLP框架_第2张图片
进一步,利用知网(Hownet)对词做"义元分析",即"送往"和"送到"的义元编号相同。

词向量

用向量的形式表示自然语言中的词的方法。

One-hot Representation:维灾,词汇鸿沟(词义关系丢失)。

Distributed Representation(Word Embedding):通过模型训练出的低维分布式向量表示词,相似词向量距离相近。

NNLM模型
NLP框架_第3张图片
假设一个语料库有10w个词,那么NNLM要做的事情:定义一个滑动窗口,比如这个滑动窗口大小是3,滑动窗口会遍历整个语料库,每次输入3个词,然后预测下个词。 上图,输入的3个词分别就是: w t − 3 , w t − 2 , w t − 1 w_{t-3},w_{t-2},w_{t-1} wt3,wt2,wt1,预测的词就是 w t = i ∣ c o n t e x t w_t=i|context wt=icontext。NNLM的目标:将语料库中的10w个词通过稠密的向量矩阵来表示,上图中是 C C C。一般的神经网络训练数据时通过反向传播算法优化神经网络中的参数,从而让输出层输出预期结果;而 NNLM不同,通过反向传播算法优化的这些参数 C C C是最终想获得的语料库中词的词向量。

word2vec模型:用于生成词向量的计算模型,可以很好的度量不同词之间的相似性。将训练出来的向量映射到高维空间,就可以看出词汇之间的关系。具体实现包含CBOW模型和Skip-gram模型,在数据量比较小的情况使用CBOW模型效果较好,在数据量非常大的时候使用Skip-gram模型效果更好。

NLP框架_第4张图片
(1)使用双向的滑动窗口获得词的稠密向量,这个稠密向量一开始随机初始化,在训练的过程中优化它这里是副文本;(2)去掉NNLM中的投影层和隐藏层,对输入层输入的稠密向量,进行简单的求和或者求平均;(3)与输出层进行全连接,通过层次的softmax将输出层的数据转换为概率分布,与真实的概率进行对比,优化CBOW模型的输入,最小化两个概率分布的差距(损失)

层次softmax:使用Huffman编码树来编码输出层的词典,压缩计算量(只需计算路径上的所有非叶子节点向量的贡献度),计算量为树的深度( V = > l o g 2 V V=>log_2 V V=>log2V)

负例采样:输出层的维度过高,导致计算太过复杂,而最终结果只有一个是正确答案(即我们要的那个词,其余词都是错误答案)。如果一个语料库大小是10W,即由10W个词构成的,那么输出层就要有10W维,而10W维里只有1个是正确答案,其余10W-1个都是错误答案。在训练时,我们并不需要那么多错误答案,只需要从中抽取一些错误答案组成一个低维的向量用来训练模型。比如,我们只要一个500维的向量,那么只需要从10W-1个错误答案中抽取499个错误答案(负例)。抽取原则:词频越高的词,越容易被采样到。将长度为1的线段分成N份,不同的词频所占的比例不一样,然后投骰子,骰子落在哪个区间,如果是正例,再投;如果是负例,就把该负例取出来,直到拿到499个负例。
NLP框架_第5张图片NLP框架_第6张图片

文本分类

预处理——文本表示——分类器

应用:内容领域分类、邮件过滤、用户分类、情感分类

步骤:文本表示、文本特征、分类器设计、分类性能评测

机器翻译

利用计算机把一种语言翻译成另一种语言。

RBMT(规则):直接机器翻译[词]、基于转换的机器翻译[结构]、中介语机器翻译[符号]

EBMT(例子):直接用准备好的短语

SMT(统计):基于词的SMT(词袋、句中词序、引入新词、字对齐、错误修正)(对预料要求高)、基于短语的SMT、基于句法的SMT

NMT(神经网络):将语言转化为向量,RNN、LSTM、GRU

信息抽取

从文本中抽取特定的事实信息,并形成结构化的数据输出。

传统命名实体识别方法(3大类+7小类):基于规则法、基于统计法(MEMM/HMM/CRF)、基于深度学习。

开放域实体抽取:给出特定语义类的若干实体(种子),在网页中找出同一类别其他实体实例

篇章分析

由一个以上的句子或语段构成的有组织有意义的自然语言文本整体,一篇文章、一段会话等都可以看成篇章。构成篇章的句子(或语段)彼此之间在形式上相互衔接,在意义上前后连贯。

结构(语义)、衔接(形式)

问答系统

人机交互的程序。问题分析——>相关信息获得(问题候选答案集)——>答案抽取

专家系统、问答式检索系统、社区问答系统、基于知识图谱的问答系统

你可能感兴趣的:(自然语言处理)