美文网首页
经典的语言模型:N-gram

经典的语言模型:N-gram

作者: 一心一意弄算法 | 来源:发表于2018-11-29 14:52 被阅读53次

    语言模型

    一个语言模型通常构建为字符串的S的概率分布P(s)。比如,每个人100句话中平均大约有一句“你好”,那么“你好”这句话的概率大致为p= 0.01,像“野猪会做饭烧菜”,基本没人会说,则可以认为其概率为0。语言模型中的句子和语法无关,只和出现的可能性相关。
    假设构成一个句子S = w1w2w3....wn。其概率计算公式可以表示为:
    p(s) = p(w1)p(w2|w1)p(w3|w1w2).....p(wl|w1...w_{l-1}),随着句子的增长,计算难度是呈指数型增长的。
    一个比较实际的做法是只考虑当前词只和前n个词相关,其余无关。这种语言模型称之为n-gram。一般n=2,3应用的比较多。

    以二元文法为例:2-gram

    我写了一本书,分词后为:我 写了 一本 书。因为开头和结尾没有,则会为句子添加<BOS>,<EOS>,分别代表开始和结束。
    即这句话的概率p=p(我|BOS)*p(写了|我)*p(一本|写了)*p(书|写了)*P(EOS|书)

    如何确定p(我|BOS)的值呢?
    首先构建语言模型的数据为训练数据。假设通过统计得到 "BOS 我” = 5次
    “BOS 你” = 3次 ,“BOS 他” = 4次,,则p(我|BOS)= 5/(5+3+4) = 5/12 ,其他同理,最终可以得出这句话的概率。 显然,语言中肯定存在不在模型中的词(未登录词,新词等等)。比如心来的句子p(开始|BOS) = 0。 那么这个以“开始”开头的句子概率为0,显然不够合理。

    数据平滑

    平滑技术就是用来解决这类概率为0的情况。

    加法平滑技术

    在上述问题中,字面理解,就是默认给每个词组+1,即p(我|BOS)= 5+1/{(5+3+4)+3} =6/ 15。p(开始|BOS) = (0+1)/{(5+3+4)+3 +1} = 1/16。 概率为0的问题也得到了有效的解决。

    古德图零估计法

    基本思路:对于任何一个出现r次的n元语法,都假设它出出现了r^*次。
    r^* = (r+1)*\frac{n_{r+1}}{n_r}
    其中,n_r为出现r次的n元语法个数,n_{r+1}同理。
    可以看出,这个估计法不能直接应用于n_r = 0 的情况。

    Kaza平滑技术

    待定

    模型评估

    评估一个模型的好坏,就是看这个模型在测试数据(实际数据)上的表现情况。准确率,回归率等等。而评价一个语言模型常用的方法有测试数据的概率,或交叉熵,困惑度等等

    语言模型设计的任务就是寻找最接近真实语言的模型。所以,采用用交叉熵或困惑度来评估模型,熵值越小,表示模型越接近真实语言。
    交叉熵公式为:
    H(L,q) = -\lim_{n ->\infty}\frac{1}{n}\sum_n^ip(x_i)logq(x_i)
    首先p(x_i)是真实词x_i的概率,这个值无法获取。但可以确定的是,它是一个定值。
    所以H(L,q)\approx-\frac{1}{W}logp(T),p(T)的是文本T的概率,W是文本T词的个数 。
    加个2的次幂其实就是困惑度了。所以一般用困惑度来代替交叉熵来评估语言模型。
    困惑度:PP = 2^{-\frac{1}{W}logp(T)}

    相关文章

      网友评论

          本文标题:经典的语言模型:N-gram

          本文链接:https://www.haomeiwen.com/subject/rfjlqqtx.html