中文分词

中文分词:将一段文本拆分为一系列单词的过程。其算法大致可分为基于词典规则和基于机器学习两个类别。


基于词典规则:最简单的分词算法,给定一部词典来确定查询与输出的规则。其重点不在于分词本身,而在于支撑词典的数据结构。
词典中的字符串定义为词。

实现词典分词的步骤:

  1. 准备一份词典,例如SogouW, THUOCL等;
  2. 词典确定后,制定一些切分算法,常用的规则有:正向最长匹配、逆向最长匹配、双向最长匹配等。
    以上方法均是基于完全切分,其完全切分的定义是:找出一段文本中所有单词。其原理很简单,遍历文本中的连续序列,查询该序列中是否存在词典中。完全切分的输出并不算是中文分词。
    正向最长匹配:为长度较长的单词设置较高的优先级,以某个下标为起点递增查询词汇的过程中,优先输出更长的单词。该算法存在一定的冲突,例如"研究生命起源",会被分词为[“研究生”,“命”,“起源”].
    逆向最长匹配:为长度较长的单词设置较高的优先级,从后向前扫描,保留最长的单词,与正向匹配的唯一区别在于方向。该算法存在一定的冲突,例如"项目的研究",会被分词为[“项”,“目的”,“研究”].
    双向最长匹配:同时执行正向和逆向匹配,若二者词数不同,则返回词数较少的那个;否则返回二者中单字更少的那个;否则返回逆向最长匹配的结果。该算法基于一项语言学的命题:汉字中单字词的数量远小于非单字词。
  3. 选择合适的数据结构来提高速度:匹配算法的瓶颈之一在于如何判断集合/词典中是否含有字符串,我们需要找一个兼顾时间与空间的数据结构,可以使用字典树。为了进一步优化,可以动态扩张为首字散列的字典树、前缀树、双数组字典树、后缀树等。再进一步,可以优化为基于双数组字典树的AC自动机。
  4. 准确率的评测:在中文分词任务中,一般使用标准数据集上词语级别的准确率、召回率与F_1值来衡量分词器的准确程度。

停用词过滤:停用词指的是没有实际意义的词汇,可以设置停用词,将其加载到相应的数据结构中,针对分词结果,遍历每个词语,若存在停用词,则删除。

简繁转换:由于存在一简多繁、一繁多简的情况,因此会出现“简繁分歧词”,为了解决该问题,应该按词转化而不是按字转化。

拼音转换:将汉字转化为拼音,由于涉及到多音字,因此需要按词转换。


词典分词快而不准,它存在无法消除歧义的问题,因此引入统计分词。

语言模型:对语言现象的抽象,给定一个句子w,计算其出现概率p(w)的模型。

单纯地计算p(w)是非常困难的,不妨考虑组成句子的单词,单词列表 w = w_1w_2…w_n, 对于每个w_t都是一个单词,则p(w) = p(w_1w_2…w_n), 由条件概率可知 p(w) = P(w_1|w_0)p(w_2|w_1w_0)…p(w_{k+1}|w_0w_1…w_k).
上述公式将求解句子概率转化为为依据之前的单词预测下一个单词的后验概率。其后验概率可以通过极大似然估计来计算。

当句子中单词过多时,计算量非常大,为了解决该问题,引入马尔可夫假设,即每个单词出现的概率只取决于前一个单词。则上述公式可以简化为 p(w_t|w_0w_1…w_{t-1}) = p(w_t|w_{t-1}).
基于上述假设,可以引入二元语法模型:p(w) = P(w_1|w_0)p(w_2|w_1)…p(w_{k+1}|w_k).

同样的思路,若每个单词的概率与该单词的前n个词语有关,则为n元语法模型,在工程中,一般n<4.

数据稀疏问题:语料库中没有收录某句子/单词,导致其出现的概率为0.
为了解决该问题,可以使用线性插值法:引入常数平滑因子,防止概率为0;拉普拉斯平滑(加一平滑),引入两个平滑因子。

语料库的选择:词语种数指的是语料库有多少不重复的词语;总词频指的是所有词语的词频总和。

对于二元语法模型,需要统计二元语法频次及一元语法频次,随后,通过极大似然估计与平滑策略来估计任意句子的概率分布,最终得到语言模型。

序列标注:给定一个序列 x=x_1x_2…x_n, 找出序列中每个元素对应的标签 y = y_1y_2…y_n的问题,其中,y所有可能的取值集合称为标注集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值