IIWAB unigram、bigram、trigram 以及 n-gram - IIWAB

unigram、bigram、trigram 以及 n-gram

IIWAB 4天前 ⋅ 24 阅读
  1. Unigram(一元模型)

    • 定义:单个的词语或者符号。
    • 示例:在句子“我爱自然语言处理”里,unigram 有“我”“爱”“自然”“语言”“处理”。
    • 用途:可用于词频统计,像构建词袋模型就会用到。
  2. Bigram(二元模型)

    • 定义:由两个连续的词语构成的序列。
    • 示例:上述句子的 bigram 为“我爱”“爱自然”“自然语言”“语言处理”。
    • 用途:能够对词序信息进行捕捉,在预测下一个词时会用到,例如“苹果”后面接“手机”的概率。
  3. Trigram(三元模型)

    • 定义:由三个连续的词语组成的序列。
    • 示例:该句子的 trigram 是“我爱自然”“爱自然语言”“自然语言处理”。
    • 用途:能捕捉更丰富的上下文信息,不过数据稀疏问题也会更明显。
  4. N-gram(N元模型)

    • 定义:N 个连续词语组成的序列,这里的 N 是正整数。当 N=1 时就是 unigram,N=2 时是 bigram,N=3 时是 trigram。
    • 用途:随着 N 值的增大,模型能捕捉到更长的上下文信息,但同时计算成本也会增加,并且需要更多的数据来支持。

应用场景

  • 自动补全功能,比如输入法的联想。
  • 机器翻译,对翻译候选项的概率进行评估。
  • 语音识别,提升识别结果的准确性。
  • 文本生成,像创作诗歌、故事等。

优缺点

  • 优点:实现起来较为简单,计算效率高,还能解释词语之间的共现关系。
  • 缺点:无法捕捉长距离的依赖关系,数据稀疏问题会导致泛化能力变弱。

示例代码(统计bigram频率)

from collections import defaultdict, Counter

def count_bigrams(sentences):
    bigram_counts = defaultdict(Counter)
    for sentence in sentences:
        words = sentence.split()
        for i in range(len(words) - 1):
            bigram_counts[words[i]][words[i+1]] += 1
    return bigram_counts

# 示例用法
sentences = ["我爱自然语言处理", "自然语言处理很有趣"]
bigrams = count_bigrams(sentences)
print(bigrams["自然"]["语言"])  # 输出: 2

通过调整 N 的取值,就能构建出不同类型的 n-gram 模型,进而应用于各种自然语言处理任务之中。


全部评论: 0

    我有话说: