文章目录

  • 中文信息处理核心技术
  • 中文分词
    • NLP任务层次
    • 一、为什么分词?
    • 二、分词为什么难?
    • 三、常见的分词系统
    • 四、几种分词方法
      • 1. 基于词表的分词
        • 1.1 主要思想
        • 1.2 最大匹配分词法关键问题
        • 1.3 最大匹配分词法的特点和缺点
        • 1.4 早期解决歧义的方法
        • 1.5 早期解决未登录词识别的方法
      • 2.基于统计语言模型的分词
        • 2.1 统计语言模型和Markov独立性假设
        • 2.2 工程细节问题
        • 2.3 零概率问题
        • 2.4 Zipf定律
        • 2.5 得到概率最大的分词词串
          • (1)穷举法(效率低)
          • (2)动态规划(引入累积概率变量与最大左邻词)
        • 2.6 基于统计语言模型分词的评价
      • 3. 基于字标注分词(主要解决未登录词问题)
    • 问题一:词的可计算性定义是如何完成的?
      • 1.词的语言学定义
      • 2.早期信息自动化处理阶段
      • 3.基于统计语言学的处理方法(完成了词的可计算性定义)
    • 问题二:未登录词对分词精度的影响

中文信息处理核心技术

  1. 词层面的技术:

    • 分词
    • 词性标注
  2. 句子层面的技术
    • 句法分析:完全句法分析、依存句法分析
    • 句义分析:语义角色标注
  3. 篇章层面的技术
    • 句子关系分析
    • 指代消解

中文分词

NLP任务层次

Tockenization:英文只把最基本的词标注

一、为什么分词?

  1. 词是汉语里表达意义的基本单位,是有意义的最小语法单位

    • 词:单字词、多字词,最常见的是二字词。
    • 平均词长:24个汉字
  2. 分词是许多NLP任务的基础。
    • 如:机器翻译、信息抽取、自动问答、信息检索…… (机器翻译(MT)中,如果不分词,无法翻译。大学:big study? )

二、分词为什么难?

  1. 歧义:一个字符串,对应多种切分形式。
  2. 未登录词(out of vocabulary ,OOV),包括:
    • 命名实体:人名、地名、机构名等(如:北大、
      高检……)。同时,汉语实体没有词形变化(英语可能首字母会大写)。
    • 新词:不断产生,不断消失 (41%新词会留存)

三、常见的分词系统

  1. 中科院计算所分词系统:ICTCLAS
  2. NLPIR-ICTCLAS
  3. 清华大学分词系统:THULAC
  4. LTP平台(哈工大社会计算与信息检索研究中心)
  5. Jieba分词系统
    • 做最好的 Python中文分词组件
    • 开源:https://github.com/fxsjy/jieba
    • 主要算法:基于统计的最短路径词图切分方法,近期
      内置了预训练模型+大规模蒸馏的前沿分词模型。
    • 三种分词模式:
      精确模式:试图将句子最精确地切开,适合文本分析;
      全模式:把句子中所有的词都扫描出来, 速度非常快,但不能解决歧义;
      搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎。
  6. STANFOORD CORENLP(斯坦福大学推出的工具)
    • 可以支持多种语言。
    • 算法核心:基于CRF模型。
    • 开源:https://stanfordnlp.github.io/CoreNLP/

四、几种分词方法

分词目标:输入:一个字串,输出:一个带分隔符的词串。

系统评价指标:

  • 召回率(Recall):$ R = {输出的正确词数}/测试集中总词数$
  • 精确率(Precision):R=输出的正确词数/输出总词数R = {输出的正确词数}/输出总词数R=输出的正确词数/输出总词数
  • F测度(F-measure):F=2PR/(P+R)F=2PR/(P+R)F=2PR/(P+R)

下面是两个系统对给定句子的分词结果:

