当前位置:   article > 正文

NLP基础知识_nlp入门

nlp入门

学习任务

2. 数据处理

2.1 文本表示

独热表示one-hot

one-hot 表示以0向量开始,如果单词存在于句子或者文档中, 则将向量中的相应条目设置为1,反之为0

Time files like an arrow.
Fruit files like a banana.

构成词库 {time,fruit, files, like, a, an, arrow, banana}
 "like a banana"的one-hot表示就是:[0, 0, 0, 1, 1, 0, 0, 1]

词频表示(TF)

  短语,句子或者文档的词频表示就是其组成的单词one-hot表示向量的总和

Fruit files like time files a fruit.
  TF表示为:[1, 2, 2, 1, 1, 0, 0, 0]

缺点:词频看不出文档的重要性。
T F = 某 个 词 在 文 档 中 出 现 的 次 数 文 档 总 词 数 TF = \frac{某个词在文档中出现的次数}{文档总词数} TF=

逆文档频率(IDF)

  如果有一系列专业文献,只顾考虑词频,可能claim这样的高频常见词并不能增加我们认识文献的信息,而低频罕见词tetrafluoroethylene(四氟乙烯)却反而有可能表达文献的本质。为给这些词在表达中增加比重,给无意义词减小比重,就有了逆文档频率(IDF)
逆 文 档 词 频 ( I D F ) = log ⁡ ( 语 料 库 中 总 文 档 数 包 含 该 词 的 总 文 档 数 + 1 ) 逆文档词频(IDF)=\log(\frac{语料库中总文档数}{包含该词的总文档数+1}) (IDF)=log(+1)

词频逆文档频率表示(TF-IDF)

  单词的TF-IDF值就是TF和IDF的乘积
T F I D F = T F ∗ I D F TFIDF = TF * IDF TFIDF=TFIDF
在这里插入图片描述
以上表示方法总结存在问题:

  • 词典有多长,向量就有多长,计算量巨大(通常词典都10000+)
  • 太稀疏,一句话10个词的话,至少向量里面有9990个0(冗余,无意义)
  • 语义鸿沟(相似度?语义相似性?深层次特制?)

解决方案:稠密编码(特征嵌入)

2.2 NLP问题中的特征

直接可观测特征

单独词特征: 组成词的字符和它们的次序,以及从中导出的属性,和其他外部信息资源的联系(文档中的词频,TF-IDF)

  • 词元和词干: booked, books, booking → \rightarrow book, \quad pictures, pictured, picture → \rightarrow pic-tur
  • 词典资源: star → \rightarrow an actor who plays a principle role, any celestial body visible from earth, someone who is dazzlinly skilled (ace, adept, champion, maven)
  • 分布信息: apple & banana, apple & icecream?

文本特征: 观察到的特征是字符和词在文本中的数量和次序

  • 权重TF-IDF
  • N元组(组合特征)n-gram
    • 一种特征组合案例:在给定的长度下由连续的词序列组成。它的基本思想是将文本里面的内容按字节进行大小为N的滑动窗口操作,形成了长度是N的字节段序列。
      • 二元词能比单独的词富含更多的信息,在很多案例中都是有效的。但是, 并不是所有二元组都有效,先验知识也没办法告诉我们哪个二元组有效,所以只能靠模型去降低权重或抛弃。
        在这里插入图片描述

上下文词特征: 考虑词在句子或者文本中时,一个能直接观测到的特征就是其在句子中的位置,以及围绕它的词。由此引出一个概念–窗口
窗口:围绕词的窗口聚焦于词的直接上下文(即目标每侧的k个词),由此可基于窗口进行统计共现频率,特征组合,词预测等一系列的任务。

可推断的语言学特征

  自然语言的句子并非只是词语的线性排序,还是遵循一定结构的,这个结构又遵循复杂的某种不易于直接观察到的规律,这个规律就叫做语法
  针对这些规则或者规律的学习就被称为面向学习的语言学
  有的语言模板仍未被挖掘,有的已经被充分理解,例如词性 ,部分语法 ,部分语义信息。
  存在专门的系统,以不同的准确率来预测词性,语法树,语义角色以及一些其他语言学属性。


浅层句法分析 主要识别短语词性,识别词之间关系则称为 句法分析 。句法分析又分为成分句法分析和依存句法分析。

2.3 特征输入

2.3.1 特征编码

独热编码 one-hot
稠密编码(特征嵌入)

稠密向量表示 :不再以one-hot中的一维来表示各个特征,而是把每个核心特征 (词,词性,位置等)都嵌入到d维空间中,并用空间中的一个向量表示。通常空间维度d远小于每个特征的样本数(40000的词表,100/200维向量)。嵌入的向量(每个核心特征的向量表示)作为网络参数与神经网络中的其他参数一起被训练。
在这里插入图片描述 稠密编码使用总结

  • 抽取一组和预测输出类别相关的核心语言学特征
  • 对于每一个感兴趣的特征,检索出相应的向量
  • 将特征向量组合成(拼接、相加或者两者组合)输入向量x
  • 将x输入到非线性分类器中(前馈神经网络)

