自然语言处理之语言模型与词向量原理
语言模型
基于语法的语言模型
在研究机器如何“理解”自然语言之前,不妨先看看人们是怎么理解自己的语言的。根据语言学(Linguistics)的课程大纲,我们认为语言包括语音、构词、语法、句法等内容。不妨对语言进行如下建模(个人意见):
语言学的自然语言模型
- 自然语言定义:L=(V,T,S,P)
- 非终结符集V:句子成分如主语、定语、谓语……
- 终结符集T:语言中的所有单词
- 起始符S:句子
- 生成规则集P:所有句法S–>主语+谓语;谓语–>谓语+状语;……
从上文模型可知,我们可以用L=(V,T,S,P)定义世界上每一种语言。凡是符合生成规则的句子,都被认为是语言L中的合法句子。
早期计算机学者从语言学的角度帮助计算机理解语言,在高级编程语言方面,《编译原理》告诉我们高级编程语言均包括词法、句法、终结符、非终结符等,符合L=(V,T,S,P)模型。在自然语言方面,早期计算机学者发明了POS标注和依存句法,从语言规则的角度使计算机能对句子进行解读。
POS标注和依存句法对现行的深度学习主导的NLP研究有意义嘛?答案是有的,研究前沿中EMNLP2019最新论文《Aspect-Level Sentiment Analysis Via Convolution over Dependency Tree》结合依存句法进行细粒度情感分析。个人对这篇论文有分析,见链接。
基于统计的语言模型
为了方便计算机对语言的计算,提出基于统计的语言模型。与语言学定义的,基于语法的语言模型不同,统计语言模型通过单词、句子、段落的概率来解释语言现象。
对于一个自然语言序列(句子), S = w 1 , w 2 , . . . , w n S = {w_1,w_2,...,w_n} S=w1,w2,...,wn 定义这个句子在这一语言模型下出现的概率为:
P ( S ) = P ( w 1 , w 2 , . . . , w n ) = P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) . . . P ( w n ∣ w 1 , w 2 , . . . , w n − 1 ) P(S)=P(w_1,w_2,...,w_n)\\=P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_1,w_2,...,w_{n-1}) P(S)=P(w1,w2,...,wn)=P(w2∣w1)P(w3∣w1,w2)...P(wn∣w1,w2,...,wn−1)
上式描述的语言模型属于一种理想情况,为什么呢?我们看这一项 P ( w n ∣ w 1 , w 2 , . . . , w n − 1 ) P(w_n|w_1,w_2,...,w_{n-1}) P(wn∣w1,w2,...,wn−1),如果我们想求出 w n w_n wn在 w 1 , w 2 , . . . , w n − 1 w_1,w_2,...,w_{n-1} w1,w2,...,wn−1语境下的概率,就只能去统计给定 w 1 , w 2 , . . . , w n − 1 w_1,w_2,...,w_{n-1} w1,w2,...,wn−1语境后,下一个词出现 w n w_n wn的概率。当n足够大时,我们可能翻遍文本库也找不到几个 w 1 , w 2 , . . . , w n − 1 w_1,w_2,...,w_{n-1} w1</