二元分词和中文分词
语言模型
模型:对事物的数学抽象。
语言模型:对语言现象的数学抽象,准确的讲,给定一个句子 w,语言模型就是计算句子的出现概率 p(w) 的模型,而统计的对象就是人工标注而成的语料库。
例如:
商品 和 服务
商品 和服 物美价廉
服务 和 货币
P(商品 和 服务)= P(商品 和服 物美价廉)= P(服务 和 货币)=1/3,然后其他句子的概率都为0,语言模型的建立:
这时就出现下列问题:
问题:
1.数据稀疏:长度越大的句子越难出现,可能统计不到频次,导致句子出现的概率为0。
2.计算代价大:k (句子中的单词)越大,需要存储的 p 就越多,即便用上字典树索引,依然代价不菲。
问题解决:(将句子分解成一个一个的单词进行统计句子)
马尔科夫链:需要使用马尔可夫假设
来简化语言模型,给定时间线上有一串事件顺序发生,假设每个事件的发生概率只取决于前一个事件,那么这串事件构成的因果链被称作马尔可夫链,由此衍生出二元语法模型:每个单词的出现仅仅依靠前一个单词。
类似的n元语法:每个单词的概率仅仅取决于该单词之前的n个单词。
特别地,当 n=1 时的 n 元语法称为一元语法 ( unigram);当 n=3 时的 n 元语法称为三元语法(tigam); n≥4时数据稀疏和计算代价又变得显著起来,实际工程中几乎不使用。
数据稀疏与平滑策略
对于n元语法模型,n越大,数据稀疏问题越严峻。比如上述语料库中“商品 货币”的频次就为0。一个自然而然的解决方案就是利用低阶 n 元语法平滑高阶n 元语法,所谓平滑,就是字面上的意思:使n元语法频次的折线平滑为曲线。最简单的一种是线性插值法:
中文分词语料库
- 《人民日报》语料库 PKU
- 微软亚洲研究院语料库 MSR
- 香港城市大学 CITYU(繁体)
- 台湾中央研究院 AS(繁体)
训练和预测
训练指的是统计二元语法频次以及一元语法频次,有了频次,通过极大似然估计以及平滑策略,我们就可以估计任意句子的概率分布,即得到了语言模型。这里以二元语法为例:
语料库:my_cws_corpus.txt。内容如下:
商品 和 服务
商品 和服 物美价廉
服务 和 货币
代码:
from pyhanlp import *
from jpype import JString
## 加载 JAVA 类
CorpusLoader = SafeJClass('com.hankcs.hanlp.corpus.document.CorpusLoader')
NatureDictionaryMaker = SafeJClass(