NLP最基础的零碎知识点整理

一、N-gram语言模型

在这里插入图片描述
语言模型的训练,其实就是在训练 p ( H e ) 、 p ( i s ∣ H e ) 、 p ( A I ∣ i s s t u d y i n g ) p(He)、p(is|He)、p(AI|is studying) p(He)p(isHe)p(AIisstudying)的概率。

下面是自己以前的手推N-gram语言模型:
在这里插入图片描述

二、典型的问答系统全流程技术一览

英文问答系统很多方法,中文都可以用到;但是中文的很多方法,英文就不适用了。

  1. 对问题进行分词segmentation,然后预处理。
  2. 预处理:
    拼写纠错 spell correction
    stemg/lemnazation——go to/ goes /gone 变成原型go
    stopwords
    words filter过滤掉一些错误的词
    同义词
    等等
  3. 将文本表示成向量:
    bool vector——0 1 0 1的向量
    count vector——0 1 2 3 4 这种的向量
    tf-idf——(0.7, 0.3,。。。,0)这种向量
    word2vec
    seq2seq
    等等
  4. 计算相似度:
    (这是比较老套的方法了,现在有端到端的神经网络等等更好的方法)
    欧氏距离
    余弦相似度
    等等
  5. 对相似度进行排序、过滤最后返回结果!
  6. 计算相似度时,如果数据量比较大,可以采用倒排索引(倒排表)。

注意:
中文的分词比英语难。
英文中存在标准化方法,中文没有此步骤——比如把goes go to 等等都装换为go。

倒排索引 Inverted index

在这里插入图片描述
创建倒排索引,分为以下几步:
1)创建文档列表:
首先对原始文档数据进行编号(DocID),形成列表,就是一个文档列表。
在这里插入图片描述
2)创建倒排索引列表:
然后对文档中数据进行分词,得到词条。对词条进行编号,以词条创建索引。然后记录下包含该词条的所有文档编号(及其它信息)。
在这里插入图片描述
(谷歌之父–> 谷歌、之父)

倒排索引创建索引的流程:

  1. 首先把所有的原始数据进行编号,形成文档列表
  2. 把文档数据进行分词,得到很多的词条,以词条为索引。保存包含这些词条的文档的编号信息。搜索的过程:当用户输入任意的词条时,首先对用户输入的数据进行分词,得到用户要搜索的所有词条,然后拿着这些词条去倒排索引列表中进行匹配。找到这些词条就能找到包含这些词条的所有文档的编号。然后根据这些编号去文档列表中找到文档。

三、分词算法

1. 最大匹配

最大匹配属于贪心算法,无法保证全局最优;与之相对的还有动态规划DP算法。
前者看局部,后者看全局。

1.1 前向最大匹配算法

先设定一个阈值max_len=5,则每次取5个,然后看5个里面与词典是否有匹配。
假设5个直接匹配到了,那么就直接分出来,如果都没匹配的,那么max_len依次递减,以此类推分出第一个词;分第二个词的时候max_len又从5开始分,同之前的步骤,以此类推实现分词结果。见图中具体过程即可:(注意1、2、3、4步骤顺序)
在这里插入图片描述

1.2 后向最大匹配算法

在这里插入图片描述

1.3 最大匹配 缺点

在这里插入图片描述
此外,nlp要有一种直觉,即:从字/词 —> 句子 —> 语义

所以接下来我们使用语义来分词。

2. 考虑语义

我们使用一种"工具",将分词后的结果输入进去,输出该情况的概率大小,如:
在这里插入图片描述
我们再继续具体描述,我们对"工具"输入一句话,该工具生成该句话所有的分词结果,从中输出概率最大的一个分词结果,如:
在这里插入图片描述
这个"工具"中的一个,叫做语言模型LM
在这里插入图片描述
首先我们得到 S 1 、 S 2 S_1、S_2 S1S2两个分词结果,我们使用语言模型对这两个分词结果进行评估,假设我们使用Uni-gram语言模型,那么 P ( S 1 ) P(S_1) P(S1) P ( S 2 ) P(S_2) P(S2)的概率我们可以计算出来,比如对于 P ( 经 常 ) P(经常) P()的概率,我们可以算出其在文章中的计数占比作为其概率值。最终算出 P ( S 1 ) P(S_1) P(S1) P ( S 2 ) P(S_2) P(S2)的概率,从而判定哪个分词结果更好。

一般这种概率连乘为了防止underflow、无穷小等问题,都会加上log,连乘变连加。

缺点 为复杂度高。

3. 维特比算法

