【自然语言处理】一篇文章入门分词(Tokenization)
分词 >_<,英文tokenization,也叫word segmentation,是一种操作,它按照特定需求,把文本切分成一个字符串序列(其元素一般称为token,或者叫词语)。
英文分词
英文分词极为简单,下面给出两种分词思路:
import re
text = 'Lolita,light of my life,fire of my loins.My sin,my soul.'# 分割的方式
pattern1 = re.compile(' ')
list1 = pattern1.split(text)# 查找的方式
pattern2 = re.compile('\w+')
list2 = pattern2.findall(text)# 打印出来,比较一下
print(list1)
print(list2)
无论是通过空格符进行分割出单词,还是直接正则匹配出单词,其实都是可以通过优化这个正则表达式进行优化分词效果。
我们意识到,我们仅仅用了两种简单的逻辑、短短的几行代码,分词的效果就特别特别好!!!
根源在于,英文本身就已经通过空白符进行了分词!!!
NLP中,其他的一些语言显然没这么幸运:
- 德语:德语构词法允许复合词的存在,可以理解为将多个简单单词直接拼接成一个复杂单词,并且中间不会添加任何连字符。感受一下,这是一个单词:Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung
- 日语:日语的灾难在于,平假名、片假名、汉字、罗马字符可以近乎等价地进行替换,这种等价是令人头疼的问题
- 中文:不必多言
当然,自然语言处理时,中文也有比英文方便的地方:词形还原(Lemmatization)和词干提取(Stemming)
- 词形还原:英文中有时态的概念(go,going,gone),因此英文NLP需要对此进行还原
- 词干提取:即词根(beautiful-ful,quickly-ly),中文其实也有类似的成分,即偏旁部首(狗,猫)。但是,就在此刻,你在读这句话的时候会特意去看偏旁部首吗完全?没必要。
中文分词
▶ 基于词典的分词方法
即字符串匹配。按照一定的策略将待分词的汉字串与一个充分大的机器词典中的词条进行匹配, 若匹配成功,则识别出一个词。
这里有三个关键点,其实都很好理解:
- 分词词典
- 文本扫描的方向:正向、逆向、双向
- 匹配原则:最大匹配、最小匹配、逐词匹配、最佳匹配
▶ 基于统计的分词方法
预先统计训练文本中相邻出现的各个字的组合的频度,然后计算它们之间的互现信息( 它体现了汉字之间结合关系的紧密程度),当该值高于某一个阈值时,便可以认为此字组可能构成了一个词。
模型:n-gram模型,HMM模型,最大熵模型
需要大量的训练文本,用以建立统计模型的参数。即,前面训练的越多,后面对未知的猜测或判断越准确。
▶ 基于语义、理解的分词方法
模拟人对句子的理解过程。
由于汉语语言知识的模糊性、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还不能取得令人满意的效果。
歧义与消歧
▶ 两种歧义
交集歧义 | 组合歧义 |
---|---|
在哪儿切? | 切不切? |
“网球场”,“真正在” | “才能”,“与其” |
▶ 如何消歧
- 事实上,大部分交集歧义并不会产生负面影响
- 而对于那些常见的组合歧义字段,可以统计歧义的上下文信息,为其制定规则或训练模型,以便在新的语言环境中可以根据上下文进行预测
- 实际的分析系统中,并不区分歧义的类型,而是利用概率模型做统一的处理
未登录词
▶ 什么是未登录词?
语言在使用时会现场创造或使用词典中没有的词,这些词统称为未登录词。
新词识别准确率已经成为评价一个分词系统性能的重要标志。
▶ 未登录词分类
▶ 未登录词识别
- 新词:新词发现算法
- 数词、时间词、词语的变形组合:制定语法规则
- 专业术语:信息抽取算法
- 复杂机构名:命名实体识别
▶ 难点
- 未登录词的内部歧义:张北京、王国维
- 未登录词与上下文产生歧义:快乐大本营的主持人为何炅
分词系统的评估
指标:精度(Precision)、召回率(Recall)、F值(F-mesure)
P=切出的正确的词数/切出的所有的词数P = 切出的正确的词数 / 切出的所有的词数P=切出的正确的词数/切出的所有的词数
R=切出的正确的词数/人切出的所有的词数R = 切出的正确的词数 / 人切出的所有的词数R=切出的正确的词数/人切出的所有的词数
准确率和召回率在某种程度上是矛盾的。
刻意地追求准确率会造成召回率的下降,同样,刻意地追求召回率也会造成准确率的下降。
F值作为准确率和召回率的调和平均数,可以有效地在二者之间作出一个平衡。
分词工具
▶ jieba
jieba.cut(sentence, cut_all = False, HMM = False)
cut_all ----> True代表全模式,False代表精确模式。默认精确模式。
HMM --------> True表示采用HMM(隐马尔可夫模型)。默认不使用。
import jieba
list1 = list(jieba.cut('中华人民共和国万岁,世界人民大团结万岁'))
print(list1)
▶ thulac
import thulac
thu = thulac.thulac() # 默认模式
list2 = thu.cut('中华人民共和国万岁,世界人民大团结万岁')
print(list2)# thulac是清华大学自研的分词库,但是因为源码使用了py3遗弃的语法,可能会导致问题
# 需要修改一小处源码才行(按照error信息改就行)
【自然语言处理】一篇文章入门分词(Tokenization)相关推荐
- 一篇文章入门深度学习框架PyTorch
一篇文章入门深度学习框架PyTorch 1 Tensor(张量) 2 Variable(变量) 3 Dataset(数据集) 4 nn.Module(模组) 5 torch.optim(优化) 一阶优 ...
- 写给仿真软件研发的“一篇文章入门”系列(终)
"一篇文章入门"系列不再更新,点击绿色标题可打开链接. 一篇文章入门系列主要针对工业仿真软件研发测试人员,也可作为相关从业人员和学生,以及对仿真软件开发感兴趣的读者. 所有文章来自 ...
- HTML完结《一篇文章入门编程系列之从零基础入门HTML+CSS前端开发》12.24
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.jpg)] 一篇文章让你从HTML零基础入门前端开发 前言: 此文为玄子,复习ACCP-S1课程后,整 ...
- 日常更新《一篇文章入门编程系列之从零基础入门HTML+CSS前端开发》12.23
一篇文章让你从HTML零基础入门前端开发 前言: 此文为玄子,复习ACCP-S1课程后,整理的文章,文中对知识点的解释仅为个人理解,源码均可直接复制运行 配套PPT,站点源码,等学习资料请加文章封面联 ...
- python 的库如何开发_一篇文章入门Python生态系统
译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员来说,本文对Python的生态系统还是做了较为全面的介绍.文 ...
- 一篇文章入门Python生态系统
开发者从PHP.Ruby或其他语言转到Python时,最常碰到的第一个障碍,就是缺乏对Python生态系统的全面了解.开发者经常希望能有一个教程或是资源,向他们介绍如何以大致标准的方式完成大部分的任务 ...
- 一篇文章入门Mysql
文章目录 01数据库的用途 02 娱乐化讲解表关系 03.mysql 数据库安装 04数据语句操作类型 05. 连接数据库 06. 数据库结构定义语句 07. 类型.字符集.引擎和索引 08. 增删改 ...
- 一篇文章入门Word2Vec
NLP 一.Word Embedding 1.Word Embedding的基本概念 现有的机器学习方法往往无法直接处理文本数据,因此需要找到合适的方法,将文本数据转换为数值型数据,由此引出了Word ...
- 一篇文章入门Spring
Spring 1.Spring入门(IOC) 首先要在pom文件里导入依赖 <dependency><groupId>org.springframework</group ...
- 一篇文章入门 Redis(万字长文干货)
导语 之前给团队的同事做了一次超容易理解的 Redis 入门分享,这里加以整理修改成文章分享给需要的童鞋. 本文将会从:Redis 使用场景与介绍 -> 数据结构与简单使用 -> 小功能大 ...
最新文章
- h3c wa4320配置上网_企业路由不为人知的功能:自动吸粉、上网监控、多宽带合并...
- index.php?s=$1,thinkphp nginx配置rewrite,地址会多出个.php
- UEStudio使用技巧三则
- c语言字符比较思路,C语言讲解思路资料
- 前端学习(2220):react之jsx的样式小案例
- OpenJudge NOI 1.7 17:字符串判等
- WordPress 主题教程 #3:开始 Index.php
- 程序员的进阶课-架构师之路(18)-图
- Bailian4022 买房子【迭代】
- 单按钮启停电路实物图_什么是电路的主回路?什么是控制回路?它们之间有什么区别?...
- 数据湖生态联盟正式成立
- 小夜曲dsd使用foobar2000测试dsd输出
- idea弹窗 Placing the unmodified important.txt in the zip file with the agent jar in the same directo
- B站硬核up主稚晖君:对于有志学习嵌入式开发的软件工程师,我有这些建议!...
- 推荐收藏 | 100个数据分析常用指标和术语
- MATLAB 默认颜色风格
- C#垃圾回收机制GC
- 李艳鹏:技术人如何修炼内功
- 3天入门Python机器学习(黑马程序员)
- 选课系统甘特图(用Excle画甘特图)
热门文章
- Hibernate报错org.hibernate.MappingException: Unknown entity解决方法
- 安卓和ios针对小程序兼容以及小程序技术实现上本身遇到的一些问题
- Error: Unresolved node modules: vue
- MySQL 高可用MMM
- Fitness Notes 健身笔记
- 面试高并发,凉了!!(全程高能,建议收藏)
- Go语言Cookie常用设置
- 学习java第20天
- 电脑调分辨率黑屏了怎么办_调显示器分辨率黑屏怎么办
- java.lang.null_java.lang.nullpointerexception 怎么解决