概要

今天的第一期,我们来聊聊N-grams语言模型——它是自然语言处理(NLP)领域的经典模型,也是理解现代大语言模型的基础。

什么是N-grams语言模型?

简单来说,N-grams语言模型就是一个用来预测下一个词可能是什么的工具。比如,当你输入“今天天气真”时,模型会预测下一个词可能是“好”“不错”或“糟糕”。

这里的“N”代表一个数字,表示模型每次考虑多少个词。比如:

Unigram(1-gram):只考虑当前词,比如“天气”。

Bigram(2-gram):考虑当前词和前一个词,比如“今天 天气”。

Trigram(3-gram):考虑当前词和前两个词,比如“今天 天气 真”。

N-grams模型的核心思想是:通过统计历史数据中词与词的组合概率,来预测未来的词。

N-grams模型的工作原理

统计词频
N-grams模型的第一步是统计词与词的组合出现的频率。比如,我们有一个简单的句子:

今天 天气 真好

Bigram统计:

“今天 天气”出现1次

“天气 真”出现1次

“真 好”出现1次

计算概率
接下来,模型会根据统计结果计算概率。比如:

在“天气”之后,“真”出现的概率是100%(因为“天气 真”只出现了一次)。

在“真”之后,“好”出现的概率也是100%。

预测下一个词
当我们输入“今天 天气”时,模型会查找“天气”之后最可能出现的词。根据统计结果,“真”是唯一的选择,所以模型会预测下一个词是“真”。

N-grams模型的优缺点

优点

简单易懂:N-grams模型基于统计,不需要复杂的数学知识。

计算高效:相比于深度学习模型,N-grams的计算速度非常快。

适合小数据:在数据量较少的情况下,N-grams仍然可以表现不错。

缺点

数据稀疏问题:如果某些词组合在训练数据中从未出现,模型就无法预测。

缺乏上下文理解:N-grams只能考虑有限的上下文(N个词),无法捕捉长距离依赖关系。

泛化能力差:对于未见过的新词或新组合,模型表现较差。

N-grams模型的应用场景

虽然N-grams模型看起来简单,但它在实际应用中仍然有很多用途:

文本生成:比如生成简单的句子或段落。

拼写纠错:通过统计词频,判断用户输入的词是否合理。

语音识别:帮助识别语音中的模糊词。

搜索引擎:用于查询建议和自动补全。

N-grams与现代大语言模型的关系

N-grams模型是现代大语言模型(如GPT、BERT)的前身。虽然大语言模型使用了更复杂的神经网络架构,但它们的核心思想仍然是通过上下文预测下一个词。可以说,N-grams是大语言模型的“简化版”,而大语言模型则是N-grams的“升级版”。

动手实践:用Python实现一个简单的Bigram模型

from collections import defaultdict, Counter

# 训练数据
text = "今天 天气 真好 今天 天气 真糟糕"

# 统计Bigram频率
bigrams = defaultdict(Counter)
words = text.split()
for i in range(len(words) - 1):
    bigrams[words[i]][words[i + 1]] += 1

# 预测下一个词
def predict_next_word(word):
    if word in bigrams:
        return bigrams[word].most_common(1)[0][0]
    return "未知"

# 测试
print(predict_next_word("天气"))  # 输出:真

总结

N-grams语言模型是NLP领域的经典技术,虽然它已经被更强大的深度学习模型取代,但它的核心思想仍然影响着现代大语言模型的设计。理解N-grams模型,不仅能帮助我们打好NLP的基础,还能更好地理解大语言模型的底层逻辑。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