Unigram,Bigram,N-gram介绍

Unigram,Bigram,N-gram介绍

Unigram,Bigram,N-gram这三个概念,在学习自然语言的过程中大家可能会遇到。

Unigram,Bigram,N-gram在自然语言内容中的语言模型部分中大家可能会碰到。语言模型有很多种,在上一篇介绍一个翻译系统的部分中,我提到了语言模型,语言模型在那个翻译系统中属于第二部分内容,其可以计算一个句子语法正确的概率,或者说可能出现的概率。

可以通过很多方式实现一个语言模型,当然Unigram,Bigram,N-gram就是实现语言模型的三种方式。
先看一下Unigram:
在这里插入图片描述
Unigram(一元模型)其就是指对于一个句子,其计算其可能出现的概率,为所有单词出现的概率直接相乘,我们认为单词之间都是互不相关的。
Bigram模型其实,采用了马尔可夫假设的思想。
在这里插入图片描述

我们,其联合概率的计算方式就是上式。

然后我们来看一下N-gram模型,其计算公式如下:

在这里插入图片描述

其实这三个模型区别在于,在计算一个词可能发生的概率时,考虑它前面可能影响概率的数量。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Python实现的简单n-gram语言模型代码: ```python import nltk from collections import defaultdict # 准备数据 text = "this is a test sentence. this sentence is for testing purposes." tokens = nltk.word_tokenize(text.lower()) # 定义一个函数来生成n-grams def generate_ngrams(tokens, n): ngrams = [] for i in range(len(tokens)-n+1): ngrams.append(" ".join(tokens[i:i+n])) return ngrams # 生成所有的unigrams、bigrams和trigrams unigrams = generate_ngrams(tokens, 1) bigrams = generate_ngrams(tokens, 2) trigrams = generate_ngrams(tokens, 3) # 计算每个n-gram的频率 unigram_freq = defaultdict(int) for unigram in unigrams: unigram_freq[unigram] += 1 bigram_freq = defaultdict(int) for bigram in bigrams: bigram_freq[bigram] += 1 trigram_freq = defaultdict(int) for trigram in trigrams: trigram_freq[trigram] += 1 # 计算每个n-gram的概率 unigram_prob = {} for unigram in unigram_freq: unigram_prob[unigram] = unigram_freq[unigram] / len(unigrams) bigram_prob = {} for bigram in bigram_freq: bigram_prob[bigram] = bigram_freq[bigram] / unigram_freq[bigram.split()[0]] trigram_prob = {} for trigram in trigram_freq: trigram_prob[trigram] = trigram_freq[trigram] / bigram_freq[" ".join(trigram.split()[:2])] # 使用模型计算句子的概率 test_sentence = "this is a test sentence." test_tokens = nltk.word_tokenize(test_sentence.lower()) test_bigrams = generate_ngrams(test_tokens, 2) prob = 1.0 for bigram in test_bigrams: if bigram in bigram_prob: prob *= bigram_prob[bigram] else: prob *= unigram_prob[bigram.split()[1]] print(f"The probability of the sentence '{test_sentence}' is {prob}.") ``` 这个代码使用nltk库来对文本进行标记化,然后使用Python的collections模块中的defaultdict来计算n-gram的频率和概率。最后,该模型可以使用生成的概率来计算给定句子的概率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值