NLP学习笔记「第二章」2.2 N-gram Language Models(N元语言模型)

Language Model

  • words

  • phrase

  • sentence

2.2.1 Unigram Language Models

某个词出现的概率来估计一句话出现的概率

互不相干的独立同分布的词

概率相乘

参数就是词的概率

简单模型的问题:

  • 训练集没有见过的词,出现的概率为0 ->未登录词(out-of-vocabulary)

    OOV词虽然有,但是相对频率是0.概率参数也是0,结果也是0

    • 解决:平滑(smoothing)每一个词的数量至少为1 add 1 smoothing

    • Add-α Smoothing

      超参数:模型训练之前一般就设置好了,不参与模型训练的过程,或者根据模型训练选择的

2.2.2 Bigram Language Models

使用两个连续的单元来计算一句话出现的概率

二元语言模型参数化的过程中,计算了一个条件概率,给定 w1和w2概率(前面词和后面词)w1的概率,以及w1发生条件下的w2的概率,估算方法同样是最大似然估算。

Reducing sparsity

和随机抽取一个词相比,训练集里面没有出现二

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2元语言模型是一种简单的n元语言模型,它假设一个单词出现的概率只与前面一个单词有关。在实现2元语言模型时,我们需要首先对训练数据进行处理,统计每个单词出现的次数以及每个单词后面跟着什么单词的频率。 下面是一个简单的Python实现: ```python import re from collections import defaultdict def preprocess(text): # 将文本转换为小写 text = text.lower() # 去除标点符号 text = re.sub(r'[^\w\s]', '', text) # 分词 words = text.split() return words def count_words(words): # 统计每个单词出现的次数 freq = defaultdict(int) for word in words: freq[word] += 1 return freq def count_pairs(words): # 统计每个单词后面跟着什么单词的频率 freq = defaultdict(lambda: defaultdict(int)) for i in range(len(words)-1): freq[words[i]][words[i+1]] += 1 return freq class BigramLanguageModel: def __init__(self, text): # 预处理文本 words = preprocess(text) # 统计单词和单词对出现的频率 self.word_count = count_words(words) self.pair_count = count_pairs(words) def predict(self, word): # 根据2元模型预测下一个单词 candidates = self.pair_count[word] total = sum(candidates.values()) probs = {w: c/total for w,c in candidates.items()} return probs ``` 这个程序实现了一个简单的2元语言模型,它接受一个文本作为输入,预处理文本并统计单词和单词对出现的频率。预测时,给定一个单词,它返回一个字典,包含该单词后面跟着的单词及其出现的概率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值