zoukankan      html  css  js  c++  java
  • 自然语言的分词方法之N-gram语言模型

    也许更好的阅读体验

    基于理解的分词方法

    其基本思想是在分词的同时进行句法、语义的分析,以此来处理歧义问题。

    目前这种方法还处于实验状态

    基于统计的分词方法

    基本思路

    构建语言模型,对句子进行单词划分,划分结果运用统计方法计算概率,获取概率最大的分词方式

    N元语言模型(N-gram语言模型)

    (z)为字串,(w)为划分的词串,(s)是一种划分。该分词方法是以(p(s))最大的分词结果作为结果。

    由于每个词的概率都十分小,对于较长的字串,得到的每个结果的概率可能十分接近于0,计算机精度不够,会影响概率的比较,可通过比较概率的负对数来比较大小。

    这种方法可发现所有的切分歧义,它的成功率很大程度取决于统计语言模型的精度和决策算法。

    概率怎么得到,肯定是要有样本的,如果可以的话,以人类有史以来所有说过的话作为样本肯定是最好的,但这不可能实现。

    对于(p(s)),根据条件概率公式,有(p(s)=p(w_1)p(w_2|w_1)cdots p(w_n|w_{n-1},w_{n-2},cdots w_1))

    这种计算方法对算力要求太高,对训练数据要求十分大,不太可能实现,因此考虑建立模型。

    马尔可夫假设

    俄国数学家马尔可夫提出假设:任意一个词(w_i)出现的概率只同它前面的一个词(w_{i-1})有关,这种假设称为马尔可夫假设。
    (p(s)=p(w_1)p(w_2|w_1)cdots p(w_n|w_{n-1}))
    这样求的方法就简单多了。

    而当我们假设(w_i)出现的概率和它前面的(n)个词有关,就被称为(n)元语言模型

    代码思路

    (DFS)不难实现,首先找到一个可行的划分,再计算概率,保存最大概率的结果,(DFS)途中可适当剪枝。

    //代码框架
    void _find (int cur)//找划分,cur表示当前为第几个词
    {
    	if (cur==n+1)	calc();//对当前结果计算概率并保存
    	for (int i=cur;i<=n;++i)
    		if (check(cur,i)){//如果从cur到i形成一个词
    			add(cur,i);//将该词添加到当前划分
    			_find(i+1);
    			del();//删掉这个词
    		}
    }
    

    与词性标注结合

    这种方法的基本思想是在考虑分词结果的概率的同时,还要考虑词性,自然语言的词性搭配是有规律的,将分词结果的词性搭配的概率也进行比较,从而反过来调整分词,可极大的提高结果的准确性。

  • 相关阅读:
    2021.3.16
    2021.3.15
    通过指定的URL获取返回图片的BASE64编码
    Redis系统学习之缓存穿透,缓存击穿,缓存雪崩的概念及其解决方案
    Redis系统学习之其他高可用模型
    Redis系统学习之哨兵模式
    Redis系统学习之主从复制
    Redis系统学习之发布订阅
    Redis系统学习之持久化(AOF)
    Redis系统学习之持久化(RDB)
  • 原文地址:https://www.cnblogs.com/Morning-Glory/p/15433135.html
Copyright © 2011-2022 走看看