中文分词算法

合集下载

一种改进的中文分词正向最大匹配算法

一种改进的中文分词正向最大匹配算法
第2 8卷第 3期
21 0 1年 3月
计 算机 应 用与软 件
Co utr Ap lc to sa d S f r mp e p i ai n n o wae t
V0 _ l28 No. 3
M a . 01 r2 l

种 改 进 的 中 文 分 词 正 向 最 大 匹 配 算 法
t e s e d a d e ce c fC ie e W o e me tt n ag r h h v e n o vo sy i r v d h p e n f in y o h n s r s g n ai lo i m a e b e b iu l mp o e . i d o t Ke wo d y rs C i e e w r e me tt n W o a k F r r n x mu mac i g ag rt m h n s o d s g n ai o d r b n o wa d la i m t hn l o i h
p t fr a d a d a f ri r vn MM lo i m h ti o a sg h xmu tx 一 n t o b ra e y a c l a e n t e w r - u s o r n i e o mp o i g F w ag r h t a s t s in t e ma i m e t1 g h t e t td d n mi al b s d o 同 的 统 计 , 8—1 因 3字 的 词 所 占 比 例 较 小
0 引 言
中文 自动 分 词 是 中文 信 息 处 理 中 最 为 基 础 、 为重 要 的 问 最 题 , 汉语 文 本 自动 标 注 、 索 引擎 、 器 翻 译 等工 作 中 的 关 键 是 搜 机

中文分词算法在专利文献中的应用研究

中文分词算法在专利文献中的应用研究
分 词有两 块难 点 ,一个 是 分 词 的歧 义 ,一个 是 末收 录 同的判
3 专 利 文献 分词 算法
31分 词 算 法综述 . 现 有 的关 于 中文分 词 的技术 主要 是 有两 大类 ,一 种 是利 用海 量 词典 进行 分词 ,另一 种则 是利 用 统计进 行 分词 。词典 分词 的原 理 是将 N个 连续 汉 字与 词典 里 的 词语进行 适 配 . 取 其最 长的适 配 词 ,拿 “ 计算 机 的 基本 原 理” 讲 ,“ 来 计算 ” 一 是 个 词 ,计 算 机” 是一 个 词 , 词的时候 取 长度 较 长的‘ 算 ‘ 也 分 计 机” ,而不 会取 “ 计算 ” 机” 个 同;最 基础 的 词典分 词方法 、“ 两 有 正 向 匹配算 法 和逆 向匹配算 法 ,它 们分 别是 从 句子 的头和 n 尾 进 行 匹配 ,其结 果 基本 一致 ,略有 不 同 ,词 典 分 词的准确 率 较 高 ,分词 的质量 由词 典 收纳词 的丰 富程度 决 定 ,其不具 备 对 未知 词语 的判 断 能力 。统 计 分词 可 以对文 献 中反 复出现
不 仅包 含技 术也 包 括法律 和 经 济信 息 ,除 了某 些 需要 保密 的
领域 ,如军 工行 业 ,专利 文献 涉 及 了绝 大部 分工 程技 术 领域 ,
如 果能 有效 利用 这些 信 息 ,就 可 以避 免重 复研 发 ,减 少开 发 时 间 .降低 开发 成 本 ,也 可 以有效 防止 侵 犯他 人 合法 权益 ,
研 究论 文
H IX A K U A I E X E
中文分词算法在专利文献 中的应用研究串
福建省知识产权信 息公 共服务 中心 宋立峰
[ 摘要] 介 绍 了专利 文献 中中文 分词 的基本 方法 ,主要 分析 了基于 词 类 的错误 驱动 学 习方 法 、条件 随机 场 方法 、期 望最 大值

分词算法汇总

分词算法汇总

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为 bigram。即
P(T ) P(WW Wn ) P(W1 ) P(W2 | W1 ) P(W3 | WW Wn 1 ) 1 2W3 ... 1 2 )...P (Wn | W1... P(W1 ) P(W2 | W1 ) P(W3 | W2 )...P(Wn | Wn1 )
如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为 trigram。 在实践中用的最多的就是 bigram 和 trigram 了,而且效果很不错。高于四元的用的很 少, 因为训练它需要更庞大的语料, 而且数据稀疏严重, 时间复杂度高, 精度却提高的不多。 设 w1,w2,w3,...,wn 是长度为 n 的字符串,规定任意词 wi 只与它的前两个相关,得到三 元概率模型
优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断 点(切分标志),可将原字符串分为较小的串再来进机械分词,从而减少匹配的错 误率。
1.5 最佳匹配(OM,分正向和逆向)
1/7
对分词词典按词频大小顺序排列,并注明长度,降低时间复杂度。
第二节 基于统计的分词 主要思想:上下文中,相邻的字同时出现的次数越多,就越可能构成一个词。因此字与 字相邻出现的概率或频率能较好的反映词的可信度。 主要统计模型为: N 元文法模型 (N-gram) 、 隐马尔科夫模型(Hidden Markov Model, HMM) 2.1N-gram 模型思想 模型基于这样一种假设,第 n 个词的出现只与前面 N-1 个词相关,而与其它任何词都 不相关,整句的概率就是各个词出现概率的乘积 . 我们给定一个词,然后猜测下一个词是什么。当我说“艳照门”这个词时,你想到下一个 词是什么呢?我想大家很有可能会想到“陈冠希”,基本上不会有人会想到“陈志杰”吧。 N-gram 模型的主要思想就是这样的。 对于一个句子 T,我们怎么算它出现的概率呢?假设 T 是由词序列 W1,W2,W3,…Wn 组成的,那么

汉语自动分词算法综述

汉语自动分词算法综述

都归结为计算词频 的统计信息 . 就是基于概率论的算法 。 也 对于
基 于 语 料 库 的 分词 算 法 . 目前 还 没 有 看 到 一 个 很 好 的 模 型 。 32 分 词算 法 .
现有 的中文分词算法主要有 :正向最大匹配 ,逆 向最大匹
配 . 词 遍 历 。 立 切 分标 志 , 佳 匹 配 . 穷 多 层 次 列 举 , 频 逐 设 最 有 词
问题就是 . 建立一个标 准的分词系统词表 。 有一个权威的分词词 点是执行起来简单 . 不需要任何 的词法 、 句法 、 语义知识。 没有很 表 作 为 分词 依 据 。 可 惜 , 目前 为止 , 很 到 我们 还没 有 。 另外 一 个 主 复 杂 的 数据 结 构 .唯 一 的 要 求 就 是 必 须 有 一 个 很 强 大 的 匹 配 字 要 问 题 就 是切 分规 范 和 消 歧 。 方 面 。 然 还 没 有 出现 一 个 百 分 典 D 这 虽 。缺点是不能很好地解决歧义问题 . 不能认识新词。根据分 之 百 完 美 的切 分 消歧 算 法 . 是 已 经 出 现 了很 多 比较 好 的 , 有 析 . 但 具 匹配 的错 误 率 为 119 /6 。 实际使用价值 的算法 f1 逆 向最 大 匹 配 法r 2 - ' i
21系 统任 务 . MM 法 是 每 次 从 S 中取 出长 度 为 Ma x的 一 个 子 串 ( 设 Sr 假 t长
汉语的语 素和单字词 . 合成 词和短语之问没有清晰的界限。 度 大 于 Ma 。 小于 Ma 时 。 取 出整 个 字 串 ) 把 该 子 串与 与 D x 当 x 则 。 汉语分词是 由计算机 自动识别文本中的词边界的过程 从计算 中的词进 行匹配 。 若成功 , 则该 子 串为词 。 指针 后移 Ma x个汉字 则 再 机 处 理 过 程 上 看 , 词 系统 的 输 入 是 连 续 的 字 符 串 ( 。: … . 后 继续 匹配 。若 不 成 功 , 把 该 字 串最 后 一 个 字 去掉 。 与 D 中 分 CCC

中文分词

中文分词
Class-based Ngram Ngram分词评价
能够处理大多数常用词带来的歧义问题 不能处理新词以及新词带来的歧义问题
解决之道:Class-based Ngram
在统一的框架下进行分词与新词识别 将词分为若干类
词典词:教师(词典处理) 仿词:2000年(规则处理) 新词:范路(基于类的新词识别) 形态词:高高兴兴(规则处理) 不同类型的词用不同处理方法,最后利用Ngram框架寻找全 局最优切分结果
P(C ) ≅ ∏P(ci | ci−2ci−1)
m 1 i=1
m
P (S1n | C1m ) = P (s1, s2 ,⋅ ⋅ ⋅, sn | c1, c2 ,⋅ ⋅ ⋅, cm ) ≅ P ([s1,⋅ ⋅ ⋅, sc1−end],⋅ ⋅ ⋅,[scm−start,⋅ ⋅ ⋅, sn ] | c1, c2 ,⋅ ⋅ ⋅, cm ) ≅ ∏ P ([scj −start,⋅ ⋅ ⋅, scj −end] | c j )
中文分词一席谈
suntian@
内容提要
中文分词概述 分词技术发展 国际分词评测 分词技术总结
中文分词概述
什么是分词? 什么是分词?
分词就是利用计算机识别出文本中词汇的过程。比如 句子“内塔尼亚胡说的确实在理”
中文分词概述(Cont.)
分词作用
互联网绝大多数应用都需要分词,典型应用实例 汉字处理:拼音 汉字处理:拼音输入法、手写识别、简繁转换 …告推荐、内容监控 … 语音处理: 语音处理:语音识别、语音合成 … …
w w
P (W | O ) = max ∏ P ( wt | wt −1 , ot )
w t =1
T
W:分词结果 O:待分词文本
生成式分词(Cont.)

tiktoken中文分词原理

tiktoken中文分词原理

tiktoken中文分词原理1.概述在自然语言处理(NL P)领域中,中文分词是一个重要的任务,它的目标是将连续的中文字符序列切分成有意义的词语。

ti kt ok en是一个开源的中文分词工具,它基于最大匹配算法和字典树的方法来实现中文分词。

本文将介绍t ik to ke n中文分词工具的原理及其运行过程。

2.最大匹配算法最大匹配算法是一种常用的中文分词算法,它基于词典中最长的词汇进行切分。

t ik to ken利用了最大匹配算法来进行分词。

具体而言,t ik to ken首先将待切分的句子按照最大切分长度划分为几个子句。

然后,它从每个子句的起始位置开始,逐渐增大切分长度,不断寻找匹配的词汇。

当找到匹配的词汇时,t ik to ke n将该词汇作为一个分词结果,并将切分位置移动到下一个子句的起始位置。

这个过程重复进行,直到所有子句都被分词为止。

最大匹配算法的一个关键问题是如何确定最大切分长度。

t ikt o ke n使用了统计信息和机器学习的方法来动态地确定最佳的最大切分长度,以提高分词的准确性。

3.字典树字典树(Tr ie)是一种树状数据结构,它能够高效地存储和查找字符串。

ti kt ok en利用了字典树来储存中文词汇信息,以支持最大匹配算法的快速匹配过程。

字典树的每个节点代表一个字符,从根节点到叶节点的路径表示一个完整的词汇。

ti kt ok e n在分词过程中通过比对待切分句子的字符与字典树节点的字符,来确定最大匹配的词汇。

4. ti ktoken的运行过程t i kt ok en的运行过程可以概括为以下几个步骤:4.1构建字典树t i kt ok en首先从一个大型的中文词汇库中提取出所有的词汇,并构建字典树。

这个字典树将作为最大匹配算法的匹配模型。

4.2切分子句t i kt ok en将待切分的句子按照标点符号或其他符号进行划分,形成若干个子句。

每个子句都将作为最大匹配算法的输入。

4.3最大匹配对于每个子句,ti kt o ke n从起始位置开始,逐渐增大最大切分长度,利用字典树进行匹配。

中文分词算法在专利文献中的应用研究

中文分词算法在专利文献中的应用研究作者:宋立峰来源:《海峡科学》2011年第07期[摘要]介绍了专利文献中中文分词的基本方法,主要分析了基于词类的错误驱动学习方法、条件随机场方法、期望最大值方法在分词方面的应用,并进行了对比实验。

[关键词]专利文献中文分词1引言专利文献包含全世界科学技术信息内容的90%[1],其中不仅包含技术也包括法律和经济信息,除了某些需要保密的领域,如军工行业,专利文献涉及了绝大部分工程技术领域,如果能有效利用这些信息,就可以避免重复研发,减少开发时间,降低开发成本,也可以有效防止侵犯他人合法权益,降低企业风险。

怎样才能高效地利用海量专利文献信息,从这些信息中查找到需要的资料,解决这个问题的关键是对专利文献进行精确快速的检索,而进行检索的最重要一步是对海量专利文献进行索引,没有索引就无法快速精确地检索到需要的信息,索引的基础则是对文献进行分词,分词的质量决定了索引的质量,一种好的分词方法可以大幅提高文献的查准率。

中文分词有两块难点,一个是分词的歧义,一个是未收录词的判断[2],专利文献的用词,有其自己的特点,存在着大量未收录的专业术语,而歧义词语仅占很小的一部分,在分词的时候必须重点考虑专业术语的切分,因为其对整体性能的影响是歧义影响的5倍[3]。

下节将重点描述这方面的内容。

2专利文献的用词特点我们首先需要研究专利文献的用词特点,通过了解掌握这些特点,可以利用这些规律,更好地进行分词处理,提升分词效率。

专利文献用词有以下几个特点:2.1具有专利文献特点的一些相对高频的词语,比如“本发明”、“特征”、“方法”、“一种”等,大部分的专利都会涉及这些词语。

2.2由于多数专利文献带有很强的专业性,有大量未登录在词典的词语,比如“二十二碳六烯酸”、“星地应答机”等技术词汇,很难进行正确的分词,这点很难解决。

2.3专利文献中为了表达一种复杂的功能或仪器,往往带有多个定语,比如“双测向多臂井径测量仪器”、“高精度非垂直截面可旋转测量仪器”等等,这给我们分词带来了一定的困难。

中文分词入门之最大匹配法

中文分词入门之最大匹配法发表于2009年01月12号由52nlp中文分词在中文信息处理中是最最基础的,无论机器翻译亦或信息检索还是其他相关应用,如果涉及中文,都离不开中文分词,因此中文分词具有极高的地位。

中文分词入门最简单应该是最大匹配法了,当年师兄布置给我的第一个学习任务就是实现最大匹配法的分词算法(正向、逆向)。

记得当时对自己参考学习最有帮助的是北大詹卫东老师“中文信息处理基础”的课件和源程序,不过他实现的是mfc程序,词表存储在数据库里。

自己实现时用纯c++实现,利用hash_map 存储词表。

这里我介绍一下相关的知识和一个简单的程序示例,部分参考自詹老师的讲义。

正向最大匹配法算法如下所示:(注:以上最大匹配算法图来自于詹老师讲义)逆向匹配法思想与正向一样,只是从右向左切分,这里举一个例子:输入例句:S1=”计算语言学课程有意思” ;定义:最大词长MaxLen = 5;S2= ” “;分隔符= “/”;假设存在词表:…,计算语言学,课程,意思,…;最大逆向匹配分词算法过程如下:(1)S2=”";S1不为空,从S1右边取出候选子串W=”课程有意思”;(2)查词表,W不在词表中,将W最左边一个字去掉,得到W=”程有意思”;(3)查词表,W不在词表中,将W最左边一个字去掉,得到W=”有意思”;(4)查词表,W不在词表中,将W最左边一个字去掉,得到W=”意思”(5)查词表,“意思”在词表中,将W加入到S2中,S2=” 意思/”,并将W从S1中去掉,此时S1=”计算语言学课程有”;(6)S1不为空,于是从S1左边取出候选子串W=”言学课程有”;(7)查词表,W不在词表中,将W最左边一个字去掉,得到W=”学课程有”;(8)查词表,W不在词表中,将W最左边一个字去掉,得到W=”课程有”;(9)查词表,W不在词表中,将W最左边一个字去掉,得到W=”程有”;(10)查词表,W不在词表中,将W最左边一个字去掉,得到W=”有”,这W是单字,将W 加入到S2中,S2=“ /有/意思”,并将W从S1中去掉,此时S1=”计算语言学课程”;(11)S1不为空,于是从S1左边取出候选子串W=”语言学课程”;(12)查词表,W不在词表中,将W最左边一个字去掉,得到W=”言学课程”;(13)查词表,W不在词表中,将W最左边一个字去掉,得到W=”学课程”;(14)查词表,W不在词表中,将W最左边一个字去掉,得到W=”课程”;(15)查词表,“意思”在词表中,将W加入到S2中,S2=“课程/ 有/ 意思/”,并将W从S1中去掉,此时S1=”计算语言学”;(16)S1不为空,于是从S1左边取出候选子串W=”计算语言学”;(17)查词表,“计算语言学”在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ 有/ 意思/”,并将W从S1中去掉,此时S1=”";(18)S1为空,输出S2作为分词结果,分词过程结束。

中文bpe分词

中文bpe分词(原创实用版)目录1.中文分词的重要性2.BPE 分词方法的原理3.BPE 分词方法的优势4.BPE 分词方法的实际应用5.总结正文一、中文分词的重要性中文文本与英文文本在处理上存在很大差异,其中一个关键因素就是中文没有明确的词语边界。

英文文本通过空格可以清晰地划分单词,而中文文本则需要进行分词处理,将连续的文本切分成有意义的词汇单元。

中文分词在自然语言处理、信息检索、文本挖掘等领域具有重要意义。

二、BPE 分词方法的原理BPE(Backward Prefix-suffix)分词方法是一种基于字典的分词方法。

该方法通过遍历输入文本,动态构建一个有向无环图(DAG),并利用该图进行分词。

具体原理如下:1.构建字典:首先根据输入文本构建一个字典,存储每个字符或词语的出现频率及其前缀和后缀信息。

2.遍历输入文本:从输入文本的开始位置开始,依次将字符或词语添加到字典中,并更新它们的前缀和后缀信息。

3.动态规划:利用字典中的信息,通过动态规划算法计算每个字符或词语的分词概率。

4.切分词语:根据分词概率,从输入文本的末尾开始,向前切分出有意义的词语。

三、BPE 分词方法的优势BPE 分词方法具有以下优势:1.能够处理未登录词:BPE 分词方法可以识别字典中不存在的词语,如新词、专有名词等。

2.切分精度高:BPE 分词方法可以根据词语在文本中的上下文信息进行切分,从而获得较高的切分精度。

3.鲁棒性好:BPE 分词方法能够处理各种复杂的输入文本,如包含歧义、重复、噪音等。

四、BPE 分词方法的实际应用BPE 分词方法在许多自然语言处理任务中都有广泛应用,如文本分类、情感分析、机器翻译等。

通过 BPE 分词方法,可以有效提高这些任务的性能和准确性。

五、总结作为一种基于字典的中文分词方法,BPE 分词方法具有处理未登录词、切分精度高、鲁棒性好等优势。

基于改进的正向最大匹配中文分词算法研究


基 于 理解 的分 词 方法 不 仅 要求 有 很好 的分 词 词典 , 而且还 需要 加进 语义 和句 法 的分 析 。通过 获
文文本 中词与词之间却没有很明显的标记 , 都是连 续 的字符串, 因而中文信息处理的首要解决的问题 就是 怎样进 行 中 文分 词 。 正 向最 大 匹 配 法是 一 种
文章编号
10 5 6 (0 10 0 1 0 0 0— 2 9 2 1 )5— 12— 4
基 于 改进 的 正 向最 大 匹配 中文 分 词 算 法研 究
王 惠仙 , 龙 华
( 昆明理工大学信息工程与 自动化学 院 , 云南 昆明 6 05 ) 50 1

要: 中文 自动 分词技 术在 中文信 息 处 理 、 b文 档 挖 掘 等 处理 文 档 类研 究 中是 一 项 关键 技 We
第 5期
王惠仙 等 : 于改进 的正向最大匹配 中文分词算法研究 基
文本 进行 分 词操作 , 到准 确有 效 的切分 中文 文档 达
的 目标 。
的词 时 , 只能 取 出其 中 的 5个 字去 词 典 里 匹 配 , 例 如“ 共产 主 义 接 ” 显 然 词典 里 不 可 能 存 在 像 这 样 , 的词 。因此 就 无 法 准 确 的 划 分 出 像 “ 产 主 义 接 共 班人 ” 这样 长 度大 于 5的 词 。如果 词 长 过 长 , 率 效
词 方法 ¨ 。 J 1 1 基于词 典 的分词方 法 . 基 于 词典 的分 词 法是 广 泛 应用 的一 种 的机 械
基 于统 计 的 分词 方 法 主要 是 用来 消 除 分词 过 程 中产生 的歧 义现 象 , 即消歧 。此方 法 主要靠 一个 或者 多个 具有 代表 性 的规 模 相对 小 的训 练语 料 库
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1最大匹配法(Forward Maximum Matching method, FMM法):选取包含6-8个汉字的符号串作为最大符号串,把最大符号串与词典中的单词条目相匹配,如果不能匹配,就削掉一个汉字继续匹配,直到在词典中找到相应的单词为止。

匹配的方向是从右向左。

逆向最大匹配法(Backward Maximum Matching method, BMM法):匹配方向与MM法相反,是从左向右。

实验表明:对于汉语来说,逆向最大匹配法比最大匹配法更有效。

给定串:我是中国人从左往右最长匹配优先:读入‘我’,一个字当然是一个词再读入‘是’,查表找‘我是’,不在表中,则‘我’是一个独立的词,‘是’还要下一步判断读入‘中’‘是中’肯定不在表内,那‘是’也是一个独立的词,‘中’还要下一步判断读入‘果’,‘中国’在表内再读入‘人’,’中国人‘也在表内,此时全部读完,’中国人‘是一个次结果就是:我是中国人从右往左也类似最近折腾毕业论文,搞得人没心情写blog了。

于是觉得不如把毕业论文里的东西贴出来当blog算了。

这里主要介绍了我自己的中文分词算法,我觉得它比现在开源代码比较多的中文匹配法要好多了。

这里的内容没有任何背景知识啥的,毕竟论文里的背景知道我也是从网上粘贴的,呵呵!因此这篇文章的内容可能适合做搜索引擎的人。

如果要了解中文分词算法在搜索引擎中的重要性,或者最大匹配法的思想与过程,请去网上搜吧,资料还是蛮多的。

1.1.1 最大匹配法分词的缺陷尽管最大匹配法分词是常用的解决的方案,但是无疑它存在很多明显的缺陷,这些缺陷也限制了最大匹配法在大型搜索系统中的使用频率。

最大匹配法的问题有以下几点:一、长度限制由于最大匹配法必须首先设定一个匹配词长的初始值,这个长度限制是最大匹配法在效率与词长之间的一种妥协。

我们来看一下以下两种情况:(1)词长过短,长词就会被切错。

例如当词长被设成5时,也就意味着它只能分出长度为5以下词,例如当这个词为“中华人民共和国”长度为7的词时,我们只能取出其中的5个字去词库里匹配,例如“中华人民共”,显然词库里是不可能有这样的词存在的。

因此我们无法下确的划分出“中华人民共和国”这样的词长大于5的词。

(2)词长过长,效率就比较低。

也许有人会认为既然5个字无法满足我们的分词要求,何不将词长加大,例如加到10或者100,毕竟这个世界超过100个字长的词还是很少见的,我们的词长问题不就解决了?然而当词长过长时,我们却要付出另一方面的代价:效率。

效率是分词算法、甚至是整个算法理论体系的关键,毕竟算法书里所有的高深的查询或排序算法都是从效率出发的,否则任何笨办法都可以解决分词效率低的问题。

设想到我们把字长设成100个词时,我们必须将词从100开始一直往下匹配直到找到要查的字为止,而我们大多数词的字长却只有两三个字,这意味着前97次的匹配算法是徒劳的。

因此我们必须要在词长与效率之间进行妥协,既要求分词尽量准确,又要求我们的词长不能太长。

尽管我们可能找到这样一个比较优化的字长值使两者都达到比较满足的状态,但是毕竟不管我们怎么设定,总会有些太长词分出来,或者带来效率问题。

二、效率低效率低是最大匹配法分词必然会来的问题。

即使我们可以将字长设成相当短,例如5(注意,我们不能再缩短字长了,毕竟字长为5以上的词太多了,我们不能牺牲分词的准确),然而当我们的大数词长为2时,至少有3次的匹配算法是浪费掉的。

回想一下算法书里提到的最简单的字符匹配与KMP算法之间天差地别的效率,我们知道通过某种方法,这些浪费的掉的匹配时间是可以补回来的。

三、掩盖分词歧义中文是如此复杂的语言,它的表达方式如此之多,语法文法如此精妙,机械的电脑是很难理解这么复杂的语言,因此它必然会带来歧意性,以下是两个简单的例子:A.“有意见分歧” (正向最大匹配和逆向最大匹配结果不同)有意/ 见/ 分歧/有/ 意见/ 分歧/B.“结合成分子时” (正向最大匹配和逆向最大匹配结果相同)结合/ 成分/ 子时/由于词的歧义性使我们在使用最大匹配法分词会产生错误的结果,而且使用正向分词与逆向分词往往会产生截然不同的结果。

尽管使用回溯法或计算计算词的使用频率,可以使出现歧义的可能性减少,但是我们知道,这样的结果是不可避免的,因为中文的变化实在太多了。

四、最大匹配的并不一定是想要的分词方式最大匹配法基于的理念是找到最大的匹配词,但有的时候除了最大匹配词外,我们也可能只需要这个词的一部分。

例如“感冒解毒胶囊”是一个完整的词,按照最大匹配法我们无法对它进行拆分了,这样我们输入“感冒”的时候就根本搜不到我们需要的词。

这是我们需要的吗?做为生产这种药的厂商,它肯定希望用户输入“感冒”甚至“解毒”,我们都能查到对应的内容。

1.2 设计自己的中文分词算法1.2.1 设计目标基于对分词算法的理解和对最大匹配法分词的分析,我们知道我们必须提出不同的解决方案,使分词算法的效率、分词的长度限制甚至歧义处理上得到提高。

因此我们提出了如下的设计目标:一、高效中文分词算法必须要高效,毕竟效率对于搜索引擎的重要性是不言而喻的。

而且我们面对的是海量的数据,而不是一篇几百字或几千字的文章,效率的差别的影响可能会使最后运行效率差几个小时甚至几天。

因此我希望我们设计的算法一定要比最大匹配法高,毕竟我们已经常看到最大匹配法的很多次匹配都是浪费在无用功上了,肯定有办法把这些浪费的时间节省回来。

二、无长度限制最大匹配法的长度限制真是很讨厌的事,我们很难找到词长与效率的之间的平衡。

为什么我们需要长度的限制?为什么我们不能设计出任何词长的词(只要词库中存在)都可以分出来?三、歧义包容我们相信长度限制的问题总是可以解决的,因为虽然长度限制这个问题很难,但是它是有规律可循的,它是严谨的科学。

但是当我们碰到中文歧义时,我知道不管我们怎么努力,它仍然是不可能彻底解决的。

因为中文实在太博大精深了,即使有极强的人工智能和机器学习功能,这样的错误仍然是难以避免。

既然无法避免?我们为什么不换一个角度去考虑?我们为什么不可以将出现歧义的各种可能性都包含进去,作为分词的参考。

例如上述的“有意见分歧”的两种分词方法:有意/ 见/ 分歧/有/ 意见/ 分歧/为什么我们不能把这样两种结果都拿来分词呢?毕竟分词的目的是为了搜索,而不是为了教小孩读出。

如果把两种分词的可能性都告诉搜索引擎,搜索引擎会很高兴的,因为这下不管是“有意”还是“意见”,它都可以搜到了。

这就是我提出来另一个目标:歧义包容。

1.2.2 算法的突破口—词库虽然我们的目标已经确定下来了,但是要想出一个更好的算法却是非常难的事。

毕竟算法需要的是灵感与突发奇想,这与系统的架构设计和面向对象的设计与编者编码刚好是相反的,象设计模式或重构这样的东西我们需要的实践、总结、再实践。

而算法需要的却是当我们在山重水复疑无路的时候会换个角度思考。

但是分词算法的突破口在哪里呢?我们必须要有一个词库,我们必须将全文中的词与词库去匹配,这一切都是不可避免的。

真正要改善是就是我们的匹配过程,我们要减少匹配过程中的浪费,我们要解决匹配中的词长限制。

但是我们有什么办法呢?每次的匹配我们必须要去词库中查找一次。

怎么改善这样的做法?我们总是把优化的思路定格在更好的匹配算法,更好地处理词条和全文。

但是真正束缚我们的却是词库!是基于关系数据库的词库,我们需要的对词库的改造,我们要让我们的词库更适合用于匹配与分词!这是几十年来关系数据库带给我们的思维:我们查找的词是数据库的某条记录,通过表格与关系代数,我们总能找到这个词。

但是正是关系数据库的这种思维束缚着我们,关系数据库让我们的数据结构及关联表达得清楚又简单,并使某些查询的效率变得很高。

但是这不适用于中文分词,有的时候退到几十年前流行的数据库模型也许更适合。

这就是层次数据库。

我们要做的是将关系数据库的词按字打散,并存放到层次数据库中。

以下就是一个示例:红色的字表示树上面的字串是可以单独组成一个词的,例如“感冒”它本身是词库里可以找到的词,所有红色的表示的是终止符。

而黄色则表示树上面的字串是无法单独成词的,例如“感冒解”是不存在的词。

真的很奇妙,词库经过这样的改装后,所有的匹配的思维都变掉了。

任何一个句子都会打散成单字去与树状结构的单字去匹配,词的长度变成了树的高度,每一次的匹配变成了树的遍历,而这种遍历的效率竟然都是线性的!1.2.3 中文分词算法设计有了以上的中文词库后,我们分词算法设计就水到渠成的。

首先我们来看一下分词的步骤:(1)首先将要分的全文按标点符号打散成一个一个的句子。

这算是预处理的一个步骤,目的是让我们处理的句子短,效率更高。

毕竟中间有标点符号的词是不存在的。

(注:真正实现时我们是基于lucene的SimpleAnalyzer来做的,因为SimpleAnalyzer本身就是为了将全文打散成句子,因此我们没必要耗费体力去实现这一步)。

(2)我们开始将要处理的句子在树状结构中遍历,如果找到匹配的就继续,如果遇到红色的终止符,我们就发现这个词是一个完整的词了,这样我们就可以把这个词作为一个一个分词了。

(3)从分词后的下一字开始继续做步骤2这样的遍历,如此循环往复就将词分完了。

可以看到,我们字符匹配效率几乎是线性的!我们所要做的只是取出每一个字去树上找到相应的匹配,每次的匹配代价都是O(1)(如果词库用Hash表的话),这样匹配下来的时间复杂度就是字符串本身的长度!对于一个长度为n的字符串来说,它的分词复杂度是O(n)。

而最大匹配的平均复杂度是O(n2)。

当然我们这里没有考虑歧义包容与分支处理等情况,但即使加上这些我们复杂度仍然是有限的。

1.2.4 中文分词算法的实现细节一、建立词库有了改装词库的基本思想后,建立词库的步骤变得很简单,但是仍然会有好多的细节需要注意。

首先是词库的保存格式。

现在最常用的保存数据的方式当然是关系数据库,其次是文件系统中的二进制文件。

显然关系数据库对于我们并不适用,而自定义的二进制文件则实现起来比较困难,而且读写的效率也会有问题。

因为我们想到了最简单的方法是利用java的serialization的功能,把整个内存中的树状结构直接序列化成磁盘的文本文件是最方便的!而且读写的效率也会相当的高。

第二个问题是树的父子节点的导航。

我们的树并不是一颗二叉树,父亲的子节点会有好多!尤其是第一层,我们会把词库中所有的首字都取出来作为根节点的子节点,这意味着如果首字有4000个的话,根节点就有4000个儿子。

当然随着树层数的增多,节点的儿子数也会减少,毕竟以“感冒”开头的词在整个词库也只有四十多个,而以“感冒清”开头的词则只有两三个了。

这意味着如果设计得不合理,我们树的匹配遍历过程并不完全是线性的。

相关文档
最新文档