zoukankan      html  css  js  c++  java
  • NLP学习笔记04---文本处理(分词、词过滤、文本表示、one-hot、文本相似度、TF-IDF)

    1.文本处理的一般流程

    上图中:

    清洗包括无用的标签(例如从网上爬取的文本中可能包含html标签)、特殊的符号(!感叹号、省略号等)、停用词、大写转小写

    标准化包括stemming、lemmazatic(就是对英文词汇中的名词、动词转换化标准形态)

    本篇博客主要包括:分词(word segmentation)、spell correction(拼写纠错)、stop words removal(停用词)、stemming(标准化)

    2.分词

    (1)主要的分词工具

    利用conda安装jieba分词库

    具体参见:https://www.cnblogs.com/luckyplj/p/12673055.html

    jieba分词入门案例:

    import jieba
    
    # 基于jieba的分词
    seg_list = jieba.cut("贪心学院专注于人工智能教育", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))
    
    jieba.add_word("贪心学院")
    seg_list = jieba.cut("贪心学院专注于人工智能教育", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))

    效果图:

    (2)分词算法介绍:

    <1>前向匹配算法(forward-max matching)---它是一种贪心算法

    上图过程解释:设置最大匹配长度为5,对句子从前到后与词典进行匹配,若未匹配到词,则缩减匹配词的长度,再进行尝试,直到匹配到为止。

    算法区别:

    贪心算法-----只能选择当前的最有解。

    DP(动态规划)-----能够找到全局的最优解(能够看到全局)

    <2>后向匹配(back-ward max matching)

    推荐阅读博客:中文分词引擎 java 实现 — 正向最大、逆向最大、双向最大匹配法

    https://blog.csdn.net/selinda001/article/details/79345072    

    最大匹配算法的缺点:局部最优,效率低,不能考虑语义

    <3>考虑语义(Incorporate semantic)

    执行过程如下图:

    上图中,利用语言模型 unigram language model,计算各个词在出现的联合分布概率。

    注意:直接使用unigram 语言模型多个概率相乘极有可能出现underflow(向下溢出,即double或float类型无法表示)

    优化方法:对概率P取对数,将相乘转换为相加

    3.拼写纠错

    找到词的最短编辑距离

    方法优化:通过replace(替换)、add(添加)、delete(删除)生成编辑距离为1或2的字符串。

    上图中对生成的字符串进行过滤方法如下所示:

    上图中的argmax公式表示选择p(c/s)最大的c,将其返回给用户。

    利用贝叶斯公式将其简化为p(s/c)*p(c),贝叶斯公式的推导见上图

    4.词过滤

    对于NLP的应用,我们通常将停用词、出现频率很低的词过滤掉。

    5.文本表示

    (1)one-hot表示

    <1>单词的表示形式

    将词典看成一个一维向量,若词典里的单词就是该单词,则一维数组的对应位置标为1

    <2>句子的表达形式(不统计词频)

    将词典看成一个一维向量,若词典里的单词在句子中出现,则一维数组的对应位置标为1

    <3>句子的表达形式(统计词频)

    注意:

    并不是出现的越多就越重要

    并不是出现的越少就越不重要。

    6.文本的相似度

    (1)基于欧式距离的文本相似度

    欧式距离越小,句子相似度越大(成反比)。

    (2)余弦相似度

    余弦相似度越大,句子的相似度也越大。(成正比)

    7.TF-IDF文本表示

    tf表示在文档d中w这个词出现的次数(词频),idf表示单词的重要性。

  • 相关阅读:
    Mysql配置文件模板
    shell命令记录
    SuSE Linux Enterprise Server
    安装jdk1.8
    云南-第一个应用节点-ssh登录-卡顿的问题
    Python重新安装pip
    Centos6.5修改镜像为国内的阿里云源
    supervisord.conf
    Pandas连接Mysql数据库
    Vim速查命令简版
  • 原文地址:https://www.cnblogs.com/luckyplj/p/12760735.html
Copyright © 2011-2022 走看看