zoukankan      html  css  js  c++  java
  • 读《数学之美》第三章 统计语言模型

    自然语言从产生开始,逐渐演变为一种基于上下文相关的信息表达和传递方式,在计算机处理自然语言时,一个最基本的问题就是为自然语言上下文相关的特性建立数学模型,叫做统计语言模型(Statistical Language Model),它是自然语言处理的基础,广泛应用于机器翻译、语音识别、印刷体或手写体识别、拼音纠错、汉字输入和文献查询等。

    对于一句通顺的话<1>,如果改变一些词的顺序,或替换掉一些词<2>,它的意思就含糊了,如果随机打乱<3>,则完全不知所云了。对于<1>表明是句子合乎语法、词义清晰;对于<2>则虽不符合语法,但词义还算清晰;对于<3>则词义都不清晰了。上个世纪七十年代以前,科学家就是通过判断文字序列是否合乎文法、含义是否正确等进行自然语言处理的。

    贾里尼克换了一个角度,用简单的统计模型很漂亮的解决了这个问题:一个句子是否合理,就看这个句子出现的概率大小如何,概率大则说明比较合理,概率小则说明句子不合理。假设S为某一个句子,由一连串特定顺序排列的词w1,w2,w3,...,wn构成,n为S的句子长度。p(S) = p(w1,w2,w3,...,wn) = p(w1) x p(w2|w1) x p(w3|w1, w2) x ... x p(wn|w1, w2, w3,...,wn-1) 。即p(w1)表示w1这个词出现的概率,p(w2|w1)表示词w2在词w1之后出现的概率,以此类推。

    从计算上讲,计算一个词出现的条件概率p(w1)比较简单,第二个词出现的条件概率p(w2|w1)也还不算麻烦,第三个词的条件概率p(w3|w1, w2)已经非常难算了,因为涉及到三个变量w1-w2-w3,每个词的可能性都是一个语言词典的大小,到了最后一个词wn,条件概率基本上无法估算了。

    俄国数学家马尔可夫提出了一种简化模型:马尔可夫模型,大体的意思是某一时刻的状态只与前一时刻的状态有关,而与其他时刻无关。用于统计语言模型中,可表述为词wi只与它前一个词wi-1有关,而与其他词无关,这样概率模型采用马尔可夫模型之后得到:p(S) = p(w1,w2,w3,...,wn) = p(w1) x p(w2|w1) x p(w3|w2) x ... x p(wn|wn-1)。这就是统计语言模型的二元模型(Bigram Model)。如果假设一个词由它前面N-1个词决定,则被称为N元模型。

    那么剩下的就是如何估计条件概率p(wi|wi-1)了:

    (1) 选择大量合适的语料库(机读文本),数量为#;

    (2) 统计词wi-1出现的次数#(wi-1);

    (3) 统计词wi-1,wi前后相邻出现的次数#(wi-1,wi);

    (4) 计算词语二元组的相对频度:f(wi-1) = #(wi-1)/#;f(wi-1,wi) = #(wi-1,wi)/#。

    (5) 根据大数定理,只要统计量足够,相对频度等于概率,则p(wi-1) ≈ #(wi-1)/#;p(wi-1,wi) ≈ #(wi-1,wi)/#。

    (6) 根据条件概率公式计算条件概率p(wi|wi-1) = p(wi-1,wi)/p(wi-1) =  #(wi-1,wi)/#(wi-1)。

    上面只是一个非常粗略的流程描述,对于真正实现一个好的统计语言模型,还需要有很多的问题解决:

    (1) 零概率问题

    如果某个词在语料库中没有出现或只出现一两次怎么办?还能利用大数定理进行分析吗?

    (2) 句子中词只与前一个词相关似乎过于简化了吧?

    高阶语言模型,阶数多少最合适?

    (3) 语料库的设计

    如何根据具体应用选择最合适的语料库,噪音的考量等。


    总结

    统计语言模型在形式上非常简单,容易理解,却学问颇深。前面讲到Google的机器翻译项目Rosetta(罗塞塔:源于罗马帝国时期在罗塞塔这个地方发现了一块古埃及石碑,用三种语言埃及象形文字、埃及的拼音文字和古希腊文记录了古埃及的早期历史。因此,今天很多的翻译软件和服务都叫做罗塞塔)在07年美国标准局主持下的机器翻译系统测评中一举夺魁就体现了统计语言模型的强大功力。

    *****************************************************************

    2015-8-6

  • 相关阅读:
    MVC5管道处理模型
    http协议下:为什么请求与响应会做到准确误的对应。不会出现请求与响应的错乱
    修改 IIS 队列长度
    修改 ASP.NET 请求队列的限制
    Windows性能查看器:系统的性能信息(I/O,IIS最大连接数,Sql) ,以及解决 asp.net IIS 一二百多用户并发
    详解 ASP.NET异步
    [C#]获得线程池中活动的线程数
    一个http请求就是一个线程吗,java的服务是每收到一个请求就新开一个线程来处理吗
    IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的...
    ASP.NET MVC 线程和并发
  • 原文地址:https://www.cnblogs.com/huty/p/8519272.html
Copyright © 2011-2022 走看看