• N-gram介绍


    在实际应用中,我们经常需要解决这样一类问题:如何计算一个句子的概率?如:

    • 机器翻译:P(high winds tonite) > P(large winds tonite)
    • 拼写纠错:P(about fifteen minutes from) > P(about fifteenminuets from)
    • 语音识别:P(I saw a van) >> P(eyes awe of an)
    • 音字转换:P(你现在干什么|nixianzaiganshenme) > P(你西安在干什么|nixianzaiganshenme)
    • 自动文摘、问答系统、... ...

    以上问题的形式化表示如下:

    p(S)=p(w1,w2,w3,w4,w5,…,wn)

          =p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)//链规则

    p(S)被称为语言模型,即用来计算一个句子概率的模型。

    那么,如何计算p(wi|w1,w2,...,wi-1)呢?最简单、直接的方法是直接计数做除法,如下:

    p(wi|w1,w2,...,wi-1) = p(w1,w2,...,wi-1,wi) / p(w1,w2,...,wi-1)

    但是,这里面临两个重要的问题:数据稀疏严重;参数空间过大,无法实用。

    基于马尔科夫假设(Markov Assumption):下一个词的出现仅依赖于它前面的一个或几个词。

    • 假设下一个词的出现依赖它前面的一个词,则有:

    p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)

          =p(w1)p(w2|w1)p(w3|w2)...p(wn|wn-1)   // bigram

    • 假设下一个词的出现依赖它前面的两个词,则有:

    p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)

          =p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|wn-1,wn-2)  // trigram 

    那么,我们在面临实际问题时,如何选择依赖词的个数,即n。

    • 更大的n:对下一个词出现的约束信息更多,具有更大的辨别力
    • 更小的n:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性。

    理论上,n越大越好,经验上,trigram用的最多,尽管如此,原则上,能用bigram解决,绝不使用trigram。

  • 相关阅读:
    java ssh免密登录
    [8.0][MGR][bug]多主模式,外键冲突错误
    内核月报bookmark
    netcat 传输T级别大文件
    innodb部分内部操作
    qps.sh
    ABAP-ALV判断骚操作
    HCM基本知识
    SAP-VOFM的使用
    ABAP-处理去掉特殊字符
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6226523.html
Copyright © 2020-2023  润新知