稠密编码优势

  • 模型训练会导致相似特征对应相似向量,相似特征之间信息共享
  • 假设某些特征可以提供相似线索,稠密编码表示法则有望能够捕捉这些相似性
  • 可计算性强
  • 可进行预训练

2.3.2 组合稠密向量

组合稠密向量 :假设i为中心词,两边各包含k个单词的窗口,窗口大小为2,那我们关注的要编码的就是在位置i-2, i-1, i+1和i+2上的词。将这些词表示组合之后作为新特征使用。
在这里插入图片描述可变特征数目–连续词袋 :前馈神经网络使用固定维度的输入,这样能够很容易地与取固定数目的抽取函数相适应,每个特征用一个向量表示,通过拼接组合向量 ,这种方法中输入向量的每个区域对应一个不同特征。但有时不能预先确定特征的数目(如在文本分类任务中,通常句子中的每个词都是一个特征),因此我们需要使用固定大小的向量 表示任意数量的特征。例如连续词袋(CBOW)模型
C B O W ( f 1 , ⋯   , f k ) = 1 k ∑ i = 1 k v ( f i ) \mathrm{CBOW}\left(f_{1}, \cdots, f_{k}\right)=\frac{1}{k} \sum_{i=1}^{k} v\left(f_{i}\right) CBOW(f1,,fk)=k1i=1kv(fi)
WCBOW ⁡ ( f 1 , ⋯   , f k ) = 1 ∑ i = 1 k a i ∑ i = 1 k a i v ( f i ) \operatorname{WCBOW}\left(f_{1}, \cdots, f_{k}\right)=\frac{1}{\sum_{i=1}^{k} a_{i}} \sum_{i=1}^{k} a_{i} v\left(f_{i}\right) WCBOW(f1,,fk)=i=1kai1i=1kaiv(fi)

2.3.3 其他特征输入

  • 距离与位置特征
  • pad & unk
  • 词丢弃
  • 特征组合(指定特征间的交互)
  • 向量共享(dog前一词后一词,中心词上下文应该共享同样的词向量?)
  • 维度(每个特征分配多少维)

2.4 gensim简单展示

gensim例子github链接
在这里插入图片描述

3. 语言模型

贝叶斯公式

P ( A B ) = P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) P(AB)=P(A|B)P(B)=P(B|A)P(A) P(AB)=P(AB)P(B)=P(BA)P(A)
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A \mid B)=\frac{P(B \mid A) P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)
P ( B i ∣ A ) = P ( B i ) P ( A ∣ B i ) ∑ j = 1 n P ( B j ) P ( A ∣ B j ) P\left(B_{i} \mid A\right)=\frac{P\left(B_{i}\right) P\left(A \mid B_{i}\right)}{\sum_{j=1}^{n} P\left(B_{j}\right) P\left(A \mid B_{j}\right)} P(BiA)=j=1nP(Bj)P(ABj)P(Bi)P(ABi)

3.1 语言模型任务

  语言模型就是给任何词序列分配一个概率 。通俗的说,就是预测一个词在一个序列之后的概率,也即已知前i-1个词,预测第i个词。 p ( w i ∣ w 1 , w 2 , ⋯   , w i − 1 ) p\left(w_{i} \mid w_{1}, w_{2}, \cdots, w_{i-1}\right) p(wiw1,w2,,wi1)
p ( w i ∣ w 1 , w 2 , ⋯   , w i − 1 ) = p ( w 1 , w 2 , ⋯   , w i − 1 , w i ) p ( w 1 , w 2 , ⋯   , w i − 1 ) p\left(w_{i} \mid w_{1}, w_{2}, \cdots, w_{i-1}\right)=\frac{p\left(w_{1}, w_{2}, \cdots, w_{i}-1, w_{i}\right)}{p\left(w_{1}, w_{2}, \cdots, w_{i-1}\right)} p(wiw1,w2,,wi1)=p(w1,w2,,wi1)p(w1,w2,,wi1,wi)

  定义一个统计语言模型 如下:
P ( w 1 ; n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 : 2 ) P ( w 4 ∣ w 1 : 3 ) ⋯ P ( w n ∣ w 1 : n − 1 ) P\left(w_{1 ; n}\right)=P\left(w_{1}\right) P\left(w_{2} \mid w_{1}\right) P\left(w_{3} \mid w_{1: 2}\right) P\left(w_{4} \mid w_{1: 3}\right) \cdots P\left(w_{n} \mid w_{1: n-1}\right) P(w1;n)=P(w1)P(w2w1)P(w3w1:2)P(w4w1:3)P(wnw1:n1)
  一个计算实例:

BOS   商品   和  服务  EOS
   BOS   商品   和服  物美价廉  EOS
