zoukankan      html  css  js  c++  java
  • 【NLP_Stanford课堂】语言模型1

    一、语言模型

    旨在:给一个句子或一组词计算一个联合概率

    作用:

    • 机器翻译:用以区分翻译结果的好坏
    • 拼写校正:某一个拼错的单词是这个单词的概率更大,所以校正
    • 语音识别:语音识别出来是这个句子的概率更大
    • 总结或问答系统

    相关任务:在原句子的基础上,计算一个新词的条件概率,该概率与P(w1w2w3w4w5)息息相关。

    任何一个模型计算以上两个概率的,我们都称之为语言模型LM。

    二、如何计算概率

    方法:依赖概率的链式规则

    从而有:

    问题:如何预估这些概率

    方法一:计数和细分

    但是不可能做到!

    原因:句子数量过于庞大;永远不可能有足够的数据来预估这些(语料库永远不可能是完备的)

    方法二:马尔可夫假设

    或者:

    即:

    所以:

    三、马尔可夫模型

    1. Unigram model

    其假设词是相互独立的

    2. Bigram model

    3. N-gram models

    但是并不有效,因为语言本身存在长距离依存关系

     比如"The computer which ......crashed" 单词crash本身其实是依赖于主语computer的,但是中间隔了一个很长的从句,在马尔可夫模型中就很难找到这样的依存关系

    但是在实际应用中,发现N-gram可以一定程度上解决这个问题

    四、预估N-gram概率

    以bigram为例。

    最大似然估计:

    ,即,

    分子表示wi紧跟着wi-1出现的计数,分母表示wi-1出现的计数

     举例如下:

    语料库:

    计算bigram概率:

    结果:

    更复杂的举例如下:

    一语料库中有9222个句子,这里我们只计数其中8个我们想要关注的单词

     其中每个单词后面紧跟着的单词计数如下:

    接下来我们需要做的是归一化

    其中有些为0,是因为偶然性或者结构语法上的原因

    在获得每个bigram之后,就可以预估一个句子的概率了

    举例如下:

    其中<s>是一个句子开始的标记,</s>是一个句子结束的标记

    实际中,在计算概率时使用log,如下:

    原因:

    1. 避免计数下溢,多个小于0的数相乘之后可能得到的数会非常非常小,甚至接近于0

    2. 使用log之后可以将乘法转换成加法,计算更快

     其他语言模型:

    • SRILM
    • Google N-Grams
    • Google Book N-Grams
  • 相关阅读:
    [转]编译原理书籍推荐
    [转]让 Dreamweaver 支持 Emmet(原ZenCoding)
    [转]Zend Studio GitHub 使用教程
    [转]如何用EGit插件把github上的项目clone到eclipse
    [转]github更新自己fork的代码
    [转]少走弯路:学习编译原理的相关建议
    [转]关于计算机研究生报考方向的简要介绍
    [转]zend studio 安装git插件
    [转]如何在SAE上安装原版wordpress
    C语言博客作业02循环结构
  • 原文地址:https://www.cnblogs.com/a-present/p/9424937.html
Copyright © 2011-2022 走看看