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

人工智能学习:NLP文本处理的基本方法

一、分词

1、分词介绍

  • 概念
    分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符。分词过程就是找到这样分界符的过程。

    例如:

    Python
    传智教育是一家上市公司,旗下有黑马程序员品牌。我是在黑马这里学习人工智能
    
    ['传智', '教育', '是', '一家', '上市公司', ',', '旗下', '有', '黑马', '程序员', '品牌', '。', '我', '是', '在', '黑马', '这里', '学习', '人工智能']
    

  • 作用

    • 预处理:分词是文本处理的第一步,能够将文本分解成有意义的单元,为后续的分析提供基础。
    • 理解结构:分词有助于理解句子的基本构成和含义,尤其是在做文本分类、情感分析等任务时,分词是不可缺少的一步。
  • 常用的中文分词工具包括JiebaTHULACHanLP等。

2、Jieba分词工具

        Jieba(”结巴”)是一个开源的Python中文分词组件,它支持精确模式全模式搜索引擎模式三种分词模式。

Jieba的主要特点:

  • 支持多种分词模式:精确模式、全模式和搜索引擎模式,满足不同场景的需求。
  • 支持自定义词典:用户可以添加自定义的词语,提高分词准确率。
  • 支持词性标注:可以为每个词语标注词性,例如名词、动词等。
  • 支持关键词提取:可以提取文本中的关键词。
  • 支持并行分词:可以利用多核处理器加速分词。
  • 简单易用:API 简单明了,易于上手。
  • 开源免费:任何人都可以免费使用。

Jieba的安装:

Bash

pip install jieba -i https://pypi.mirrors.ustc.edu.cn/simple/

Jieba的基本使用:

  • 精确模式分词:试图将句子最精确地切分开,适合文本分析。

    Python
    import jieba
    content = "传智教育是一家上市公司,旗下有黑马程序员品牌。我是在黑马这里学习人工智能"
    # 精确模型:试图将句子最精确地切开,适合文本分析。也属于默认模式
    jieba.cut(sentence=content, cut_all=False)    # cut_all默认为False
    
    # 将返回一个生成器对象
    <generator object Tokenizer.cut at 0x7f8d9053e650>
    
    # 若需直接返回列表内容, 使用jieba.lcut即可
    jieba.lcut(sentence=content, cut_all=False)
    ['传智', '教育', '是', '一家', '上市公司', ',', '旗下', '有', '黑马', '程序员', '品牌', '。', '我', '是', '在', '黑马', '这里', '学习', '人工智能']
    
    
  • 全模式分词: 将句子中所有可以成词的词语都扫描出来,速度非常快,但是不能消除歧义。

    Python
    import jieba
    content = "传智教育是一家上市公司,旗下有黑马程序员品牌。我是在黑马这里学习人工智能"
    # 若需直接返回列表内容, 使用jieba.lcut即可
    jieba.lcut(sentence=content, cut_all=True)
    
    ['传', '智', '教育', '是', '一家', '上市', '上市公司', '公司', ',', '旗下', '下有', '黑马', '程序', '程序员', '品牌', '。', '我', '是', '在', '黑马', '这里', '学习', '人工', '人工智能', '智能']
    
    # 注意1:人工智能全模型分成三个词
    # 注意2:逗号和句号也给分成了词
    
    
  • 搜索引擎模式分词:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

    Python
    import jieba
    content = "传智教育是一家上市公司,旗下有黑马程序员品牌。我是在黑马这里学习人工智能"
    jieba.cut_for_search(sentence=content)
    
    # 将返回一个生成器对象
    <generator object Tokenizer.cut_for_search at 0x7f8d90e5a550>
    
    # 若需直接返回列表内容, 使用jieba.lcut_for_search即可
    jieba.lcut_for_search(sentence=content)
    ['传智', '教育', '是', '一家', '上市', '公司', '上市公司', ',', '旗下', '有', '黑马', '程序', '程序员', '品牌', '。', '我', '是', '在', '黑马', '这里', '学习', '人工', '智能', '人工智能']
    
    # 对'人工智能'等较长词汇都进行了再次分词。
    
  • 中文繁体分词:针对中国香港, 台湾地区的繁体文本进行分词。

    Python
    import jieba
    content = "煩惱即是菩提,我暫且不提"
    jieba.lcut(content)
    ['煩惱', '即', '是', '菩提', ',', '我', '暫且', '不', '提']
    
  • 使用用户自定义词典:添加自定义词典后, jieba能够准确识别词典中出现的词汇,提升整体的识别准确率。

    词典格式: 每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

    词典样式如下, 具体词性含义请参照7章节的jieba词性对照表, 将该词典存为userdict.txt, 方便之后加载使用。

    Python
    格式:word1 freq1 word_type1
    黑马程序员 5 n
    传智教育 6 n
    人工智能 7 nz
    学习 3
    上市 3
    Python
    import jieba
    
    content = '传智教育是一家上市公司,旗下有黑马程序员品牌。我是在黑马这里学习人工智能'
    # 1 没有使用用户自定义词典
    mydata = jieba.lcut(sentence=content, cut_all=False)
    print('mydata-->', mydata)
    
    # 2 使用用户自定义词典
    jieba.load_userdict("./userdict.txt")
    mydata2 = jieba.lcut(content, cut_all=False)
    print('mydata2-->', mydata2)
    
    # 没有使用用户自定义词典的分词效果
    mydata--> ['传智', '教育', '是', '一家', '上市公司', ',', '旗下', '有', '黑马', '程序员', '品牌', '。', '我', '是', '在', '黑马', '这里', '学习', '人工智能']
    
    # 使用用户自定义词典的分词效果
    mydata2--> ['传智教育', '是', '一家', '上市公司', ',', '旗下', '有', '黑马程序员', '品牌', '。', '我', '是', '在', '黑马', '这里', '学习', '人工智能']
    

