NLP入门系列—分词 Tokenization

NLP入门系列---分词 Tokenization

分词是 NLP 的基础任务,将句子,段落分解为字词单位,方便后续的处理的分析。

本文将介绍分词的原因,中英文分词的3个区别,中文分词的3大难点,分词的3种典型方法。最后将介绍中文分词和英文分词常用的工具。

分词就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作。

词是一个比较合适的粒度

词是表达完整含义的最小单位。

字的粒度太小,无法表达完整含义,比如"鼠"可以是"老鼠",也可以是"鼠标"。

而句子的粒度太大,承载的信息量多,很难复用。比如"传统方法要分词,一个重要原因是传统方法对远距离依赖的建模能力较弱。"

深度学习时代,部分任务中也可以"分字"

深度学习时代,随着数据量和算力的爆炸式增长,很多传统的方法被颠覆。

分词一直是 NLP 的基础,但是现在也不一定了,感兴趣的可以看看这篇论文:《Is Word Segmentation Necessary for Deep Learning of Chinese Representations?》。

中英文分词的3个典型区别

区别1:分词方式不同,中文更难

英文有天然的空格作为分隔符,但是中文没有。所以如何切分是一个难点,再加上中文里一词多意的情况非常多,导致很容易出现歧义。下文中难点部分会详细说明。

区别2:英文单词有多种形态

英文单词存在丰富的变形变换。为了应对这些复杂的变换,英文NLP相比中文存在一些独特的处理步骤,我们称为词形还原(Lemmatization)和词干提取(Stemming)。中文则不需要

词性还原:does,done,doing,did 需要通过词性还原恢复成 do。

词干提取:cities,children,teeth 这些词,需要转换为 city,child,tooth"这些基本形态

区别3:中文分词需要考虑粒度问题

例如"中国科学技术大学"就有很多种分法:

  • 中国科学技术大学
  • 中国 \ 科学技术 \ 大学
  • 中国 \ 科学 \ 技术 \ 大学

粒度越大,表达的意思就越准确,但是也会导致召回比较少。所以中文需要不同的场景和要求选择不同的粒度。这个在英文中是没有的。

中文分词的3大难点

难点 1:没有统一的标准

目前中文分词没有统一的标准,也没有公认的规范。不同的公司和组织各有各的方法和规则。

难点 2:歧义词如何切分

例如"兵乓球拍卖完了"就有2种分词方式表达了2种不同的含义:

  • 乒乓球 \ 拍卖 \ 完了
  • 乒乓 \ 球拍 \ 卖 \ 完了

难点 3:新词的识别

信息爆炸的时代,三天两头就会冒出来一堆新词,如何快速的识别出这些新词是一大难点。比如当年"蓝瘦香菇"大火,就需要快速识别。

3种典型的分词方法

分词的方法大致分为 3 类:

  1. 基于词典匹配
  2. 基于统计
  3. 基于深度学习

给予词典匹配的分词方式

优点:速度快、成本低

缺点:适应性不强,不同领域效果差异大

基本思想是基于词典匹配,将待分词的中文文本根据一定规则切分和调整,然后跟词典中的词语进行匹配,匹配成功则按照词典的词分词,匹配失败通过调整或者重新选择,如此反复循环即可。代表方法有基于正向最大匹配和基于逆向最大匹配及双向匹配法。

基于统计的分词方法

优点:适应性较强

缺点:成本较高,速度较慢

这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。

基于深度学习

优点:准确率高、适应性强

缺点:成本高,速度慢

例如有人员尝试使用双向LSTM+CRF实现分词器,其本质上是序列标注,所以有通用性,命名实体识别等都可以使用该模型,据报道其分词器字符准确率可高达97.5%。

常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。

分词工具

中文分词工具

下面排名根据 GitHub 上的 star 数排名:

  1. Hanlp
  2. Stanford 分词
  3. ansj 分词器
  4. 哈工大 LTP
  5. KCWS分词器
  6. jieba
  7. IK
  8. 清华大学THULAC
  9. ICTCLAS

英文分词工具

  1. Keras
  2. Spacy
  3. Gensim
  4. NLTK

案例

这里我们演示一下jieba,关于jieba 具体使用我们可以看后面我们的实操系列文章

import jieba

str="中国上海是一座美丽的国际性大都市"

# 全模式把句子中所有的可以成词的词语都扫描出来, 会出现一词多用、一词多意。
seg_list = jieba.cut(str, cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  

# 精确模式 精确模式将句子最精确的切分开,每个词都只有一种含义。
seg_list = jieba.cut(str, cut_all=False)
print("Full Mode: " + "/ ".join(seg_list))  


seg_list = jieba.cut("奥利给,管虎执导的八佰是一部让人热血沸腾的好电影")
print("/ ".join(seg_list))  

# 加载词典,不然我们看到奥利给 这个词被分开了
jieba.load_userdict("/Users/xxx/workspace/python/nlp/dict/movie.dict")
seg_list = jieba.cut("奥利给,管虎执导的八佰是一部让人热血沸腾的好电影")
print("/ ".join(seg_list)) 

'

总结

分词就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作。

分词的原因:

  1. 将复杂问题转化为数学问题
  2. 词是一个比较合适的粒度
  3. 深度学习时代,部分任务中也可以"分字"

中英文分词的3个典型区别:

  1. 分词方式不同,中文更难
  2. 英文单词有多种形态,需要词性还原和词干提取
  3. 中文分词需要考虑粒度问题

中文分词的3大难点

  1. 没有统一的标准
  2. 歧义词如何切分
  3. 新词的识别

3个典型的分词方式:

  1. 基于词典匹配
  2. 基于统计
  3. 基于深度学习
相关推荐
TaoYuan__1 分钟前
机器学习【激活函数】
人工智能·机器学习
TaoYuan__2 分钟前
机器学习的常用算法
人工智能·算法·机器学习
正义的彬彬侠7 分钟前
协方差矩阵及其计算方法
人工智能·机器学习·协方差·协方差矩阵
致Great13 分钟前
Invar-RAG:基于不变性对齐的LLM检索方法提升生成质量
人工智能·大模型·rag
华奥系科技17 分钟前
智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁
人工智能·科技·安全·生活
ZPC82101 小时前
OpenCV—颜色识别
人工智能·opencv·计算机视觉
Mr.简锋1 小时前
vs2022搭建opencv开发环境
人工智能·opencv·计算机视觉
weixin_443290691 小时前
【论文阅读】InstructPix2Pix: Learning to Follow Image Editing Instructions
论文阅读·人工智能·计算机视觉
ai产品老杨2 小时前
部署神经网络时计算图的优化方法
人工智能·深度学习·神经网络·安全·机器学习·开源
火山引擎边缘云2 小时前
创新实践:基于边缘智能+扣子的智能轮椅 AIoT 解决方案
人工智能·llm·边缘计算