正文
自然语言处理,就是利用计算机为工具对人类自然语言的信息进行各种类型处理和加工的技术。
NLP
以文字为处理对象。
最早的计算机被发明出来,是作为理科生进行复杂计算的工具。而语言和文字是文科生玩的东西,如何将这两者联系起来呢?为了要让机器处理语言,首先需要建立语言的数学模型。称之为语言模型。
ChatGPT
就是一个语言模型。
语言模型最直接的任务就是处理一段输入的文字,
不同的目的应该有不同的模型
,才能得到不同的输出。例如,假设输入一段中文:
“彼得想了解机器学习”,模型可能有不同的输出:
1,如果是中文到英文的机器翻译模型,输出可能是:“Peter wants to learn about machine learning”;
2,如果是聊天机器人,输出可能是:“他需要帮助吗?“;
3,如果是书店的推荐模型,输出可能是一系列书名:“《机器学习简介》、《机器学习入门》“;
4,如果是情感分析,输出可能是:“好“……
语言模型都有两大部分:编码器和解码器,分别处理输入和输出。
此外,对语言模型比较重要的一点是:它的输出不见得是固定的、一一对应的,这从我们平时人类的语言习惯很容易理解。对同样的输入,不同的人有不同的回答,在不同环境下的同一个人,也会有不同的回答。也就是说,语言模型是一个概率模型。
2001
年,本吉奥等人将概率统计方法引入神经网络,并使用前馈神经网络进行语言建模,提出了第一个神经网络的语言概率模型,可以预测下一个单词可能的概率分布,为神经网络在
NLP
领域的应用奠定了基础。
语言模型中的编码器,首先就需要给语言中的单词编码。世界上的语言各种各样,它们也有其共性,
都是由一个一个小部分(基本单元)组成的
,有的基本单元是
“词“,有的是”字“,有的可能是词的一部分,例如词根。我们给基本单元取个名字,叫”
token
“。例如,以后在解释语言处理过程时,我们就将中文中的“字”作为一个”
token
“,而将英文中的一个“
word
”,算一个”
token
“。
计算机只认数字,不识
”
token
“。所以首先得将”
token
“用某种数学对象表示,学者们选中了“矢量”
最早期对词向量的设想,自然地联想到了
“字典”。所以,
最早给词汇编码采用的方法叫做
O
ne
hot
encoding
(独热编码)
,若有个字典或字库里有
N
个单字,则每个单字可以被一个
N
维的独热向量代表。下面用具体例子说明这种方法。
例如,假设常用的英文单词大约
1000
个
(实际上,英语有约
1300
万个单词)
,按照首个字母顺序排列起来,词典成为一个
1000
个词的长串序列。每个常用词在这个序列中都有一个位置。例如,假设
“
Apple
”是第
1
个,“
are
” 是第
2
个,
“
bear
” 是第
3
个,
“
cat
” 第
4
个,
“
delicious
” 第
5
个
……等等。那么,这
5
个
words
,就分别可以被编码成
5
个
1
000
维的独热矢量,每一个独热矢量对应于
1
000
维空间的
1
个点:
“
apple
“:
(
1
0 0 0 0…………………..0
)
“
are
” :
(
0
1 0 0 0…………………..0
)
“
bear
” :
(
0
0 1 0 0 0…………..…..0
)
“
cat
” :
(
0
0 0 1 0 0 0……………..0
)
“
delicious
” :
(
0
0 0 0 1 0 0 0…………..0
)
独热编码概念简单,不过,你很快就能发现这不是一个好的编码方法。它至少有如下几个缺点。
一是每个词向量都是独立的,互相无关,词和词之间没有关联,没有相似度。
实际上,词和词之间关联程度不一样。既然我们将单词表示成矢量,而空间中的矢量互相是有关联的。有的靠的近,有的离得远。这种
“远近”距离也许可以用来描述它们之间的相似度。比如说,