输入:严守一把手机关了
标准答案:严守一 把 手机 关 了
系统1输出:严守 一把手 机关 了
系统2输出:严守一 把手 机关 了

系统1的召回率为1/5 ,精确率为 1/4。
系统2的召回率为 2/5 ,精确率为 1/2 。

1. 基于词表的分词

1.1 主要思想

把一个句子从左向右扫描一遍,

  • 遇到字典里的词就标识出来;
  • 遇到复合词(比如 “北京大学”)就找最长的词匹配;
  • 遇到不认识的字串就分割成单字词。

最简单的分词法,又称最大匹配法分词或机械分词法。(正向最大匹配法错误率略高于逆向最大匹配法 )

1.2 最大匹配分词法关键问题
  1. 预先建立词表(知识库)(覆盖率和准确性非常重要)
    词的定义是什么?怎么收词?
    新词和名实体词是否要收录?收录多少?
  2. 最大词长如何确定?
    词长过短,长词会切错
    词长过长,效率比较低。
1.3 最大匹配分词法的特点和缺点
  1. 复杂性不高,可以解决7、8成的问题。
  2. 大词(复合词)优先。
    但是各种应用不同,分词的颗粒度也需要不同。如:MT中,粒度大易于处理;信息检索(IR)中,粒度小,查全率高。
    好的处理方法:找到嵌套结构,保留多个结果。
  3. (缺点)没有考虑上下文,不能解决歧义
  4. (缺点)没有解决未登录词的识别
1.4 早期解决歧义的方法

与分词过程分离,单独进行。
(1)发现歧义:寻找有多种切分可能的字串。
方法:正向最大匹配和逆向最大匹配结果不一致的地方。
(2)基于规则解决歧义:用规则总结歧义现象,但不成功。

1.5 早期解决未登录词识别的方法

与分词过程分离,单独进行。
• 对于不同种类的命名实体,分别击破识别。如人名分为:汉族式、少数民族式、欧美式、日韩式和其他人名译名。
• 新词:?没有好的处理方法
基于词表分词这种思想未登录词识别效果不高!

2.基于统计语言模型的分词

2.1 统计语言模型和Markov独立性假设
  1. 建模

上个世纪90年前后,清华大学郭进博士用统计语言模型成功解决分词歧义问题,将分词错误率降低一个数量级。

给定一个句子S,由词组成,估计句子S出现在文本中的概率P(S)

P(S)=P(w0)P(w1∣w0)P(w2∣w0w1)…P(wn−1∣w0w1…wn−2)\large P(S) = P(w_0)P(w_1|w_0)P(w_2|w_0w_1)…P(w_{n-1}|w_0w_1…w_{n-2})P(S)=P(w0​)P(w1​∣w0​)P(w2​∣w0​w1​)…P(wn−1​∣w0​w1​…wn−2​)

P(w0)P(w_0)P(w0​)表示第一个词出现的概率,P(w1∣w0)P(w_1|w_0)P(w1​∣w0​)表示在已知第一个词的前提下,第二个词出现的概率,以此类推,但如果n很大的话,要取决于前面的所有词,可能性太多,无法实现。所以引入Markov独立性假设(规定某个词的概率只与它之前有限个词有关)

  • 一元模型
  • 二元模型,S出现的概率就变为:
    P(S) = P(w0)P(w1|w0)P(w2|w1)…P(wn-1|wn-2)
  1. 计算概率

  2. 概率最大化

    最好的分词方法就是是P(S)最大(句子在文本中出现的概率最大)

    S=argmaxP(Si)S = arg maxP(S_i)S=argmaxP(Si​)

2.2 工程细节问题

实际中的一些处理:在log空间下计算概率,因为乘很可能导致跌破下界,所以将乘变为加法

(1) 必须建立分词语料库

数据类型要符合面对的问题领域
规模要足够
质量可靠:保证一致性(前后对同一个词的切分要一样)或准确率。
建立方法:基于词表的方法+人工校对。

(2)参数估计——如何估计 P(wi∣wi−1)P (wi|wi-1)P(wi∣wi−1)和Pwi)Pwi)Pwi)?

经过简单推理

P(wi∣wi−1)=P(Wi,Wi−1)P(Wi−1)P\left(w_{i} \mid w_{i-1}\right)=\frac{P\left(W_{i}, W_{i-1}\right)}{P\left(W_{i-1}\right)} P(wi​∣wi−1​)=P(Wi−1​)P(Wi​,Wi−1​)​

P(wi)=Num(Wi)NumP ( w _ { i} ) = \frac { N u m ( W_i ) } { N u m } P(wi​)=NumNum(Wi​)​

2.3 零概率问题

问题:
语料库中,如果Num(wi)=0Num(w_i)=0Num(wi​)=0,则P(wi)=0P(w_i)=0P(wi​)=0,我们称模型“不平滑”,可以说,零概率问题是统计语言模型无法回避的。

解决方法:

  1. 增加语料规模?不能完全解决。
  2. 参数平滑

加1(add−one)平滑:P(wi∣wi−1)=P(Wi,Wi−1)+1P(Wi−1)+∣V∣加1(add-one)平滑 :P\left(w_{i} \mid w_{i-1}\right)=\frac{P\left(W_{i},W_{i-1}\right)+1}{P\left(W_{i-1}\right)+|V|} 加1(add−one)平滑:P(wi​∣wi−1​)=P(Wi−1​)+∣V∣P(Wi​,Wi−1​)+1​

加k(add−k)平滑:P(wi∣wi−1)=P(Wi,Wi−1)+kP(Wi−1)+∣V∣加k(add-k)平滑:P\left(w_{i} \mid w_{i-1}\right)=\frac{P\left(W_{i},W_{i-1}\right)+k}{P\left(W_{i-1}\right)+|V|} 加k(add−k)平滑:P(wi​∣wi−1​)=P(Wi−1​)+∣V∣P(Wi​,Wi−1​)+k​

  1. 重新估计(主要方法:古德-图灵估计)
    对于没有看见的事件,不认为其发生的概率为0,而是从概率总量中分配一个很小的比例给予这些事件
2.4 Zipf定律

20%的词占据了80%的出现次数。只有少数高频常用词,大多数词很少使用。

2.5 得到概率最大的分词词串
(1)穷举法(效率低)

穷举所有可能的分词词串,并计算其概率。然后得到最大概率输出。

效率低的解决办法:动态规划

(2)动态规划(引入累积概率变量与最大左邻词)

动态规划,保留现阶段最好结果。

引入累积概率变量与最大左邻词,全部计算完之后回溯

以P′(wi)P'(w_i)P′(wi​)表示累计概率

P′(w0)=P(w0)P'(w_0) = P(w_0)P′(w0​)=P(w0​)

P′(wi)=P′(wi−1)∗P(wi)P'(w_i) = P'(w_{i-1}) * P(w_i)P′(wi​)=P′(wi−1​)∗P(wi​)

如果wi有若干个左邻词wj, wk, …,其中累计概率最大的候选词称为wi的最佳左邻词

最大概率分词算法——基于一元模型

  1. 对字串S,从左到右取出全部候选词W1,W2,Wi,········,Wn
  2. 词典中查出每个候选词的概率值P(w),并记录其全部左邻词;
  3. 计算每个候选词的累计概率,比较得到其最佳左邻词
  4. 如果当前词Wn是字串S的尾词,且累计率P(wn)P(w_n)P(wn​)最大,则Wn就是S的终点词;
  5. 从Wn开始,从右到左依次将每个词的最佳左邻词输出,即为S的分词结果。