BOS   服务   和  货币  EOS

 则: P ( 商 品 ∣ B O S ) = 2 / 3 P(商品|BOS)=2/3 P(BOS)=2/3 P ( 和 ∣ B O S 商 品 ) = 1 / 2 P(和|BOS\quad商品)=1/2 P(BOS)=1/2 P ( 服 务 ∣ B O S 商 品 和 ) = 1 / 1 P(服务|BOS\quad商品 \quad和)=1/1 P(BOS)=1/1 P ( E O S ∣ B O S 商 品 和 服 务 ) = 1 / 1 P(EOS|BOS\quad商品\quad和\quad服务)=1/1 P(EOSBOS)=1/1

缺点

  • 数据稀疏,越长的句子概率越低
  • 计算代价大,句子越长,要根据句子来索引计算和存储的p就越多
  • 最后一个词取决于这句话前面的所有词,使得高效建模整句话难度大

改进方法
  最经典和传统的改进方法,就是n阶马尔科夫模型,也叫n元语法或者n-gram
  一个k阶马尔科夫模型,假设序列中的下一个词的概率只依赖与其前k个词。用公式表述如下(i为要预测的词的位置或索引,w代表词):
P ( w i + 1 ∣ w 1 , i ) ≈ P ( w i + 1 ∣ w i − k i i ) P\left(w_{i+1} \mid w_{1, i}\right) \approx P\left(w_{i+1} \mid w_{i-k_{i} i}\right) P(wi+1w1,i)P(wi+1wikii)
  那句子的概率估计就变为:
P ( w 1 : n ) ≈ ∏ i = 1 n P ( w i ∣ w i − k : i − 1 ) P\left(w_{1: n}\right) \approx \prod_{i=1}^{n} P\left(w_{i} \mid w_{i-k: i-1}\right) P(w1:n)i=1nP(wiwik:i1)

实例代码展示链接

3.2 语言模型任务评估

信息熵

相对熵(KL散度)

困惑度(PPL)

信息论基础-熵-参考链接

语言模型缺点 ,时间步 t t t 的词需要考虑 t − 1 t-1 t1步的词,其计算量随 t t t指数增长

3.3 神经语言模型

输入k元语句(代码实现上是k个词向量的拼接)
输出:下一个词的概率分布P
示例:
p ( C ( w i ) ∣ C ( w i − 4 ) , C ( w i − 3 ) , C ( w i − 2 ) , C ( w i − 1 ) ) p\left(C(w_{i}) \mid C(w_{i-4}), C(w_{i-3}), C(w_{i-2}), C(w_{i-1})\right) p(C(wi)C(wi4),C(wi3),C(wi2),C(wi1))
在这里插入图片描述

  1. one-hot表示词 示例
    dog = [0, 0, 0, 0, 1, 0, 0, …]; cat = [0, 0, 1, 0, 0, 0, 0, …]; eat = [0, 0, 0, 0, 0, 1, 0, …]

在这里插入图片描述

  1. one-hot表示法存在诸多缺陷,这里使用稠密向量表示,加一个隐藏层C进行映射。

在这里插入图片描述

  1. one-hot表示法这时作为一个索引字典,可以通过映射矩阵对应到具体的词向量。

    在这里插入图片描述

数学公式

  输入向量x,输出结果y的概率分布,两者的表达式如下所示,其中w代表词向量,v代表词到词嵌入的映射,LM是一个多层感知机:

x = [ v ( w 1 ) ; v ( w 2 ) ; ⋯   ; v ( w k ) ] x=\left[v\left(w_{1}\right) ; v\left(w_{2}\right) ; \cdots ; v\left(w_{k}\right)\right] x=[v(w1);v(w2);;v(wk)]

LM ⁡ ( w 1 ; k ) = softmax ⁡ ( h W 2 + b 2 ) h = g ( x W 1 + b 1 ) x = [ v ( w 1 ) ; v ( w 2 ) ; ⋯   ; v ( w k ) ]

LM(w1;k)=softmax(hW2+b2)h=g(xW1+b1)x=[v(w1);v(w2);;v(wk)]
LM(w1;k)hx=softmax(hW2+b2)=g(xW1+b1)=[v(w1);v(w2);;v(wk)]

神经网络语言模型 NNLM

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

      图参考链接-Neural Network Language Model PyTorch实现


代码演示-链接

3.4 预训练词表示

  通常是一个LM的副产物,列举种类例子如:Word2vec, GloVe, FastText, ELMo, GPT, BERT

Word2vec, GloVe, fasttext模型介绍-预训练词向量-blog链接

  更多工业界一线火热的预训练模型获取和使用途径在huggingface的文档中进行了详细的规整,使用Python调用,即可实现自动下载模型以及加载使用-链接

4. NLP中经典模型

4.1 Word2vec原理与复现

论文地址-链接

  具体内容参考之前博文 word2vec


参考链接 -深度之眼NLP基础
参考链接 - Chris McCormick - Word2Vec Tutorial - The Skip-Gram Model

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/301332
推荐阅读
相关标签
  

闽ICP备14008679号