当前位置: 首页 > news >正文

自然语言处理基础

目录

1 文本处理

hanlp

 命名实体 

词性标注

2 文本的张量表示

3文本数据分析

3.1标签数量分布

3.2句子分布

 map函数

pseg 词性标注 

3.3绘制词云图

 4文本的特征处理

n-gram

文本的长度规范

5文本数据增强


1 文本处理

分词 中文 jieba  中英文的 hanlp基于tensorflow2.0

jieba的三种模式 精准模式(将文本最精确的分隔开适合文本分析)

搜索引擎模式(将精准模式上的长词在进行切分)

全模式(只要是词语都将会被拆分)

使用用户自定义的字典进行分词,提高整体的识别准确率

# 精准模式
content1 = jieba.lcut(content, cut_all=False)
# ['工信处', '女干事', '每月', '经过', '下属', '科室', '都', '要',
# '亲口', '交代', '24', '口', '交换机', '等', '技术性', '器件', '的', '安装', '上', '的', '工作']
# 全模式
content2 = jieba.lcut(content, cut_all=True)# ['工信处', '处女', '女干事', '干事', '每月', '月经', '经过', '下属', '科室', '都', '要', '亲口',
# '口交', '交代', '24', '口交', '交换', '交换机', '换机', '等', '技术', '技术性', '性器', '器件', '的', '安装', '装上', '的', '工作']
# 搜索引擎模式
content3 = jieba.lcut_for_search(content)# ['工信处', '干事', '女干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24',
# '口', '交换', '换机', '交换机', '等', '技术', '技术性', '器件', '的', '安装', '上', '的', '工作']
content4 ='八一双鹿更名为八一南昌篮球队!'
content5 = jieba.lcut(content4)#['八', '一双', '鹿', '更名', '为', '八一', '南昌', '篮球队', '!']
jieba.load_userdict('./jieba.txt')
云计算 5 n
李小福 2 nr
easy_install 3eng
好用 30
韩玉赏鉴 3 nz
八一双鹿 3 nz
content6 = jieba.lcut(content4)
# ['八一双鹿', '更名', '为', '八一', '南昌', '篮球队', '!']
hanlp
tokenizer = hanlp.load('CTB6_CONVSEG')
tokenizer('工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作')
# 工信处’,'女’,'干事’,'每’,'月’,'经过’,'下’,'属’,'科室’,'都’,'要','亲口',英文
tokenizer=hanlp.utils.rules.tokenize_english
tokenizer('Mr, Hankcs bought hankcs.com for 1.5 thousand dollars.')
['Mr.','Hankcs','bought','hankcs.com','for','1.5','thousand','dollars','.']
 命名实体 

将文本中的可能存在实体识别出来

鲁迅,浙江绍兴人,五四新文化运动的重要参与者,代表作朝花夕拾
                                                                                                              
鲁迅(人名)/浙江绍兴(地名)人 /五四新文化运动(专有名词)/重要参与者 /代表作

