这里的歧义是指:同样的一句话,可能有两种或者更多的切分方法,这些切分结果,有的正确,有的不正确。
消除歧义的目的就是从切分结果中挑选切分正确的。
假设我们要切分句子:结婚的和尚未结婚的,使用逆向最大匹配和正向最大匹配算法的结果如下:
1
2
|
逆向最大匹配:[结婚, 的, 和, 尚未, 结婚, 的] 正向最大匹配:[结婚, 的, 和尚, 未结, 婚, 的] |
再比如,这几块地面积还真不小:
1
2
|
逆向最大匹配:[这, 几块, 地, 面积, 还真, 不小] 正向最大匹配:[这, 几块, 地面, 积, 还真, 不小] |
这里就出现了歧义现象,这种歧义现象称为交集型歧义。
交集型歧义的特点是,其中的一个字既可以和前面的字结合成词,也可以和后面的字结合成词,如上面所说的“和尚未"中尚就是这样的字,既可以和前面的字结合成“和尚”也可以和后面的字结合成“尚未”。还有“地面积”中的面,既可以是地面,也可以是面积。
那么我们该选择哪一个分词结果呢?
我们可以利用ngram模型来消除歧义,我们看第一个例子的分词过程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
初始化bigram bigram初始化完毕,bigram数据条数: 1519443
利用bigram为逆向最大匹配算法的分词结果进行评分: 二元模型 结婚:的 获得分值: 16.970562
二元模型 和:尚未 获得分值: 2.0
二元模型 尚未:结婚 获得分值: 1.4142135
二元模型 结婚:的 获得分值: 16.970562
逆向最大匹配:[结婚, 的, 和, 尚未, 结婚, 的] : ngram分值= 37.35534
利用bigram为正向最大匹配算法的分词结果进行评分: 二元模型 结婚:的 获得分值: 16.970562
二元模型 的:和尚 获得分值: 3.0
正向最大匹配:[结婚, 的, 和尚, 未结, 婚, 的] : ngram分值= 19.970562
最大分值: 37.35534 , 消歧结果:[结婚, 的, 和, 尚未, 结婚, 的]
|
接着看第二个例子:
1
2
3
4
5
6
7
8
9
10
11
|
利用bigram为逆向最大匹配算法的分词结果进行评分: 二元模型 地:面积 获得分值: 1.7320508
逆向最大匹配:[这, 几块, 地, 面积, 还真, 不小] : ngram分值= 1.7320508
利用bigram为正向最大匹配算法的分词结果进行评分: 正向最大匹配:[这, 几块, 地面, 积, 还真, 不小] : ngram分值= 0.0
最大分值: 1.7320508 , 消歧结果:[这, 几块, 地, 面积, 还真, 不小]
|
这里要解释的是,ngram中的n>1,我们这里取2(bi),我们看到bigram中数据的条数有1519443,bigram需要从人工标注的语料库中提取,提取方法参考word分词项目,bigram中的数据格式如下:
1
2
3
4
5
6
|
结婚:登记 91
结婚:的 288
地:面积 3
和:尚未 4
尚未:结婚 2
的:和尚 9
|
表示的含义是在人工标注的语料库中,结婚这个词后面跟着登记这个词的出现次数是91次,结婚这个词后面跟着的这个词的出现次数是288次。
如果ngram中的n为3,则数据格式如下:
1
2
3
4
|
结婚:的:事情 3
结婚:的:人 4
结婚:的:信念 2
结婚:的:决定 13
|
表示的含义和bigram一致。
通过分析bigram和trigram,我们知道,在ngram中,n越大,消歧的效果就越好,但是数据也越大,耗费的内存就更多了。
利用ngram模型来消除歧义,依赖人工标注的语料库,利用了统计学的大数定律,这种方法的缺点在于无法处理少见的语言现象,以及无法处理样本覆盖不到的情况。
相关推荐
### 一种改进的中文分词歧义消除算法研究 #### 关键知识点概述 本文主要讨论了一种改进的中文分词歧义消除算法的研究。中文分词是自然语言处理(NLP)的重要组成部分,对于后续的语义分析、机器翻译等任务至关重要。...
N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间...
# 基于Ngram模型的中文文本纠错系统 ## 项目简介 该项目通过Ngram模型与Perplexity(PPL)指标实现中文文本的简单纠错。主要利用Ngram语言模型预测文本中字符替换后的概率提升,从而进行文本纠错。项目适用于学习...
**Ngram分词程序**是一种基于N-Gram模型的文本处理工具,主要应用于自然语言处理领域,用于将连续的汉字序列切分成有意义的词汇单元。N-Gram模型是指在文本中考虑一个单词出现的概率时,不仅考虑当前单词,还考虑其...
分词学习(3),基于ngram语言模型的n元分词-附件资源
基于Ngram双向匹配最大中文分词 包含data:停用词语料,标准切分语料,测试集,训练集 PrePostNgram1.py为双向最大匹配程序 Evaluate.py为评估程序结果 word内容为程序说明以及原理
word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过...
Ngram是一种统计语言模型,它基于前n个词来预测下一个词的概率。在中文分词中,通常使用的是二元(bigram)或三元(trigram)模型,因为这些模型能够捕捉到词语间的上下文关系。例如,二元模型会考虑当前词与其前一...
word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...
NGramNGram Model smooth new word该项目实现了NGram模型,但主要实现2元和3元语法模型,主要涉及的技术包括NGram生成、起始字符统计、平滑技术,此外还包括一些应用,比如新词发现。目前该项目还有待完善。
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程...基于ngram+softmax函数的传统统计方法源码+biLSTM和CNN深度学习方法对数据集进行文本分类.zip
总结来说,这个实验报告深入探讨了中文分词、n-gram模型在宋词生成中的应用,提供了一整套Java实现的解决方案,包含了从数据收集、模型训练到系统设计的完整流程,对于理解和实践自然语言处理技术具有很高的参考价值...
ngram-语言模型一个 HMM Ngram 语言模型在 Python 中的实现。 目前实现了基本的 NGram 分析,并提供了一个接口来从你最喜欢的语料库中创建采样器。 使用 run_sampling_from_corpus.py 在文本文件中的语料库上创建...
本资源是一个基于ngram和softmax函数方法结合biLSTM和CNN深度学习方法的文本分类项目,旨在对Kaggle数据集进行深入分析和分类。项目中包含详细的代码实现和注释,帮助用户理解并掌握这些高级文本分类技术。该项目...
类图还可能展示了类之间的继承关系、关联关系以及方法调用,如`NGramModel`可能从抽象类`LanguageModel`继承,`CountTable`可能包含`Vocabulary`实例,而`ngram-count`函数可能通过`NGramModel`的API来训练模型。...
N-gram语言模型是一种在自然语言处理中广泛应用的概率统计模型,它通过分析文本数据来预测一个序列中的下一个词。在本项目中,我们将探讨如何使用Python实现N-gram模型,并特别关注Kneser-Ney平滑算法,这是一种改进...
ansj 分词原理 ngram+维特比最优路径 能够实现消除歧义
###Java分布式中文分词组件 - word分词####word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名...