语言模型(language model)
专家语言模型
基于语言学专家设计的语法规则,设计语言模型。专家语言模型一直到上世纪80年代是研究的主流。例如IF…ELSE…语句,在专家语言模型中是十分常见的。
统计语言模型
关于统计语言模型,参考吴军老师的《数学之美》中的介绍,语言模型最初用于语音识别任务,其目标就是判断一个文字序列是否符合我们的认知,例如下面一句话:
美联储主席本·伯南克昨天告诉媒体7000亿美元的救助资金将借给上百家银行、保险公司和汽车公司。
这句话我们人类能够读懂,但是如果是下面这句话:
联主美储席本·伯诉体南将借天的救克告媒昨助资金70元亿00美给上百百百家银保行、汽车险公司公司和。
人类就看不懂这句话什么意思,统计语言模型就是一种判断人类是否能看懂一句话的模型。我们可以这样建模统计语言模型,假定一句话S SS是由w 1 , w 2 … w n w_1,w_2\dots w_nw1,w2…wn这n个词以特定顺序排列构成的(这里的顺序就是w 1 , w 2 … w n w_1,w_2\dots w_nw1,w2…wn出现的先后顺序):
p ( S ) = p ( w 1 , w 2 … w n ) p(S)=p(w_1,w_2\dots w_n)p(S)=p(w1,w2…wn)
我们看S SS出现的概率,例如上面第一句话出现的概率可能是1 0 − 20 10^{-20}10−20,第二句话出现的概率是1 0 − 70 10^{-70}10−70,因此第一句话更可能符合我们人类的认知。
但是这样做,我们需要统计人类有史以来说过的所有的话,这显然是不太现实的,因此我们利用条件概率展开p ( S ) p(S)p(S)得到:
p ( S ) = p ( w 1 ) ⋅ p ( w 2 ∣ w 1 ) ⋅ p ( w 3 ∣ w 1 , w 2 ) … p ( w n ∣ w 1 , … , w n − 1 ) p(S)=p(w1) \cdot p(w_2|w_1)\cdot p(w_3|w_1,w_2)\dots p(w_n|w_{1},\dots ,w_{n-1})p(S)=p(w1)⋅p(w2∣w1)⋅p(w3∣w1,w2)…p(wn∣w1,…,wn−1)
进一步引入马尔科夫性:
p ( S ) = p ( w 1 ) ⋅ p ( w 2 ∣ w 1 ) ⋅ p ( w 3 ∣ w 2 ) ⋅ p ( w 4 ∣ w 3 ) … p ( w n ∣ w n − 1 ) p(S)=p(w1) \cdot p(w_2|w_1)\cdot p(w_3|w_2)\cdot p(w_4|w_3)\dots p(w_n|w_{n-1})p(S)=p(w1)⋅p(w2∣w1)⋅p(w3∣w2)⋅p(w4∣w3)…p(wn∣wn−1)
这就是二元模型(Bigram Model),每一个词只和前一个词有关系,我们也可以假设每一个词和前N-1个词有关系,这就是N元模型,实际中用到的最多的是三元模型,Google的罗塞塔翻译系统和语音搜索系统使用的是四元模型,其空间复杂度就已经很高了。我们单独拿出来看p ( w 2 ∣ w 1 ) p(w_2|w_1)p(w2∣w1),它等于
p ( w 2 ∣ w 1 ) = p ( w 1 , w 2 ) p ( w 1 ) p(w_2|w_1)=\frac{p(w_1,w_2)}{p(w_1)}p(w2∣w1)=p(w1)p(w1,w2)
我们只用看我们的语料库中,w 1 , w 2 w_1,w_2w1,w2前后相邻出现了多少次,比上w 1 w_1w1出现多少次,根据大数定理,它们的比值就是p ( w 2 ∣ w 1 ) p(w_2|w_1)p(w2∣w1);如果是w 1 w_1w1,其概率计算如下:
p ( w 1 ∣ < s > ) = p ( w 1 , < s > ) p ( < s > ) p(w_1|<s>)=\frac{p(w_1,<s>)}{p(<s>)}p(w1∣<s>)=p(<s>)p(w1,<s>)
我们引入一个开始和结束符号< s > <s><s>,此时句子表示为S = < s > , w 1 , w 2 . . . w n , < s > S=<s>,w_1,w_2...w_n,<s>S=<s>,w1,w2...wn,<s>。
统计语言模型是今天所有自然语言处理的基础。
神经网络语言模型
顾名思义,神经网络语言模型肯定利用了神经网络模型。在神经网络语言模型中,开始出现词向量的概念,不同于统计语言模型利用词频计算句子的概率,神经网络语言模型利用上下文(有可能只用上文或只用下文,看模型的设计),来预测目标位置的词,通过反向梯度下降,让其尽可能的向目标词靠拢。
比较经典的是Word2vec中的CBOW 以及skip-gram;当然还有最近比较火的Bert模型(利用Masked Language Model)、Xlnet(Permutation Language Model)等基于transformer的语言模型。
语言模型评价指标
利用Perplexity(ppl),Perplexity可以认为是average branch factor(平均分支系数),即预测下一个词时可以有多少种选择。别人在作报告时说模型的PPL下降到90,可以直观地理解为,在模型生成一句话时下一个词有90个合理选择,可选词数越少,我们大致认为模型越准确。这样也能解释,为什么PPL越小,模型越好
具体可以参考这篇blog。
中文自然语言处理流程
中文自然语言处理流程可以表示如下:
- 语料获取:可以利用已有的语料库,也可以利用
- 语料预处理:包括语料清洗(例如去除广告,爬虫的html标签等)、分词、词性标注、去停用词等。
- 特征工程:把词表示成词向量,使得计算机可以处理,词表示方法有word2vec,ELMo,BERT等,word2vec包括有名的skip-gram模型和CWOB模型
- 特征选择:提取特征子集,仍然保留原来的主体语义特征,常见的特征选择方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六种。
- 训练模型:最近比较流行的是利用encoder-attention-decoder,即一堆词向量输入encoder,得到有上下文含义encode编码,这一编码输入decoder中,得到最后的结果,同时在encoder与decoder之间可以引入attention机制。机器学习模型(KNN、SVM、Naive Bayes、决策树、GBDT、K-means)、深度学习模型(CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN)等用于具体的下游NLP任务,分类、聚类、神经序列、情感分析、机器翻译,对话系统,自然语言理解(NLU),自然语言生成(NLG),命名实体识别、推荐等。
- 评价指标:错误率、精度、准确率、精确度、召回率、F1 衡量、ROC 曲线、AUC 曲线
自然语言处理的任务
引用一幅图:
参考文献:
《数学之美》
NLP之语言模型(推荐):https://www.cnblogs.com/dyl222/p/11005948.html
语言模型评价指标Perplexity:https://blog.csdn.net/index20001/article/details/78884646
自然语言处理之语言模型(LM):https://blog.csdn.net/qq_36330643/article/details/80143960
第01课:中文自然语言处理的完整流程:https://blog.csdn.net/dongdouzin/article/details/80814037
【NLP】彻底搞懂BERT:https://www.cnblogs.com/rucwxb/p/10277217.html
图解BERT(NLP中的迁移学习):https://www.cnblogs.com/d0main/p/10165671.html
中文情感分类任务如何对bert语言模型微调,微调后的模型如何使用:https://blog.csdn.net/weixin_40015791/article/details/90410083