加载中文命名实体识别的预训练模型MSRA_NER_BERT_BASE_ZHrecognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)# 
这里注意它的输入是对句子进行字符分割的列表,1ist(上海华安工业(集团)公司董事长遭旭光和秘书张晚霞来到美 国纽约现代艺术博物观。’)
recognizer(list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆'))
[('上海华安工业(集团)公司','NT',0,12),('谭旭光’,'NR',15,18),('张晚霞','NR',21
# 返回结果是一个装有n个元组的列表,每个元组代表一个命名实体,元组中的每一项分别代表具体的命名实体,
词性标注
import jieba.posseg as pseg
print(pseg.lcut('我爱大唐不夜城'))

[pair('我', 'r'), pair('爱', 'v'), pair('大唐', 'nz'), pair('不夜城', 'i')]

>>> import hanlp
# 加载中文命名实体识别的预训练模型CTB5_POS_RNN_FASTTEXT-ZH
>>> tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)

 tagger(['我'"的”,'希望''是''希望''和平'])
#结果返回对应的词性
['PN','DEG','NN',·VC','VV','NN']

# 加载英文文命名实体识别的预训练模型CTB5_POS_RNN_FASTTEXT-EH

2 文本的张量表示

文本张量表示的作用:
将文本表示成张量(矩阵)形式,能够使语言文本可以作为计算机处理程序的输入,进行接下来一系列的解析工作

["人生”,"该’,"如何","起头”]
# 每个词对应矩阵中的一个向量
[[1.32,4,32,0,32,5.2]
[3.1,5.43,0.34,3.2],
[3.21,5.32,2,4.32],
[2.54,7.32,5.12,9.54]]

one-hot编码  Word2vec  Word Embedding

one-hot编码 又称独热编码,将每个词表示成具有n个元素的向量,这个词向量中只有一个元素是1,其他元素都是0,不同词汇元素为0的位置不同,其中n的大小是整个语料中不同词汇的总数.

3文本数据分析

帮助我们理解语料,检查可能存在的问题,指导模型超参数的选择.

常见的分析方法: 标签数量分布 句子长度分布,词频统计与关键词词云

3.1标签数量分布

通过画图分析训练集与测试集的标签分布数量,来判断是否对数据进行增强还是删减.

seaborn.countplot(x=None, y=None, hue=None, data=None)

对数据进行分类绘图,x按照什么分类,hue可以进行分组.

3.2句子分布

sns.histplot 是 Seaborn 库中用于绘制直方图的函数,用于进行统计.

chain扁平化列表,将多行多列转化为一行一列

from itertools import chain# 定义一个二维列表
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 使用 chain 扁平化列表
flattened_list = list(chain(*nested_list))[1, 2, 3, 4, 5, 6, 7, 8, 9]
 map函数

map(功能,数据)

numbers = [1, 2, 3, 4, 5]# 使用 map() 函数和内置的 square 函数计算每个元素的平方
squared_numbers = map(lambda x: x ** 2, numbers)
pseg 词性标注 

通常指的是 jieba 库中的词性标注模块 jieba.posseg

pseg.cut 方法会对输入的文本进行处理,返回一个可迭代对象,其中每个元素是一个包含词语和其对应词性的元组。    返回的一个是单词.word 一个是文本flag

for g in pseg.luct(text):

        if g.flag== 'a'

                r.append(g.word)

3.3绘制词云图

from wordcloud import WordCloud

传入词云图的数据需要为间隔为空格的字符串

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 示例文本
text = "自然语言处理是一门融语言学、计算机科学、数学于一体的科学。它正被广泛应用于机器翻译、文本摘要、问答系统等领域。"# 进行中文分词
seg_list = jieba.lcut(text)
# 将分词结果用空格连接成字符串
text_for_wordcloud = " ".join(seg_list)# 生成词云图
wordcloud = WordCloud(font_path="simhei.ttf",  # 设置字体,解决中文乱码问题,这里使用系统自带的黑体字,你也可以指定其他中文字体路径width=800,height=400,background_color="white"
).generate(text_for_wordcloud)# 显示词云图
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

 4文本的特征处理

本特征处理包括为语料添加具有普适性的文本特征,如:n-gram特征

以及对加入特征之后的文本语料进行必要的处理,如: 长度规范,

n-gram

常用的n为 2 或 3

分词列表:【"是谁",“敲动","我心”】

映射列表为:[1,34,21]

我们可以认为数值映射列表中的每个数字是词汇特征,我们还可以把"是谁"和"敲动"两个词共同出现且相邻也作为一种特征加入到序列列表中假设1000就代表“是谁"和"敲动"共同出现且相邻(当是谁和敲动共同出现且相邻)[1,34,21,1000]

zip()对列表进行打包 set 去重

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']# 使用 zip() 函数打包两个列表
zipped = zip(list1, list2)# 将迭代器转换为列表以便查看结果
result = list(zipped)
print(result)

最终输出 [(1, 'a'), (2, 'b'), (3, 'c')]

return set( zip (* [input[i:] for i in range(n)]))   将input分为两个列表 一个从1开始 一个从2 开始 ,

将这两个列表打包,去重

文本的长度规范

一般的模型输入为等大小的矩阵,,输入模型前 对文本数值映射后的长度进行规范 ,分析众数,然后将长的去除,短的补0

from keras.preprocessing import sequencex_train=【[1,23,5,32,55,63,2,21,78,32,23,1]
[2,32,1,23,1]]res= sequence.pad_sequences(x_train,10)【[,5,32,55,63,2,21,78,32,23,1] 去除前两个
[  0,0,0,0,0,2,32,1,23,1]]  不足的补0 

5文本数据增强

回忆数据增强法

接入google的翻译接口将源文本数据翻译为小语种在翻译回来.

缺点 在翻译短句子时候重复率高不能增大样本的特证空间. 

# google的翻译接口
from googletrans import Translatorn1_examp = '这家饭店不错'
n2_examp = '这家的价格便宜'translator = Translator()# 翻译translations = translator.translate([n1_examp, n2_examp], dest='en')
# 翻译后的结果
en_res = list(map(lambda x : x.text, translations))


http://www.mrgr.cn/news/93052.html

相关文章:

  • MySQL中的行级锁
  • LINUX网络基础 - 网络编程套接字,UDP与TCP
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.2线程池配置与写入限流
  • vocal~怎么没人告诉我?大数据技术组件(更新中......)
  • Vue 3 中 unref 的作用与 Vue Router currentRoute 的知识
  • 物理竞赛中的线性代数
  • 服务器时间同步
  • PAT乙级真题 / 知识点(1)
  • Metal学习笔记七:片元函数
  • C++学习之C++初识、C++对C语言增强、对C语言扩展
  • 静态时序分析:SDC约束命令set_clock_jitter详解
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化
  • vue videojs使用canvas截取视频画面
  • 基于 DataEase 的企业数据分析实践
  • 硅基流动nodejs流式输出
  • 使用vite创建vue3项目
  • T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取
  • AMD RDNA3 GPU架构解析
  • (十 九)趣学设计模式 之 中介者模式!
  • 【算法】手撕二分查找