文本预处理-文本处理的基本方法
认识文本预处理
文本预处理的及其作用
文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型的输入的要求,如:将文本转化成模型需要的张量,规范张量的尺寸等,而且科学的文本预处理环节还将有效指导模型超参数的选择,提升模型的评估指标
文本预处理中包含的主要环节
- 文本处理的基本方法
- 分词
- 词性标注
- 命名实体识别
- 文本张量的表示方法
- one-hot编码
- Word2vec
- Word Embedding
- 文本语料的数据分析
- 标签数量分布
- 句子长度分布
- 词频统计与关键词词云
- 文本特征处理
- 添加n-gram特征
- 文本长度规范
- 数据增强方法
- 回译数据增强法
- 文本处理的基本方法
文本处理的基本方法
jieba分词
安装
1 | pip install jieba |
精确模式分词
- 试图将句子最精确地切开,适合文本分析
1 | import jieba |
Building prefix dict from the default dictionary ... Dumping model to file cache /tmp/jieba.cache Loading model cost 1.053 seconds. Prefix dict has been built successfully. ['巴西', '圣保罗州', '法院', '裁定', '苹果', '在', '当地', '出售', '的', 'iPhone', '必须', '配备', '充电器']
全模式分词
- 把句子中所有的可以成词的词语都扫描出来,速度非常快,但不能消除歧义
1 | import jieba |
Building prefix dict from the default dictionary ... Dumping model to file cache /tmp/jieba.cache Loading model cost 1.005 seconds. Prefix dict has been built successfully. ['巴西', '圣保罗', '圣保罗州', '保罗', '罗州', '法院', '裁定', '苹果', '果在', '当地', '出售', '的', 'iPhone', '必须', '配备', '充电', '充电器', '电器']
搜索引擎模式分词
- 在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词
1 | import jieba |
['巴西', '保罗', '罗州', '圣保罗', '圣保罗州', '法院', '裁定', '苹果', '在', '当地', '出售', '的', 'iPhone', '必须', '配备', '充电', '电器', '充电器']
中文繁体分词
- 针对中国香港,台湾地区的繁体文本进行分词
1 | import jieba |
['煩惱', '既', '是', '菩提', ',', '我', '暫且', '不', '提']
使用用户自定义的词典
- 添加自定义词典后,jieba能够准确识别词典中出现的词汇,提升整体的识别准确率
- 词典格式:每行分三部分:词语、词频(可省略),用空格隔开,顺序不可颠倒
如:
云计算 5 n
李小福 2 nr
easy_install 3 eng
好用 300
韩玉赏鉴 3 nz
八一双鹿 3 nz
1 | import jieba |
['八', '一双', '鹿', '更名', '为', '八一', '南昌', '篮球队', '!']
1 | jieba.load_userdict("./userdict.txt") |
['八一双鹿', '更名', '为', '八一', '南昌', '篮球队', '!']
hanlp
- 中英文NLP处理工具包,基于tensorflow2.0 ,使用在学术界和行业中推广最先进的深度学习技术
hanlp的安装
1 | pip install hanlp |
使用hanlp进行中文分词
1 | import hanlp |
Downloading https://file.hankcs.com/hanlp/embeddings/convseg_embeddings.zip#news_tensite.w2v200 to /root/.hanlp/embeddings/convseg_embeddings.zip 100% 188.3 MiB 2.5 MiB/s ETA: 0 s [=========================================] Decompressing /root/.hanlp/embeddings/convseg_embeddings.zip to /root/.hanlp/embeddings Loading word2vec from cache ...88.82% 13.2 MB/14.9 MB Loading word2vec from text file ... ETA: 0 sDownloading https://file.hankcs.com/corpus/char_table.zip#CharTable.txt to /root/.hanlp/thirdparty/file.hankcs.com/corpus/char_table.zip 100% 17.6 KiB 4.4 KiB/s ETA: 0 s [=========================================] Decompressing /root/.hanlp/thirdparty/file.hankcs.com/corpus/char_table.zip to /root/.hanlp/thirdparty/file.hankcs.com/corpus ['巴西', '圣保罗州', '法院', '裁定', '苹果', '在', '当地', '出售', '的', 'iPhone', '必须', '配备', '充电器']
使用hanlp进行英文分词
1 | # 但是我在colab上跑的时候报错了,问题目前还没解决!!! |
['Do', "n't", 'go', 'gentle', 'into', 'that', 'good', 'night', '.']
命名实体识别
- 命名实体:通常我们将人名,地名,机构名等专有名词统称为命名实体。如:周杰伦、黑山县、孔子学院
- 顾名思义,命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体
如:
鲁迅,浙江绍兴人,五四新文化运动的重要参与者,代表作朝花夕拾。
==>
鲁迅(人名) / 浙江绍兴(地名)人 / 五四新文化运动(专有名词) / 重要参与者 / 代表作 / 朝花夕拾(专有名词)
- 命名实体识别的作用:
- 同词汇一样,命名实体也是人类理解文本的基础单元,因此也是AI解决NLP领域高阶任务的重要基础环节
使用hanlp进行中文命名实体识别
1 | import hanlp |
[('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18), ('张晚霞', 'NR', 21, 24), ('美国', 'NS', 26, 28), ('纽约现代艺术博物馆', 'NS', 28, 37)]
使用hanlp进行英文命名实体识别
1 | import hanlp |
[('Obama', 'NR', 1, 2)]
词性标注
- 词性:语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果,常见的词性有14种,如:名词、动词、形容词等
- 顾名思义,词性标注(Part-Of-Speech tagging,简称POS)就是标注出一段文本中每个词汇的词性
如:
我爱自然语言处理
==>
我/rr,爱/v,自然语言/n,处理/vn
rr:人称代词
v:动词
n:名词
vn:动名词
- 作用:
- 词性标注以分词为基础,是对文本语言的另一个角度的理解,因此也常常成为AI解决NLP领域高阶任务的重要基础环节
使用hanlp进行中文词性标注
1 | import hanlp |
['PN', 'DEG', 'NR', 'AD', 'VC', 'NR', 'NN', 'CC', 'NN']
使用hanlp进行英文词性标注
1 | import hanlp |
['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN']