【知识点总结】
1. 正则表达式
2. 分词
- 难点
- 方法
- 常见分词工具
- jieba的使用例子
3. 词性标注
- 方法
- 常见工具
- 应用工具进行中英文的词性标注:jieba中文例子、NLTK英文例子
4.词干提取和词性还原
- 异同点
-
NLTK工具包进行词干提取:NLTK工具包中的三种词干提取器对比
- NLTK.stem进行词形还原
- 对于文本,实施词性还原的三步骤:分词、词性标注、词形还原
5. 命名实体识别
- 方法
- 常见工具
- NLTK工具包进行命名实体识别例子
6. 文本的数据增强
- 替换
- 回译
- 顺序变化
(中文数据增强工具 nlpcda)
========================================================
1. 正则表达式
1) re模块
- re.match(正则表达式, str):从首字符开始匹配,返回一个匹配对象,否则None
- re.search():从任意位置匹配,找到首个即返回,否则None
- re.findall():任意位置,找到所有匹配结果,返回列表。没有.group,返回正则里的括号部分(特征标群)
- re.sub(正则,替换内容,str):要删除即替换成''
2. 分词
1)难点
- 分词就是分解成以词为基本单位的数据结构
- 字的粒度太小,无法表达明确含义;句子粒度太大,信息量多难以复用
- 有些情况下分字更好,比如古文;粒度扩张如固定短语、专业术语
- 英文天然有空格做分隔符,但中文没有;且中文一词多义,容易有歧义,因此
中文分词无统一标准:如/*/,中华/人民/*
歧义词难分:羽毛球拍卖完了,羽毛球拍/卖/完了,羽毛球/拍卖/完了
未登录词难以识别:新词e.g. 奥利给
2)方法
- 基于词典的
介绍:首先将待分词的中⽂⽂本根据⼀定规则切分和调整,然后和词典中的词语进⾏匹配,匹配成功则按照词典的词分词,匹配失败通过调整或者重新选择,如此反复循环即可。
优点:速度快、成本低。
缺点:适应性不强,不同领域效果差异⼤。
代表方法:正向最大匹配、逆向最大匹配、双向匹配
- 基于统计的
优点:适应性较强。
缺点:成本较⾼,速度较慢。
- 基于深度学习的
优点:准确率⾼、适应性强。
缺点:成本⾼,速度慢。
- 结合使用:常见的分词器都是机器学习算法和词典相结合的
【分词问题转换为序列标注问题:B、M、E来表示词的头、中、尾,则王先生就职于武汉大学=BMEBESBMME,BME/BE/S/BMME = 王先生/就职/于/武汉大学】
3)常见中文分词工具
- Hanlp
- Stanford
- ansj分词器
- 哈工大LTP
- KCWS分词器
- jieba
- 清华大学THULAC
- ICTCLAS
4)jieba的使用
- 模式:
全模式:把所有可能的分词结果展示出来
精确模式:只取一种最有可能的切分方式
搜索引擎模式:在精确模式的基础上,对长词再次划分
- 在jieba中添加词典
新建一个词典文件,内容规则:
一个新词占一行
每一行三部分:词语、词频(可略)、词性(可略),空格隔开,顺序不能变
文件优先用utf-8编码
用jieba.load_userdict(词典文件路径)来加载新词典,再进行分词操作
- 修改词典
添加新词:jieba.add_word(词,freq=None,tag=None)
删除词:jieba.del_word(词)
3. 词性标注
1)难点
- 一般而言,文本里的动词比较重要,助词可能不太重要
- 中文中常用词兼类现象严重(一词可具备多种词性):如领导,会造成歧义
2)方法
- 基于规则的:按兼类词搭配关系和上下文语境来建造消歧规则
- 基于统计的
- 基于统计与规则相结合的:对统计标注结果中那些被认为可疑的,才用规则方法消除歧义
- 基于深度学习的:可当作序列标注任务来做,⽬前深度学习解决序列标注任务常⽤⽅法包括 LSTM+CRF、BiLSTM+CRF 等。
3)常见的具备词性标注功能的工具
- jieba
- SnowNLP
- THULAC
- StanfordCoreNLP
- HanNLP
- NLTK
- SpaCy:不支持中文
4)应用工具,实现中英文词性标注
- 以jieba为例,实现中文词性标注
- 以NLTK为例,实现英文词性标注
4. 词干提取与词形还原
只针对具有形态变化的语言。中文是固定形态的语言,不需要这两种预处理操作
1)异同点
- 词干提取Stemming:去掉前后缀得到词根,一般用于扩展检索
常见前后缀:第三人称-s、进行时-ing、过去分词-ed
- 词形还原Lemmatisation:基于词典将单词的复杂形态转变为基础形态
将词汇统一为一般形式再进行后续分析处理
基于词典:不是简单地去掉前后缀,而是根据词典将单词转换
are、is、been、was、were都变成been
- 相同点:
- 不同点:
2)NLTK工具包进行词干提取
- NLTK工具包中的三种词干提取器对比
3)NLTK.stem进行词形还原
- 用NLTK.stem时,指定单词词性很重要。词形还原是根据单词再文本中的词性而变化的
4)对于文本,实施词性还原的三步骤
- 分词、词性标注、词形还原
5. 命名实体识别 Named Entity Recognition (NER)
识别文本中具有特定意义的实体,比如人名、地点名、组织机构名、时间等
1)方法:
2)工具:
- 大部分工具只能识别一些基本的常见的,特殊领域的实体如药物名就难以识别了,因为工具背后的训练集不存在这些实体
- 此时需要标注好的领域数据,可应用Crfsuite训练个性化的识别器
- 也可搭建一些深度学习模型进行序列标注训练
3)NLTK工具包进行命名实体识别例子:
6. 文本的数据增强
收集的真实数据往往存在数据类别不平衡的问题。比如,垃圾邮件比正常邮件少些,有错字的文本比正常的文本少些。
对于样本少的类别,模型可能就学习不到其特性。而有时我们想识别那些样本少的类别,如错别字预测
针对文本数据,在未被转化成数值表征形式时,可以在字符层面进行数据增广
nlpcda 是一个中文数据增强工具
1)同义词替换
- 根据同义词典/词向量相相似度,替换相同用法的词汇,从而获取不同的文本表达方式
- nlpcda实现随机实体替换:Randomword(creat_num=3返回增强文本的个数, change_rate=0.3 随即替换的概率)
- 实现随机同义词变换:SimilarWord(同Randomword)
2)文本回译
- 将文本翻译成某一语言,再翻译回来,一般生成意思相近但表达不同的文本
- 注意:特殊文风、特殊领域或长度较长的文本翻译效果不佳,回译会造成更多的误差传递,慎用
- 减少回译误差:尽量选择与源语言渊源相近的语言(如中文可选日语),或被广泛应用于翻译研究的语言(如研究广泛的英文)
- nlpcda实现百度中英翻译互转实现的增强:
baidu_translate(content=原文本,appid=百度翻译api的appid,secretKey=百度翻译api的secretKey,t_from=原文本的语言,t_to=翻译文本的语言)
申请 appid、secretKey 链接: http://api.fanyi.baidu.com/api/trans
3)词汇顺序变化
针对某些特殊提交的文本(如条例类的文本),在语块层面重新进行语序的排列不影响整体语义的表达