2.6 基于统计语言模型分词的评价
  1. 考虑了上下文,输出是基于概率的整体最优结果,自动解决了歧义问题
  2. 通过语料库与词表,完成了词的可计算性定义
  3. 局限:
    • 无法解决语言的长距离依赖。
      The computer which I had just put intothe machine room on the fifth floor crashed.
    • 未登录词仍然没有解决。

3. 基于字标注分词(主要解决未登录词问题)

把分词过程视为字在词中的位置标注问题,是对字的构词能力进行建模

  1. 基于字标注的分词:把分词过程视为字在词中的位置标注问题,是对字的构词能力进行建模

    若标注标准为:B :词首,M :词中,E:词尾,S:单独成词 以往的分词结果:
    / 上海/ 计划/ 到/ 本/ 世纪/ 末/ 实现
    / 人均/ 国内/ 生产/ 总值/ 五千/美元/ 。
    字标注形式的结果:
    上/B 海/E 计/B 划/E 到/S 本/S 世/B 纪/E
    末/S 实/B 现/E 人/B 均/E 国/B 内/E 生/B 产/E
    总/B 值/E 五/B 千/E 美/B元/E。/ S

  2. 重要优势:

    • 能平衡地看待词表词和未登录词的识别。
      都用统一的字标注过程来实现。不必专门强调词表词信息,也不用专门设计特定的未登录词识别模块。
    • 使分词系统的设计大大简化。

问题一:词的可计算性定义是如何完成的?

1.词的语言学定义

能够独立运用、有意义的最小语法单位。(抽象的,无法用于计算机进行计算)

2.早期信息自动化处理阶段

此阶段词的定义:分词规范+静态词表

  • 1993年,推出国家标准《信息处理用现代汉语分词规范》,按词类分别给出了各类分词单位的定义。在许多地方把”结合紧密、使用稳定”视为分词单位的界定准则。
  • 建立了总词数为92843条的《信息处理用现代汉语分词词表》

局限:

  • 词表定义不灵活。有些词可有多种切分形式。如:有褒有贬…
  • 分词单位的界定准则模棱两可,不可操作,或不可计算。无论对词表建立、分词系统的实现还是评测都造成极大的困惑。

评测机制(九十年代的863、973评测 ):

  • 组织者不公布相关词表、语料
  • 评测结果引入评测人员的主观判断,系统输出结果允许有一定的“柔性”。容易引入心理词(不是词表词,也不是新词),如:规范化,取决于……
  • 弊端:标准答案不统一、评测结果不可比

对文本中的词,人都没界定清楚,让计算机去做自动分词不是勉为其难吗?
——黄昌宁,赵海,中文分词十年回顾,中文信息学报,2007,

3.基于统计语言学的处理方法(完成了词的可计算性定义)

分词规范+词表+分词语料库

(1)分词规范、词表主要用于语料标注,要制作高质量的分词语料库,分词规范和词表缺一不可。

(2)评测中有多家机构提供语料库 (不同单位的语料库,分词标准可以不同。但保证每种语料库内部分词标准一致 )

优点:通过不同标准的分词语料,完成了“词”的可计算性定义

问题二:未登录词对分词精度的影响

人们通常把未登录词和分词歧义并列为影响分词精度的两大因素 ,但实际上未登录词对分词精度的影响远大于歧义

