NLP 学习笔记 01

       coursera上MichaelCollins的课程nlp开始了,在读大部头(mlapp)学习ML的过程中看看nlp也着实不错,可以做一些实践

      这个课程老师语速很慢,讲解思路十分清晰,推荐给大家。在学习中我可能会把两周的内容在我的blog做一个总结(也许是一周的,看内容的多少了,这第一周的内容太详实了,总结起来太费劲了),方便以后学习和查看

----------------------------------------------------------------------------------------------------------------

1.Introductionto Natural Language Processing

      这一节主要介绍了nlp的一些基本内容,nlp的一般定义计算机使用自然语言作为输入和输出,比如siri可以听懂你说的话。这是让电脑与人类交流最重要的一个中间步骤,其应用大致可以分为Machine Translation(机器翻译,典型应用:谷歌翻译)Information Extraction(信息提取),TextSummarization(文本归纳),DialogueSystems(对话系统:典型应用:siri)。

      最基本的nlp问题叫做Tagging,也就是对于一段话的每个词进行特定的标记,举个例子:

               “Profitts/N soared/V at/P Boeing/N Co./N ,/,easily/ADV topping/V forecasts/N on/P Wall/N Street/N ./.

      其中红色的标记部分就叫做tag,上例的N表示名词,P表示介词,V表示动词,ADV表示副词,当然tagging的目标具不仅仅限于词语的词性,可以灵活地设定。比如:

                 "Pro ts/NA soared/NA at/NA Boeing/SC Co./CC"

      其中SC表示Start of Company,CC表示 Company的结束,/NA表示无意义,这样就可以识别出具体的公司的名字了。

        nlp是一个很难的问题,因为同一个词汇可能会有不同的词性和意思,甚至同一句话的不同断句都表示不同的意思,这是nlp问题的难点,除此之外,语音识别也面临着同音字的问题,总的来说nlp的主要难点就是Ambiguity

2.The Language Modeling Problem

            我们有有限个数的词汇

                  

            无限个数的句子,由词汇自由组成,而语言模型就是判断一个句子是否符合要求,对于人来说可以很自然地判断一个句子是否正确,但对于电脑来说就没那么简单了,所以我们会使用一个概率分布来体现这个句子的正确性:

             如下式,其中是所有句子组成的集合。

              (2式)

         一些例子:

               NLP 学习笔记 01_第1张图片

          这样通过概率的大小可以较为科学地区分句子的正确性,这种技术典型的应用就是语音识别以及中文中的分词。

         语言模型中使用最为广泛的模型叫做Markov模型,它对于语言的分析做了一个很强的假设,也就是说“一个词汇出现的概率只与前面的一个或者数个词相关”,很明显这个假设是错的,但在目前的应用中非常有效。用公式解释这个假设也就是:

                      NLP 学习笔记 01_第2张图片

           其中最后一个等式使用了假设

               

          上式因为一个词汇的概率只与前一个词有关,所有又被称为First-OrderMarkov Processess除此之外还有Second-Order MarkovProcesses:与前两个词有关:

                 

      一般为了表示的方便,我们设定x(0)=*,x(-1)=* 。' * '表示一种特殊的开始符号,所以Second-Order又可以表示为:

              

3.Trigram Language Models

        一个三元语言模型就是由:

                         1.一个词的集合V;

                         2.一个参数q(w|u,v)其中w,u,v满足 

                       组成的,并且对于任意一个句子X1……Xn,其中Xn等于STOP,其它词属于V.并且对于这个句子有:

                                   其中设定      

         举一个例子:

                        

           这样我们就定义了这个模型,并且是满足(2式)的要求,那么现在需要的就是计算参数q了。

           一个很自然的解就是根据条件概率的定义,通过统计词组出现的次数来计算,也就是

                       

           然而这样的确可以,但是会遇到Sparse Data Problems,也就是说分母可能为0,这是极有可能出现的事情,而且当|V|越来越大时,参数q的个数也就越来越多,因为我们知道参数的个数等于|V|^3,这里留待以后解决。

4.Evaluating a Language Model: Perplexity 衡量一个语言模型的标准:复杂度?

      我们有一系列用来测试的句子 ,我们可以用我们做好的模型来衡量它们概率和,为了方便起见对其取log
                                                
      那么对于perplexity的定义也就是:
                                   
      我们假设一个模型,有N=|V |+1,V是词汇的数量,并且q(w | u,v)=1 / N,可以计算这个模型的perplexity=N,而perplexity的值越小则越好。
        通过一个实际的例子来予以说明:
                                         NLP 学习笔记 01_第3张图片
        其中的bigram model(二元模型)和unigram model(一元模型)是类似于三元模型的定义,这点在上面可以看得很清楚,可以发现三个模型中trigram的perplexity是最低的,与|V|+1=50001相比差距十分巨大。

 5.Linear Interpolation 线性插值?

     这里又涉及到了Bias-Variance的区分了,具体来说就是简单的模型容易欠拟合,复杂的模型容易过拟合,上面列举的三个模型也一样,我们不能单单看perplexity来说一个模型的好坏,应该看这个模型在测试数据上的表现如何。
     Linear Interpolation也就是将三个模型综合起来,首先对三个模型的参数q进行最大似然估计,得到:
                                        NLP 学习笔记 01_第4张图片
      然后将这三个结果通过参数结合起来:
                                           
      其中                             
      那么如何得到这三个参数的值呢?这需要我们将一部分的训练数据留下作为验证集(validation set),选择λ1,λ2,λ3使得下式最大:
                            
      其中在validation set 中出现的次数,这样一来也就是说最大化了模型对于validation set的精度,并以此来求出三个参数


你可能感兴趣的:(机器学习,nlp)