NLP发展史
NLP发展脉络简要梳理如下:
(远古模型,上图没有但也可以算NLP)
1940 - BOW(无序统计模型)
1950 - n-gram(基于词序的模型)
(近代模型)
2001 - Neural language models(神经语言模型)
2008 - Multi-task learning(多任务学习)
2013 - Word embeddings(词嵌入)
2013 - Neural networks for NLP(NLP神经网络)
2014 - Sequence-to-sequence models
(现代模型)
2015 - Attention(注意力机制)
2017 - Transformer(自注意力网络)
2018 - Pretrained language models(预训练语言模型【Bert、Gpt等】)
1940 - 词袋模型(BOW)
首先解释一下什么是词袋模型:
词袋模型(Bag-of-Words, BOW) 是最早、最经典的文本表示方法之一(1940左右出现,甚至比n-gram还要早,我愿称之为原始祖师爷)。它将一段文本看作一个「袋子」:里面盛放了这个文本所含的所有单词,但忽略了单词的顺序、句法结构等信息,只关注单词是否出现以及出现次数(或频率)。这就好比把句子里的单词都抓出来扔进一个袋子,摇匀后再数一数这些单词都有什么、各出现几次。
1.1 典型示例
假设我们的词表是 "I","like","apples","banana",大小 V=4(指的就是一共有4个词)。
有两句话:
“I like apples”
“I like banana apples”
那么在词袋表示下:
对于 “I like apples”:
"I" 出现 1 次
"like" 出现 1 次
"apples"出现 1 次
"banana"出现 0 次
向量表示可写作 [1, 1, 1, 0]
对于 “I like banana apples”:
"I" 出现 1 次
"like" 出现 1 次
"apples"出现 1 次
"banana"出现 1 次
向量表示可写作 [1, 1, 1, 1]
可以看到,这种表示只管词的出现情况,不会去记录 “banana”是在“apples”前还是后出现,也不会记录它们之间的距离。这样就得到最纯粹的词袋表示。
1950 - N-Gram模型
n-gram算法的基本思想是将文本拆分成若干个连续的n个词的序列,并统计这些序列在文本中出现的频率。这里的n是一个正整数,表示词组中词的个数。
例如,在句子“我喜欢学习自然语言处理”中,
1-gram(unigram)是单个词,如“我”、“喜欢”等;
2-gram(bigram)是相邻的两个词组成的词组,如“我喜欢”、“喜欢学习”等;
3-gram(trigram)则是相邻的三个词组成的词组,如“我喜欢学习”等。
通过统计这些n-gram的频率,我们可以得到文本中各个词组的出现概率分布。这些概率信息对于后续的文本生成、语言模型构建、文本分类等任务具有重要的指导意义。
n-gram 的预测原理可以用一个 奶茶店点单预测 的类比来理解。我们通过实际场景拆解其核心机制:
一、基本原理:局部依赖的马尔可夫假设
1. 核心公式
假设预测第n个词时,只需看前N-1个词(如同奶茶店员只需记住最近3位顾客的点单)
2. 实际案例
当顾客连续点单:
"珍珠奶茶" → "布丁奶茶" → "椰果奶茶"
使用 trigram(N=3) 预测时:
-
新顾客点单序列:"珍珠奶茶" → "布丁奶茶" → ?
-
预测逻辑:根据前两个饮品 "布丁奶茶" 预测下一个可能饮品