中文信息处理(二)—— 分词相关推荐

  1. 中文信息处理—已分词标注语料的抽取词表和文本还原

    文章目录 任务 语料分析 思路分析 一.任务详解+代码 抽取词表+统计词频 1.删除多余文本 2.统计词频 二.形成原始文本 任务 针对人民日报语料,编写程序: (1)抽取词表 (2)统计总词数.不同 ...

  2. 计算机信息处理技术的发展历程,中文信息处理技术发展简史.docx

    中文信息处理技术发展简史 张华平 (中国科学院计算技术研究所软件实验室北京100080) E-mail: zhanghp@sof[ware? Homepage: ; hMp://pipy_ 摘要:真正 ...

  3. 中文信息处理——纵览与建议

    中文信息处理--纵览与建议 (2007-04-11 22:25:49) 转载▼ 分类: 技术视野 2004年10月写的一个材料. ----------------------------------- ...

  4. 中文开源汉语分词工具

    本文转载自:http://www.scholat.com/vpost.html?pid=4477 由于中文文本词与词之间没有像英文那样有空格分隔,因此很多时候中文文本操作都涉及切词,这里整理了一些中文 ...

  5. 中文信息处理的主流技术是什么?

    中文信息处理的主流技术是什么? 从20世纪50年代初机器翻译课题被提出算起,自然语言处理(NLP)的研发历史至少也有50年了.90年代初,NLP的研究目标开始从小规模受限语言处理走向大规模真实文本处理 ...

  6. 信息编码与计算机语言,中文信息处理,是用计算机对中文(包括口语和书面语)进行转换、传输、存贮、分析等加工的科学。...

    题目所在试卷参考答案: 参考答案 一. 1.D 2.C(A.曼延-蔓延,消蚀-销蚀:B.博杀-搏杀:D.暗然-黯然,愧叹-喟叹) 3.A(①协调:配合得适当,多指部门的配合:谐调:多指物理方面的调制和 ...

  7. 第一章中文信息处理概述

    1.为什么学习中文信息处理 (1)汉语成为一种新的强势语言而被世人瞩目,汉语里解所涉及的科学问题让国际计算语言学界无法回避. (2)汉语使用者拥有的巨大市场令国际企业界不敢轻视. (3)中文信息处理所 ...

  8. java 校验姓名只能包含中英文_java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数...

    package com.sangedabuliu.www; import java.util.regex.Matcher; import java.util.regex.Pattern; public ...

  9. 哈工大中文信息处理_【NLP】哈工大车万翔教授 自然语言处理NLPer的核心竞争力是什么?19页ppt...

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要4分钟 跟随小博主,每天进步一丢丢 整理:专知 导读 自然语言处理是当前人工智能研究的重要方向之一.那么从事NLP的人员如何能够不断升级,构建核 ...

最新文章

  1. KVM日常管理-克隆-快照-磁盘扩容-虚拟磁盘挂载
  2. python实现udp聊天室_python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序...
  3. Smarty foreach
  4. Maven之自定义archetype生成项目骨架(一)
  5. JVM—引用计数和可达性分析算法(存活性判断)
  6. apt-get 与 apt-cache使用
  7. php定义浏览器编码,从php脚本到浏览器,编码方式浅析
  8. Spring Security系列之Spring Social实现微信社交登录(九)
  9. Hive partition prune Failed
  10. 关于事件模型,js事件绑定和解除的学习
  11. 深入理解PHP之数组(遍历顺序)
  12. js金额格式化最简单方法 JS对货币格式化,js钱三位一隔,javascript货币格式化
  13. 【杂】poj2482 Stars in Your Windows 题面的翻译
  14. 图文详细解说DevExpress 2015新版亮点【附文档下载】
  15. 暴力破解之NTscan+密码字典工具
  16. 防范勒索病毒及关闭相关端口
  17. java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  18. html中js alert函数,javascript的alert是什么
  19. 数据分析——房源分析项目
  20. windows下安装mingw-w64

热门文章

  1. Java知识积累——同时输出到控制台和指定文件,或直接输出到指定文件
  2. Jquery实现鼠标双击Table单元格变成文本框
  3. C语言,产生一组数字,并将其写入txt文档中
  4. Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 括号序列 dp+栈
  5. 2016年前端web开发趋势总结
  6. Object有哪些公用方法?
  7. 【ARM-Linux开发】linux下Eclipse进行C编程时动态链接库的生成和使用
  8. 硬件开源为什么如此之难?
  9. python从网络时间服务器获取并打印当前时间以及pip安装ntplib的一次体验
  10. (转)OAuth 2.0的设计思路