第一篇:text preprocessing文本预处理
Posted flying_1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一篇:text preprocessing文本预处理相关的知识,希望对你有一定的参考价值。
语言是组成式的,对于人类而言,我们需要将长串的文本分割成独立的部分。对于计算机而言,理解语言也是如此。那么预处理就是第一步。
预处理的常规步骤:
步骤 | before | after |
移除不想要的格式 | “<p> Hi there. I’m Eren. </p>” | “Hi there. I’m Eren.” |
句子切分 | “Hi there. I’m Eren.” | [“Hi there.”, “I’m Eren.”] |
词切分 | [“Hi there.”, “I’m Eren.”] | [[“Hi”, “there”, “.”], [“I”, “’m”, “Eren”, “.”]] |
单词规范化 | [[“Hi”, “there”, “.”], [“I”, “’m”, “Eren”, “.”]] | [[“hi”, “there”, “.”], [“i”, “am”, “eren”, “.”]] |
停用词的移除 | [[“hi”, “there”, “.”], [“i”, “am”, “eren”, “.”]] | [[],[“eren”]] |
以上是一个预处理的概览,接下来我会针对每一部分细节讲解。
句子切分
方法 | 问题 | |
最简单方法 | 按标点切分。比如 .?! | 句号可能会用在缩写中比如U.S. dollar |
进一步尝试 | 用正则去判断.?!后面的单词字母是不是大写 | Mr. Brown,缩写后面可能接的是大写的名字,而不是一句新的句子的开头 |
再次尝试 | 使用词典 | 但是很难去遍历所有的名字和缩写 |
最新 | 使用机器学习而不是之前的规则 |
稍微在说一下如何用机器学习去分割句子。使用二分类器。
判断句号.是不是一句话的结束,使用决策树,逻辑回顾,当然侧重不是讲机器学习而是做nlp的思路。
分析特征:
- 看句号.之前和之后的单词
- 单词的形状:大小写,数字,长度
- 词性标签:限定词趋向于句子开头
单词切分
英文的话可以空格拆分,但是中文的话没有空格,所有可以采用一个词典,去做正向最大匹配算法(后面章节会讲解该算法)来做切分,当然这种基于词典的方法,也会存在问题,比如去买新西兰花,可以被解读为,去|买|新西兰|花;或者去|买|新|西兰花。当然之后也会使用HMM等算法来对该分词方法进行细致分析。
其中,子词切分,也是一部分,比较常用的算法是BPE算法(byte-pair encoding),这一部分会在本篇章的附属章节进行讲解。
单词规范化
样例 | |
全部小写 | China->china |
移除一些形态学的部分 | cooking->cook |
正确拼写 | definately->definitely |
扩展缩写 | U.S.A.->USA |
为什么要这么做,或者说单词规范化的目的:
- 减少单词量
- 映射单词到相同类型
我们接下来主要重点讨论集中移除形态学的类别和方法
Inflectional morphology(变形的形态学)
该方法主要产生一些语法的变体。
英语对名词、动词和形容词进行变形
- 名词:名词的数量(-s)
- 动词:主语数量 (-s)、动作的方面 (-ing) 和动作的时态 (-ed)
- 形容词:比较级(-er)和最高级(-est)
lemmatisation(词性还原)
词性还原是基于词典,将单词的复杂形态转变成最基础的形态。
还原前 | 还原后 |
speaking | speak |
was | be (not wa) |
stopping | stop (not stopp) |
poked | poke (not pok) |
因此,精确词形还原需要的词素词典(也就是上面说的基础形态的词典)。
Derivational Morphology(派生的形态学)
该方法通常产生不同的单词,通常两种方式:
加后缀,改变词性 | 加前缀,改变词义 |
-ly (personal → personally) | write → rewrite |
ise (final → finalise) | healthy → unhealthy |
-er (write → writer) | balance → imbalance |
stemming(词干提取)
该方法是去除所有后缀得到词干的过程。
举例:automate, automatic, automation → automat
特点:
- 得到的词干不一定是可以解释的词或者存在的单词
- 会比词性还原获得更少的词,也就是结果词的稀疏性会更高
- 使用于信息检索,因为粗粒度,可用于扩展检索
三种词干提取主流算法:
- porter
- snowball
- lancaster
这里简单对porter算法讲解一下。
- 去除inflectional 后缀
- 去除derivational 后缀
这里首先将所有的英文单词都归纳一下,发现是如下
其中C代表辅音(可以是连着的好几个辅音),V代表元音,[]代表0次或1次,m代表0到多次
TREE | C(VC)0V 其中m=0 因为tr是C,ee是V |
TREES | C(VC)1 其中m=1 因为tr是C,ee是V,s是C |
TROUBLES | C(VC)2 其中m=2,因为tr是C,ou是V,bl是C,e是V,s是C |
然后就是结合一些规则,比如
Rules:
SSES → SS
IES → I
SS → SS
S → null
它会按照最长的规则先开始匹配。
总结一下,就是先去除语法变体,比如复数,或者ing等;再去除派生词的后缀,比如 er ->e ;在这个过程中,会给出相应的去除的规则,也会涉及到m的要求,所有就是按照规则一步一步执行即可。
修正拼写错误
三种方法
- 字符串编辑距离
- 错误类型建模(语音、打字等)
- n-gram model (这部分后面的篇章会涉及)
其他的正则化
- 拼写的变种:Normalize → Normalise (or vice versa) U r so coool! → you are so cool
- 扩展缩写:US, U.S. → United States imho → in my humble opinion
停用词移除
停用词个人理解主要指的是一些功能性的词或者出现频率较高但是对句子本身意思没有影响的词,比如常见的 the, a, of, for, he, …
辛苦大家观看,如果对大家有帮助的话就更好了,有什么问题欢迎评论交流探讨。方便的话可以点赞加关注。
以上是关于第一篇:text preprocessing文本预处理的主要内容,如果未能解决你的问题,请参考以下文章
小白学习keras教程十一Keras中文本处理Text preprocessing
从 keras.preprocessing.text 在 pytorch 中导入 one_hot 等效项?