二、命名实体识别

  • 概念

            命名实体识别(NER)是自然语言处理中的一个任务,旨在从文本中识别出特定类别的实体(如人名、地名、机构名、日期、时间等)。NER是信息抽取的一部分,帮助计算机识别出与任务相关的实体信息。

    例如:

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

    • 信息抽取:NER帮助从海量的文本中自动抽取出结构化的实体信息,为数据分析、问答系统等提供有价值的内容。
    • 问答系统:在智能问答系统中,NER能够帮助系统准确理解用户的提问,并提取相关的实体信息以便生成更准确的回答。
    • 文本理解:NER对于文本理解至关重要,它帮助系统识别出文本中的关键信息,例如人物、地点、组织等,进而为语义分析和事件抽取提供支持。
  • 处理工具

    • SpaCyNLTKStanford NERBERT(通过微调)LTPHanLP等都可以用于命名实体识别任务。
  • 举个例子

    Python
    from hanlp_restful import HanLPClient
    # 安装 pip install hanlp_restful
    # 创建客户端
    # auth 不填则匿名,zh表示中文
    HanLP = HanLPClient('https://www.hanlp.com/api',
                                            auth=None,
                                            language='zh')
    
    text = "鲁迅, 浙江绍兴人, 五四新文化运动的重要参与者, 代表作朝花夕拾."
    # 进行命名实体识别
    # 只选择一个任务,包含了分词和命名实体识别
    result = HanLP.parse(text, tasks=['ner/msra'])
    print(result)
    

    输出结果:

    Python
    {
        "tok/fine": [
            ["鲁迅", ",", "浙江", "绍兴人", ",", "五四", "新", "文化", "运动", "的", "重要", "参与者", ",", "代表作", "朝花夕拾", "."]
        ],
        "ner/msra": [
            [["鲁迅", "PERSON", 0, 1], ["浙江", "LOCATION", 2, 3], ["五四", "DATE", 5, 6], ["文化", "ORGANIZATION", 7, 8]]
        ]
    }
    

