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
  • 相关阅读:
    网络技术
    AWS责任共担模型
    AWS 创建新用户(IAM用户)
    AWS系列-申请Redis
    AWS系列-申请MySQL
    MDX之Case When用法
    SSAS中雪花模型
    SSAS中处理时经常出现的几种错误
    C#连接Oracle中文乱码问题解决方法
    BI中PowerDesigner建模
  • 原文地址:https://www.cnblogs.com/a-present/p/9424937.html
Copyright © 2011-2022 走看看