最大匹配是考虑所有组合,LM是考虑最大概率。
维特比算法将两者均考虑进来了。

首先我们要知道 − l o g ( P ( x ) ) -log(P(x)) log(P(x))为什么要这样写的原因,log可以让累乘变累加,但是累加后的结果是负数,所以要加上负号,可以看下图具体的示例:
在这里插入图片描述
对于词典中没有出现过的词,我们可以假设其概率很小,如 P ( 其 他 ) = 1 0 − 8 P(其他)=10^{-8} P()=108,那么 − l o g ( P ) = 20 -log(P)=20 log(P)=20
在这里插入图片描述
根据词典中的词的-logx给下图的路径上写上数据。
在这里插入图片描述
我们来寻找最短路径,根据DP算法的思想。
首先考虑到达位置8,有哪几种可能,找到其中最短路径,以此类推。
如下图所示:
在这里插入图片描述
上述是思路,我们来看具体计算过程和代码怎么写:
在这里插入图片描述
在这里插入图片描述

四、拼写纠错

主要有两种场景
第一个是错别字的场景,
第二个场景是 不是错别字 但是不适合的情况。(触发这种纠正,其实可以通过一个LM,其概率很低,那么进行纠正。这里主要是讲解如何进行纠正,而不是什么时候触发纠正)

最简单的方法就是基于编辑距离
也就是有三种操作 1 insert 2 delete 3 replace
那么这三种操作需要走多少步才能达到目标,步数的多少即成本的多少。
成本一样的比如这里的there和their都为1,则需要根据词频或者上下文等来进行判断哪个最合适。
编辑距离是最经典的DP算法!!!面试常考!!!

候选词假定都是从词典里来的,那么我们for word in 词典,然后把每个word和therr计算编辑距离。
然后找出成本最低的,但是这样的时间复杂度会非常的高!
并且编辑距离DP算法,必须把三种操作都考虑一遍,因为你并不知道哪种操作成本是最低的。

生成编辑距离为1的字符串后,在此基础之上再生成编辑距离为1的字符串,即得到了编辑距离为1、2的字符串。

接下来考虑,生成过后,我们如何过滤得到目标字符串?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、词的标准化技术

在这里插入图片描述

六、文本表示(重点)

  1. One-hot(字/词)
  2. Boolean representation(句子)
  3. Count-based representation(句子)
  4. Tf-idf representation(句子)
  5. 从One-hot到分布式词向量

1. One-hot

One-hot表示(太简单,不多说)- 字/词表示

2. Boolean representation

与One-hot对应的 句表示 方法为boolean representation
在这里插入图片描述
one hot 和 boolean representation 方法以及后面的 count-based representation 均为词典大小的维数

3. Count-based representation

还有一种 句表示 方法使用 count-based representation方法
刚刚的Boolean representation对于重复出现的元素不作考虑,
但是count-based representation方法会考虑一个词的出现次数

在这里插入图片描述

4. Tf-idf representation

在这里插入图片描述
在这里插入图片描述
基于count的表示维数是词典大小,这里tf-idf最终维度其实也是词典大小的维数。

5. 从One-hot到分布式词向量

动机:
通过one hot和欧氏距离、余弦相似度,是无法计算两个词之间的相似度的。
One hot不能够表达语义相似度,而且带来sparsity稀疏性问题。
所以采用分布式词向量!

如何得到分布式词向量?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、句子间的相似度计算

在这里插入图片描述
在这里插入图片描述
余弦相似度里的分母是两个模即范数相乘,可以被看做分母整体是normalization,
否则 分子内积的结果可能很大,也可能很小,除以分母后,便可以被控制在一个区间内。

八、Noisy channel model (LM由来)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、POS Tagging

在这里插入图片描述

十、语言模型

语言模型就是判断一句话是不是人话的模型,或者说,通过上下文来预测下一个词的模型。
本文开头所说的N-gram就是语言模型。

首先出现的是统计语言模型,如N-gram,HMM
然后出现了神经网络语言模型NNLM,如CBOW,上下文预测中间词。
而NLP里很多都是语言模型,但也有很多用不到语言模型,如序列标注任务、文本分类、聚类等很多都不是非要语言模型。

预训练模型大家都清楚,而最近几年bert语言模型火了,预训练语言模型性能优秀,所以现在nlp里的大部分预训练模型其实都是预训练语言模型。

语言模型常用评价指标:困惑度perplexity
在这里插入图片描述
物理意义是序列下一个候选词的可选范围的大小。
具体含义是序列概率越大,困惑度越好,说明语言模型越好。

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xu_Wave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值