三、词性标注

  • 概念

    词性标注(Part-Of-Speech tagging, 简称POS)就是为文本中的每个词分配一个语法类别(即词性),例如名词、动词、形容词等。词性标注能够帮助模型理解词汇在句子中的语法功能,并为进一步的句法分析和语义分析提供支持。

  • 类型

    • 名词n:表示人、事物、地方等,例如 "中国""鲁迅"
    • 动词v:表示动作、存在等,例如 "跑""吃"
    • 形容词a:描述事物的性质或状态,例如 "大""美丽"
    • 副词d:修饰动词、形容词或其他副词,例如 "马上""非常"
    • 代词r:代替名词的词,例如 "我""他们"
    Python
    我爱自然语言处理
    
    ==>
    
    我/rr, 爱/v, 自然语言/n, 处理/vn
    
    rr: 人称代词
    v: 动词
    n: 名词
    vn: 动名词
    
  • 作用

    • 理解句子结构:通过词性标注,可以知道每个词在句子中的角色,帮助理解句子的语法结构。
    • 支持其他NLP任务:许多高级任务如命名实体识别(NER)、句法分析、情感分析等,通常依赖于词性标注的结果。
    • 歧义消解:词性标注有助于解决同一单词在不同上下文中可能具有不同词性的情况。例如,单词 “lead” 可能是动词(引导)也可能是名词(铅),通过词性标注可以解决这种歧义。
  • 处理工具

    • JiebaNLTKSpaCyStanford POS Tagger等是常用的词性标注工具。
  • 举个例子

    Python
    import jieba.posseg as pseg
    
    # 示例文本
    text = "我爱北京天安门"
    
    # 步骤 1: 分词并词性标注
    # # 结果返回一个装有pair元组的列表, 每个pair元组中分别是词汇及其对应的词性, 具体词性含义请参照[附录: jieba词性对照表]()
    words = pseg.lcut(text)
    print('words->', words)
    # 提取命名实体(人名、地名、组织机构名)
    named_entities = []
    for word, flag in words:
        if flag in ['r', 'v', 'ns']:    # r: 代词, v:动词, ns: 地名
            named_entities.append((word, flag))
    print('named_entities->', named_entities)
    

四、知识点总结

  • 什么是分词:

    • 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符, 分词过程就是找到这样分界符的过程.
  • 分词的作用:

    • 词作为语言语义理解的最小单元, 是人类理解文本语言的基础. 因此也是AI解决NLP领域高阶任务, 如自动问答, 机器翻译, 文本生成的重要基础环节.
  • 中文分词工具jieba:

    • 支持多种分词模式: 精确模式, 全模式, 搜索引擎模式
    • 支持中文繁体分词
    • 支持用户自定义词典
  • 什么是命名实体识别:

    • 命名实体: 通常我们将人名, 地名, 机构名等专有名词统称命名实体. 如: 周杰伦, 黑山县, 孔子学院, 24辊方钢矫直机.
    • 顾名思义, 命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体.
  • 命名实体识别的作用:

    • 同词汇一样, 命名实体也是人类理解文本的基础单元, 因此也是AI解决NLP领域高阶任务的重要基础环节.
  • 什么是词性标注:

    • 词性: 语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果, 常见的词性有14种, 如: 名词, 动词, 形容词等.
    • 顾名思义, 词性标注(Part-Of-Speech tagging, 简称POS)就是标注出一段文本中每个词汇的词性.
  • 词性标注的作用:

    • 词性标注以分词为基础, 是对文本语言的另一个角度的理解, 因此也常常成为AI解决NLP领域高阶任务的重要基础环节.
http://www.dtcms.com/a/361402.html

相关文章:

  • C++函数执行时间统计工具:轻量级性能分析的最佳实践
  • 触想轨道交通应用案例集锦(一)
  • PAT 1089 Insert or Merge
  • G156HAN04.0 宽温域高亮工业屏技术白皮书
  • 矩阵中寻找好子矩阵
  • leetcode5( 多数元素)
  • 力扣 23 912题(堆)
  • MySQL 体系结构
  • 09.《路由基础知识解析和实践》
  • 【C#实战】使用ListBox控件与生成器模式构建灵活多变的金融资产管理系统
  • 金融数据安全
  • 云原生新手入门完整学习指南
  • 基于单片机智能家居语音控制系统
  • 《IC验证必看|随机稳定性 / 再现性》
  • 手把手教你搭建 UDP 多人聊天室(附完整源码)
  • 网络层和数据链路层
  • 【LeetCode热题100道笔记+动画】乘积最大子数组
  • 构建深度学习音频识别模型:从数据预处理到性能评估
  • PitVis-2023挑战赛:内镜下垂体瘤手术视频中的手术流程识别|文献速递-深度学习人工智能医疗图像
  • 1. 从零开始搭建微服务架构1.0(登录模块)
  • 安科瑞微电网智慧能源平台:构建源网荷储一体化新型电力系统
  • RAG初筛混合方案 - bm25+vector
  • 大规模异构数据挖掘与数据架构
  • 56_基于深度学习的X光安检危险物品检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 无需服务器也能建网站:Docsify+cpolar让技术文档分享像写笔记一样简单
  • Typescript入门-泛型讲解
  • Ansible 变量全解析与实践
  • UniApp + SignalR + Asp.net Core 做一个聊天IM,含emoji 表情包
  • 53_基于深度学习的野生菌菇检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 通义灵码+支付 MCP:30 分钟实现创作打赏智能体