精华内容
下载资源
问答
  • 一、文本处理流程 文本清洗:html标签与转义字符、多余空格、根据需要清除邮箱、账号、网址、手机号、作者信息等信息 预处理:去除停用词、加载自定义词库(实体词库、垂直领域词库)、分词 特征提取:...

    一、文本处理流程

    1. 文本清洗:html标签与转义字符、多余空格、根据需要清除邮箱、账号、网址、手机号、作者信息等信息

    2. 预处理:去除停用词、加载自定义词库(实体词库、垂直领域词库)、分词

    3. 特征提取:关键词、实体词

    4. 建模:文本分类、文本聚类、情感分析、标签提取

    5. 优化:停用词库与自定义词库清洗与丰富、文本标签清洗、模型调整

    6. 效果评估:满足线上使用要求,准确率、速度

    7. 上线部署:部署api接口

    二、NLP算法

    • 深度学习在自然语言处理当中,除了在分类问题上能够取得较好效果外(如单选问题:情感分类、文本分类、正确答案分类问题等),在信息抽取上,尤其是在元组抽取上基本上是一塌糊涂,在工业场景下很难达到实用水准
    • 目前各种评测集大多是人为标注的,人为标注的大多为干净环境下的较为规范的文本,而且省略了真实生产环节中的多个环节。在评测环节中达到的诸多state-of-art方法,在真实应用场景下泛化能力很差,大多仅仅是为了刷榜而刷榜。
    • 目前关于知识图谱的构建环节中,数据大多数都还是来自于结构化数据,半结构化信息抽取次之,非结构化数据抽取最少。半结构化信息抽取,即表格信息抽取最为危险,一个单元格错误很有可能导致所有数据都出现错误。非结构化抽取中,实体识别和实体关系识别难度相当大
    • 工业场景下命名实体识别,标配的BILSTM+CRF实际上只是辅助手段,工业界还是以领域实体字典匹配为主,大厂中往往在后者有很大的用户日志,这种日志包括大量的实体信息。因此,生产环节中的实体识别工作中,基础性词性的构建和扩展工作显得尤为重要。
    • 目前关于知识图谱推理问题,严格意义上不属于推理的范畴,最多只能相当于是知识补全问题,如评测中的知识推理任务,是三元组补全问题。
    • 目前舆情分析还是处于初级阶段。目前舆情分析还停留在以表层计量为主,配以浅层句子级情感分析和主题挖掘技术的分析。对于深层次事件演化以及对象级情感分析依旧还处于初级阶段。
    • Bert本质上仅仅是个编码器,是word2vec的升级版而已,不是无所不能,仅仅是编码能力强,向量表示上语义更为丰富,然而大多人都装糊涂。
    • 学界和业界最大的区别在于,学界以探索前沿为目的,提新概念,然后搭个草图就结束,目光并不长远,打完这一战就不知道下一战打什么,下一战该去哪里打,什么时候打,或者打一枪换个阵地再打。而业界,往往面临着生存问题,需要考虑实际问题,还是以解决实际问题为主,因此没必要把学界的那一套理念融入到生产环节中,要根据实际情况制定自己的方法
    • 利用结构化数据,尤其是百科类infobox数据,采集下来,存入到Neo4j图数据库中,就称自己建立了知识图谱的做法是伪知识图谱做法。基于这类知识图谱,再搞个简单的问答系统,就标榜自己是基于知识图谱的智能问答,实际上很肤浅。
    • 知识图谱不是结构化知识的可视化(不是两个点几条边)那么简单,那叫知识的可视化,不是知识图谱。知识图谱的核心在于知识的图谱化,特点在于知识的表示方法和图谱存储结构,前者决定了知识的抽象表示维度,后者决定了知识运行的可行性,图算法(图遍历、联通图、最短路径)。基于图谱存储结构,进行知识的游走,进行知识表征和未知知识的预测。
    • 物以稀为贵,大家都能获取到的知识,往往价值都很低。知识图谱也是这样,只有做专门性的具有数据壁垒的知识图谱,才能带来商业价值。
    • 目前智能问答,大多都是人工智障,通用型的闲聊型问答大多是个智障,多轮对话缺失答非所问等问题层出不穷。垂直性的问答才是出路,但真正用心做的太少,大多都是处于demo级别。
    • 大多数微信自然语言处理软文实际上都不可不看,纯属浪费时间。尤其是在对内容的分析上,大多是抓语料,调包统计词频,提取关键词,调包情感分析,做柱状图,做折线图,做主题词云,分析方法上千篇一律。应该从根本上去做方法上的创新,这样才能有营养,从根本上来说才能有营养可言。文本分析应该从浅层分析走向深层分析,更好地挖掘文本的语义信息。
    • 目前百科类知识图谱的构建工作有很多,重复性的工作不少。基于开放类百科知识图谱的数据获取接口有复旦等开放出来,可以应用到基本的概念下实体查询,实体属性查询等,但目前仅仅只能做到一度。
    • 基于知识图谱的问答目前的难点在于两个方面,1)多度也称为多跳问题,如姚明的老婆是谁,可以走14条回答,但姚明的老婆的女儿是谁则回答不出来,这种本质上是实体与属性以及实体与实体关系的分类问题。2)多轮问答问题。多轮分成两种,一种是指代补全问答, 如前一句问北京的天气,后者省略“的天气”这一词,而只说“北京”,这个需要进行意图判定并准确加载相应的问答槽。另一种是追问式多轮问答,典型的在天气查询或者酒店预订等垂直性问答任务上。大家要抓住这两个方面去做。
    • 关系挖掘是信息抽取的重要里程碑,理解了实体与实体、实体与属性、属性与属性、实体与事件、事件与事件的关系是解决真正语义理解的基础,但目前,这方面,在工业界实际运用中,特定领域中模板的性能要比深度学习多得多,学界大多采用端到端模型进行实验,在这方面还难以超越模版性能。

    1、TF-IDF

    1)原理:词频-逆文档频率;一种用于信息检索与文本挖掘的常用加权技术;一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度,字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

    2)主要思想:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

    3)公式:

              TF=在某一文本中词条w出现的次数/该文本中所有的词条数目

              IDF=log(语料库的文档总数/(包含词条w的文档数+1)),避免分母为0

              TF-IDF=TF*IDF

    4)优缺点:实现简单,容易理解,但未考虑词语语义信息,无法处理一词多义与一义多词

    5)应用:搜索引擎,关键词提取,文本相似性计算,文本摘要

    6)python调参:

    提取关键词

    keywords = jieba.analyse.extract_tags(sentence, topK=10, withWeight=False, allowPOS=())    # 主要调参指定词性的词

    提取特征向量

    tfidf = TfidfVectorizer(ngram_range=(1, 2), min_df=1, max_df=0.9, token_pattern=r"(?u)\b\w+\b", stop_words=stopwords, max_features=1000)
    '''
        ngram_range=(1, 2) : 词组长度为1和2
        min_df : 忽略出现频率小于1的词
        max_df : 忽略在百分之九十以上的文本中出现过的词
        token_pattern=r"(?u)\b\w+\b" : 包含单字
        stop_words : 停用词表
        max_features=1000: 最大特征向量维度
    '''

    2、Textrank

    1)原理:将每个句子看成一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。通过pagerank算法(两个假设:数量假设,页面A被其他网页链接越多,页面A越重要;质量假设,质量越高的页面链接指向页面A,页面A越重要)计算得到的重要性最高的若干句子可以当作摘要。PageRank主要用于对在线搜索结果中的网页进行排序

    PageRank的核心公式是PageRank值的计算公式。公式如下:

    其中,PR(Vi)表示结点Vi的rank值,In(Vi)表示结点Vi的前驱结点集合,Out(Vj)表示结点Vj的后继结点集合。
    这个公式来自于《统计学习方法》,等号右边的平滑项(通过某种处理,避免一些突变的畸形值,尽可能接近实际情况)不是(1-d),而是(1-d)/n。

    是被研究的页面,链入页面的数量,链出页面的数量,而N是所有页面的数量。

    在文本自动摘要的案例中,TextRank和PageRank的相似之处在于:

    • 用句子代替网页

    • 任意两个句子的相似性等价于网页转换概率

    • 相似性得分存储在一个方形矩阵中,类似于PageRank的矩阵M

    不过公式有些小的差别,那就是用句子的相似度类比于网页转移概率,用归一化的句子相似度代替了PageRank中相等的转移概率,这意味着在TextRank中,所有节点的转移概率不会完全相等。
    在这里插入图片描述

    TextRank算法是一种抽取式的无监督的文本摘要方法。让我们看一下我们将遵循的TextRank算法的流程:

    3、知识库构建

    • 停用词库
    • 语料库
    • 自定义分词词库
    • 人物库
    • 垂直领域词库

    4、知识图谱

    • 三元组
    • NEO4教程:Neo4j是一个世界领先的开源图形数据库。 它是由Neo技术使用Java语言完全开发的。
    • CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。

    Neo4j CQL:

    • 它是Neo4j图形数据库的查询语言。

    • 它是一种声明性模式匹配语言

    • 它遵循SQL语法。

    • 它的语法是非常简单且人性化、可读的格式。

    5、预训练模型

    语言模型

    预训练模型(Pre-trained Models,PTMs)

    深度学习时代,为了充分训练深层模型参数防止过拟合,通常需要更多标注数据喂养。在NLP领域,标注数据更是一个昂贵资源。PTMs从大量无标注数据中进行预训练使许多NLP任务获得显著的性能提升。总的来看,预训练模型PTMs的优势包括:

    1. 在庞大的无标注数据上进行预训练可以获取更通用的语言表示,并有利于下游任务;
    2. 为模型提供了一个更好的初始化参数,在目标任务上具备更好的泛化性能、并加速收敛;
    3. 是一种有效的正则化手段,避免在小数据集上过拟合(一个随机初始化的深层模型容易对小数据集过拟合);

    词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,这也是分布式表示:向量的每一维度都没有实际意义,而整体代表一个具体概念。

    分布式表示相较于传统的独热编码(one-hot)表示具备更强的表示能力,而独热编码存在维度灾难和语义鸿沟(不能进行相似度计算)等问题。传统的分布式表示方法,如矩阵分解(SVD/LSA)、LDA等均是根据全局语料进行训练,是机器学习时代的产物。PTMs也属于分布式表示的范畴。

    PTMs两大范式:「浅层词嵌入」和「预训练编码器」。

    浅层词嵌入( Non-Contextual Embeddings):即词向量,其主要特点是学习到的是上下文独立的静态词嵌入,其主要代表如下。这一类词嵌入通常采取浅层网络进行训练,而应用于下游任务时,整个模型的其余部分仍需要从头开始学习。因此,对于这一范式的PTMs没有必要采取深层神经网络进行训练,采取浅层网络加速训练也可以产生好的词嵌入。

    • NNLM
    • word2vec(CBOW、Skip-Gram)
    • Glove

    浅层词嵌入的主要缺陷为:

    • 词嵌入与上下文无关,每个单词的嵌入向量始终是相同,因此不能解决一词多义的问题。
    • 通常会出现OOV问题(out of vocabulary,未登录词),为了解决这个问题,相关文献提出了字符级表示或sub-word表示,如CharCNN 、FastText和 Byte-Pair Encoding 。

    预训练编码器(Contextual Embeddings:主要目的是通过一个预训练的编码器能够输出上下文相关的词向量,解决一词多义的问题。这一类预训练编码器输出的向量称之为「上下文相关的词嵌入」。这一类「预训练编码器」范式的PTMs主要代表有ELMOGPT-1BERTXLNet等。

    • CNN(序列模型):TEXTCNN,设定窗口,然后对窗口内的若干词进行卷积操作,得到这个窗口内的词的嵌入表示
    • RNN(序列模型):基于LSTM/GRU的,基于单向(从左向右)或者双向的RNN模型,对整个序列进行建模,得到每个词的语境下的嵌入表示
    • 全连接自注意力模型(self-attention,非序列化模型):使用全连接图,来建立任意两个词之间的关系,并通过大规模无标注数据,让模型自动学习结构化信息。通常,两个词之间的”连接权重“会被自注意力机制动态计算。典型的代表就是Transformer中的multi-head self-attention网络结构了
    • ELMO
    • BERT
    • GPT

    上图中,(a)里面的卷积网络,可以认为窗口为3,例如 h2 由 x1、x2、x3 决定。(b)里面的 h2 由 h1 ,h3  和 x2 决定,具体可以使用LSTM, GRU等网络结构。(c)有点复杂,可以结合Transformer网络结构来理解。

    分析:

    序列模型:局部性偏见,难于捕捉长距离交互;但是容易训练,并在若干NLP任务上取得了不错的结果;

    非序列模型:(代表是Transformer)更强大,使用的参数更多,可以更好的覆盖长距离依赖的问题;但是,需要大规模训练语料(可以是unlabel的!),容易在中小规模数据上过拟合。

    当然,Transformer已经是目前几年的研究热点,不单单在NLP领域,在CV领域和speech领域也越来越引起重视,俨然成为了“中流砥柱”!

    上图给出了NLP各种编码器间的对比。PTMs中预训练编码器通常采用LSTM和Transformer(Transformer-XL),其中Transformer又依据其attention-mask方式分为Transformer-Encoder和Transformer-Decoder两部分。此外,Transformer也可看作是一种图神经网络GNN。

    三、参考文献

    1. 实话实说:中文自然语言处理的N个真实情况

    2. NLP中预训练模型的综述I

    3. PTMs:NLP预训练模型的全面总结

    4. 2020年3月18日,邱锡鹏老师发表了关于NLP预训练模型的综述《Pre-trained Models for Natural Language Processing: A Survey》,这是一篇全面的综述,系统地对PTMs进行了归纳分类

    展开全文
  • • 了解自然语言处理基本知识    • 掌握循环神经网络算法    • 掌握自然语言处理关键技术    • 了解自然语言处理的应用 HMM模型    • 隐马尔科夫...

    学习目标
       • 了解自然语言处理基本知识
       • 掌握循环神经网络算法
       • 掌握自然语言处理关键技术
       • 了解自然语言处理的应用

    HMM模型
       • 隐马尔科夫模型(Hidden Markov Model, HMM)是统计模型,它用来描述含有隐含参数的马尔科夫过程。用数学来表示为
                 maxP(h|w)=maxP(〖h_1 h_2…h_n |w〗_1 w_2…w_n)
       • 对句子分词为例,其中,w=w_1 w_2…w_n为输入的句子,n为句子长度,w_i为句子中的每个字,h=h_1 h_2…h_n为输出的标签(B\E\M\S)。
       在这里插入图片描述

          比如有三个骰子,有6个面D6、4个面D4、8个面的D8,每个面的概率一样。开始掷骰子,先从三个骰子中随机选一个,然后掷骰子。
    在这里插入图片描述
          比如掷骰子10次,得到10个有序的数字(是一个可以看到的状态序列,称之为可见状态列)。从状态列中可以得知数字是从哪个骰子摇出来的,这个骰子的不可见的、只能通过推算得到的叫做隐含的状态列
    在这里插入图片描述
             • 观测独立性假设:每个字仅仅与当前字有关。
             • 转移概率:一个隐藏状态到下一个隐藏状态的概率;
             • 发射概率:隐藏状态到观测状态的芥蓝菜
             • 通过设置P(h_k |h_(k-1))=0,可以排除类似BBB、EM等不合理的组合。
             • 在HMM中,求解maxP(w│h)P(h)的常用方法是Viterbi算法。
    条件随机场
       • 设X=(X_1,X_2,…,X_n)和Y=(Y_1,Y_2,…,Y_m)是联合随机变量,若Y构成一个无向图G=(V,E)表示的马尔科夫模型,则其条件概率P(Y|X)称为条件随机场(Conditional Random Field, CRF)。
    在这里插入图片描述
          • 完整的线性链CRF表示为:
                 P(y│x)=1/(Z(x)) exp⁡(∑_(i,k)▒λ_k t_k (y_(i-1),y_i,i)+∑_(i,l)▒μ_l s_l (y_i,X,i))
          • 其中,Z(x)=∑_y▒〖exp⁡(∑_(i,k)▒λ_k t_k (y_(i-1),y_i,i)+∑_(i,l)▒μ_l s_l (y_i,X,i))〗为规范化因子,t_k (y_(i-1),y_i,i)和s_l (y_i,X,i)为转移函数和状态函数,λ_k和μ_l为转移函数和状态函数对应的权值。
          • 将上式简化为:
                P(y│x)=1/(Z(x)) exp⁡(∑_j▒〖∑_i▒w_j f_j 〗 (y_(i-1),y_i,x,i))
          • 其中,Z(x)=∑_y▒〖exp⁡(∑_j▒〖∑_i▒w_j f_j 〗(y_(i-1),y_i,x,i)" " 〗,f_j (y_(i-1),y_i,x,i)为t_k (y_(i-1),y_i,i)和s_l (y_i,X,i)的统一符号表示。
    RNN
       • 不同于传统的机器翻译模型仅仅考虑有限的前缀词汇信息作为语义模型的条件项,递归神经网络(RNN)有能力将语料集中的全部前序词汇纳入模型的考虑范围。
    在这里插入图片描述
             如果预测句子的下一个单词是什么,一般需要当前单词和前一个单词。就是说RNN的隐含层节点之间有连接。RNN的隐藏层也是全连接的。RNN的主要作用就是将先前的信息运用到当前,有一定的记忆功能。但会出现一个长期依赖的问题。
    LSTM
       • 长短期记忆网络(Long Short Term Memory,LSTM):一种特殊的 RNN 类型,可以学习长期依赖信息。
    在这里插入图片描述
          • LSTM 通过刻意的设计来避免长期依赖问题。记忆长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。LSTM是一种拥有三个“门”结构的特殊网络结构。
          • LSTM 靠一些“门”的结构让信息有选择性地影响RNN中每个时刻的状态。所谓“门”的结构就是一个使用sigmod神经网络和一个按位做乘法的操作,这两个操作合在一起就是一个“门”结构。之所以该结构叫做门是因为使用sigmod作为激活函数的全连接神经网络层会输出一个0到1之间的值,描述当前输入有多少信息量可以通过这个结构,于是这个结构的功能就类似于一扇门,当门打开时(sigmod输出为1时),全部信息都可以通过;当门关上时(sigmod输出为0),任何信息都无法通过。
    GRU
       • GRU可以看成是LSTM的变种,GRU把LSTM中的遗忘门输入门更新门来替代。 把cell state和隐状态h_t进行合并,在计算当前时刻新信息的方法和LSTM有所不同。
    在这里插入图片描述
          • 重置门:rt
          • 更新门:Zt
          • 候选记忆单元:ht
          • 当前时刻:ht
    双向RNN:BiRNN
       • 在经典的循环神经网络中,状态的传输是从前往后单向的。然而,在有些问题中,当前时刻的输出不仅和之前的状态有关系,也和之后的状态相关。这时就需要双向RNN(BiRNN)来解决这类问题。例如预测一个语句中缺失的单词不仅需要根据前文来判断,也需要根据后面的内容,这时双向RNN就可以发挥它的作用。双向RNN是由两个RNN上下叠加在一起组成的。输出由这两个RNN的状态共同决定。
    在这里插入图片描述

    展开全文
  • 1.1 关键词抽取的算法模型 (1)TF-IDF (2)TextRank (3)基于语义的统计语言实现关键词抽取 1.2 短语抽取的算法模型 (1)基于互信息和左右信息熵算法实现短语抽取 (2)LDA (3)TextRank 1.3 自动摘要抽取算法...
    1. 语义模型常用算法及详解
      1.1 关键词抽取的算法模型
      (1)TF-IDF
      (2)TextRank
      (3)基于语义的统计语言实现关键词抽取

      1.2 短语抽取的算法模型
      (1)基于互信息和左右信息熵算法实现短语抽取
      (2)LDA
      (3)TextRank

      1.3 自动摘要抽取算法模型
      (1)决策树算法
      (2)逻辑回归算法
      (3)贝叶斯算法

      1.4 计算任意词距离算法模型
      (1)FP-Growth算法
      (2)N-Gram算法
      (3)BP算法

      1.5 拼音汉子混合识别算法
      (1)贝叶斯算法模型
      (2)HMM算法模型
      (3)RNN神经网络模型

      1.6 文本自动生成模型
      (1)基于关键词的文本自动生成模型
      (2)RNN模型

    2. NLP基础算法
      2.1 分词算法
      (1)Dijkstra算法
      该算法是一个最短路径搜索图的算法,算法本身应用的场景也很多。
      (2)AC-DoubleArrayTrie
      该算法结合有限状态机和双数组Trie树两个数据结构的优势实现

      2.2 词性标注算法
      (1)最大熵算法
      该算法是一种不确定信息最大保留的算法
      (2)CRF算法
      该算法的思想主要来源于最大熵模型和隐马尔科夫模型

      2.3 实体识别算法
      (1)马尔可夫逻辑网算法
      该算法是马尔科夫网络的一种延伸,是在马尔科夫网络的基础上添加一阶逻辑推理的功能。
      (2)DIPRE算法

      2.4 文本预测算法
      (1)LSTM算法
      LSTM算法是递归神经网络的一种,它能实现对历史信息的长期记忆。

    参考:
    自然语言处理技术 兰红云

    展开全文
  • 文章目录前言一、文本数据处理基础1.1、数字特征和分类特征1.2、文本处理步骤1.2.1、分割(Tokenization:文本—>单词/字母)1.2.2、one-hot编码1.2.3、词嵌入(word embedding)1.2.4、使用网络模型学习:二、...

    前言

    ​ 最近要使用NLP的知识,所以边学习边总结一下自然语言处理中常用的算法,本笔记主要来源于油管shusengwang的视频,链接在此:https://www.youtube.com/watch?v=NWcShtqr8kc&list=PLvOO0btloRnuTUGN4XqO85eKPeFSZsEqK

    一、文本数据处理基础

    1.1、数字特征和分类特征

    ​  文字数据具有数字特征和分类特征,机器学习只能理解数字特征,而无法理解分类特征,为了让计算机能够处理带有分类特征信息的文字,就必须要讲其分类特征转换成数字特征。举个例子:
    在这里插入图片描述
    ​  在上面这张图中,“age”一栏中表示的是数字特征,不用处理。“gender”和“nationality”一栏中的数据具有分类特征。这时需要将其变为数字特征。我们使用one-hot向量来表示文字的分类特征,而不是使用简单的1,2,3…数字来表示,原因是1代表的文字和2代表的文字相加不得3代表的文字信息,而使用one-hot向量相加确比较合理

    ​ 使用one-hot方法我们可以表示:

    US 为[1,0,0…];

    China 为 [0,1,0…];

    India 为 [0,0,1…]。

    ​  这样第一行文字信息可以使用向量 [35,1,1,0,0…]表示,第三行信息可以使用向量 [29,0,0,0,1…]表示。(如果“nationality”为空,我们可以使用全零向量表示)

    1.2、文本处理步骤

    1.2.1、分割(Tokenization:文本—>单词/字母)

    ​  分割就是将一句话分解成一个个单词或者一个个字母,为了方便讲解我们以分割成单词讲述。

    1.2.2、one-hot编码

    ​  此时是使用字典统计一下各个单词在整个文本中所出现过的次数,使用key记录文字,使用value记录单词出现的次数。
    在这里插入图片描述
    ​  然后按照词频递减的顺序排列,即表最前是出现频率最高的,表最后的单词是出现频率最低的。接着将字典的value部分按顺序从上到下使用索引1,2,3…填充,即每个单词可以使用一个数字表示(如下图)。整个字典的长度就是词汇量,也等于one-hot向量的长度。这样处理的目的就是保留常用词,去掉低频词,删除词汇量尾部的词可以排除拼写错误的单词或者人名等单词,最主要的原因还是降低one-hot向量的长度,以此加快计算速度。

    ​  删除词汇量中词频低的数据会造成有一部分单词在词汇量中找不到,在处理时可以把他们直接不处理或者使用全零向量填充。

    1.2.3、词嵌入(word embedding)

    1. 先统一长度(多删少补):一般文字信息处理后使用矩阵表示,这就要求文字长度必须对齐,所以如果待处理 的文字长度大于指定长度,就省略前面或者后面;如果长度小于指定长度,就使用 空格补全。

    2. 然后做词嵌入:将每个单词的高维one-hot向量映射到低维连续向量中,如

      cat: (-0.065, -0.035, 0.019, -0.026, 0.085,…)

       					**dog**: (-0.019, -0.076, 0.044, 0.021,0.095,…)
      

      ​ 词嵌入同时使相似词映射到相似方向(语义相似性被编码了)算是优点之一。
      在这里插入图片描述
        如上图所示,e为one-hot向量,P为参数矩阵,x为转换后的词向量,其实也可以看出P矩阵中每一列都是一个词向量,维度d为词嵌入的维度,由人工设定;维度v为词汇量

    1.2.4、使用网络模型学习:

    ​  神经网络输入的数据都是词向量,而不是单纯的one-hot表示的文本信息。所以接下来我们主要讲解主要的网络模型。

    二、RNN(循环神经网络)

    2.1、Simple RNN

    2.1.1、简介

    ​  循环神经网络类似人类阅读一样,一次输入一个单词,然后不停的循环输入单词,直到整个句子结束,适用于处理文本、语音等带有时序序列信息的数据。RNN的网络结构如下图所示:首先将一个文字经过词嵌入处理转换成向量x,然后传入给神经网络参数矩阵A,输出状态向量h。接着在输入下一个文字数据…,如此反复的循环处理文字便是RNN的主要思想。其中每个输出状态h仅包含前面所有单词的信息,最后的输出状态h则包含整个句子的信息。注意整个RNN只有一个参数矩阵A,右边的是将左边网络的展开。
    在这里插入图片描述
    ​  其中参数矩阵A的现状如下图所示,最后使用双曲正切函数tanh将参数规整到[-1,1]之间,使用该函数是为了避免矩阵参数过大或过小。
    在这里插入图片描述
    ​  矩阵参数的数量为:输出状态h和词向量x的维度均为人工设置。

    在这里插入图片描述
    ​  Simple RNN可以选择只输出最后一个状态向量ht,也可以选择输出所有的状态向量h。

    2.1.2、缺点

    ​  Simple RNN适合处理简短的文字信息,对于较长文字输入时,该模型在深层次求导(反向传播)时会遇到梯度消失,所以会遗忘之前的文字信息,就像鱼一样只要7秒记忆。

    2.2、LSTM(long short-term memory)

    ​  该模型相比于Simple RNN可以有效避免梯度消失,延长’‘记忆’’。它和Simple RNN的结构区别如下图所示:LSTM使用"传输带C"的方法避免梯度消失从而避免过早遗忘的问题

    在这里插入图片描述
    ​  LSTM同时使用各种”门“来有选择的对数据进行处理;主要有”遗忘门“、”输入门“、”输出门“和一个”new value“。下面一一讲解:

    2.2.1、遗忘门

    ​  如图所示,遗忘门使用上一个状态h和当前词向量x作为输入,处理过程和Simple RNN一样,使用一个神经网络参数矩阵W记录信息,输出使用开关函数 σ 处理后输出 f(f 的参数在[0,1]之间);最后将输出 f 向量与传输带C矩阵做点乘,达到选择性记忆和遗忘的功能。
    在这里插入图片描述

    2.2.2、输入门

    ​  输入门将上一状态 h 和当前输入词向量 x 连接后经过 σ 开关函数后输出 i
    在这里插入图片描述

    2.2.3、New Value

      此外,将前一状态 h 和当前数据 x 链接后使用 tanh 函数处理输出向量 c ;
    在这里插入图片描述

    ​  然后对传输带进行计算,传输带总输出为: f × C + i × c

    在这里插入图片描述

    2.2.4、输出门

      输出门使用 σ 开关函数连接上一状态输出 h 和当前输入 x 得到向量 o
    在这里插入图片描述
    ​  然后对传送带向量 C 先做 tanh 处理再与输出门点乘得到最新的状态输出 h 。

    在这里插入图片描述

    2.2.5、参数量

    ​  一共有四个参数矩阵,每个矩阵的形状均一致,如下图所示:
    在这里插入图片描述

    2.3、多层RNN(Stacked RNN)

    ​ 类似于搭建CNN,RNN的搭建也可以使用多层,值得注意的是:**只有最后一层可以选择不输出所有的状态h,只有当对整个句子处理完再输出即可;**而其他层均必须输出每次的状态h以传输给下一层网络。

    在这里插入图片描述

    2.4、双向RNN(Bi RNN)

      无论是Simple RNN 还是LSTM,都会或多或少的产生遗忘的问题。为了再次降低过早遗忘,又诞生出了双向RNN,设计结构如下图所示:
    在这里插入图片描述

    三、基于RNN做文本生成

    3.1、简介

    ​  文本生成简单理解就是事先使用RNN对大量的文本信息进行学习,然后使用一小段固定长度的文本作为开头,循环输入进RNN中,使RNN能够持续预测下一个单词或字母,最后完成整段文本信息的输出。

    ​  文本生成的原理还属于监督学习,所以文本生成的风格完全取决于训练数据的风格。

    3.2、准备训练数据

    ​  在给定的一段文本训练数据,可以将其按单词进行分割,也可以按字符进行分割,为了使词汇量较小,一般使用字符进行分割、使用两个列表分别存储文本片段(segment)和下一个字符(next_char)。举个例子如下图所示:其中步长为3。
    在这里插入图片描述
    ​ 接着使用第一章讲的方法将字符转成one-hot向量,注意这里不需要将one-hot向量再转为低维度的词向量,因为这里的词汇量本身不大(包括字符、空格、标点符号等最多一百左右)。接着上边的例子的参数数量如下图所示:词汇量为57,segment长度为60,取步长为3则总共的 segment 数量大概为20万左右。所以输入数据的格式为 [60,57],输出数据格式为 [57,1]。

    在这里插入图片描述

    3.3、网络搭建

    ​  基于keras使用LSTM模型搭建神经网络,网络的各项参数设置如下图所示:
    在这里插入图片描述

    3.4、网络预测

    ​  在网络预测下一个单词时可以使用不同的选择方案,这里主要说三个。

    1. 第一个是使用完全贪婪策略,每次直接选择softmax概率最大的预测单词作为输出,这中方案会缺少随机性,导致后续的输出完全取决于最开始的输入,所以效果不太好。
    2. 第二种方案是使用依概率随机的方案进行选择下一个单词,这样导致随机性可能过大,如果使用字符分割的方案会导致输出很多错误的单词,所以也不是太推荐。
    3. 第三种方案就是综合上面两种方案的思路,使预测在贪婪和随机之间取一个折中值,使用一个温度超参数([0,1])来设置折中程度。这样原本大的概率会变大,小的概率值会变的更小一些。具体方法是先对预测概率进行下图中得处理后再依概率随机选择。

    在这里插入图片描述

    四、机器翻译(仅使用Seq2Seq模型)

    ​  机器翻译的方法有很多种,我们这里只介绍sequence-to-sequence模型,做机器翻译和文本生成是不一样的,因为两种语言不管用字符分割(char_level)还是单词分割(word_level),他们的词汇表都是不一样的,所以必须使用两个词汇表分别存储各自的词汇表。(实际上机器翻译大多使用单词分割)

    4.1、创建词汇表(分割)

    ​  为了方便讲述,使用字符分割(实际应用上却不是)。值得注意的是,目标语言(要翻译的语言)需要在字典中额外加入一个起始符号和一个终止符号(具体符号随意设置,不和词汇表中其他单词重复即可),以英语(源语言)翻译成德语(目标语言)为例,词汇表如下图所示:
    在这里插入图片描述

    ​  然后使用one-hot向量表示各自词汇表中的字符,这样一个单词/句子使用一个one-hot矩阵表示。
    在这里插入图片描述

    4.2、模型搭建及训练

      该模型由一个编码器(encoder)和一个解码器(decoder)组成,网络结构如下图所示:其中encoder传给decoder的信息是最后的状态,即整个句子的完整信息。decoder其实就是上面讲的文本生成器,唯一不同的就是它使用encoder的输出最后文本生成的开头信息。decoder使用encoder的英语输入信息和当前的德语单词预测下一个德语的输出单词 p ,然后使用德语数据标签 y 计算二者的损失函数,不断重复这个过程以此完成监督学习。
    在这里插入图片描述
    在这里插入图片描述
      使用源语言文本和目标语言文本作为训练数据完成训练后,即可使用相同过程进行预测完成机器翻译。

    4.3、网络改进

    4.3.1、双向LSTM

    ​  如果文本信息过长, encoder在采集源语言文本时会产生一定的遗忘,这是decoder怎样改进都无法提高准确率的。为了降低遗忘,可以仅在encoder中使用双向LSTM模型。(decoder是无法使用双向LSTM的),但只能减少遗忘概率,而无法彻底避免。
    在这里插入图片描述

    4.3.2、使用attention模型

    ​  详细请见下一章

    五、Attention

    ​  Attention 模型可以用在所有的 RNN 上,下面将attention分别用在Seq2Seq和Simple RNN上。

    5.1、Seq2Seq+Attention

    ​  无论使用多层RNN还是双向RNN等或多或少都还是存在遗忘问题,为例避免遗忘,新的attention模型

    诞生了。在Seq2Seq模型中,传统的encoder只将最后的输出h传给decoder,而新网络将每次输出加上权重c,让网络自己学习权重,进而避免遗忘问题。(可以理解为decoder输出时每次都会再看一遍encoder,并且知道关注encoder哪个状态输出)其网络结构中的权重如下图所示:
    在这里插入图片描述
    ​  关于 α 的计算方法有很多,方法一如下图所示:值得注意得是矩阵 V 和 W 均为网络参数,由网络训练得到。

    在这里插入图片描述
    ​  方法二:使用两个参数矩阵单独对 h 和 s 处理,然后再做乘积,最后做 softmax 。

    在这里插入图片描述
    ​  求完权重后,做下图所示处理:其中 c 包含 encoder 的全部完整信息,这样decoder就知道encoder全部信息了,就不存在遗忘的问题。

    在这里插入图片描述
    ​  之后将 c、s、和当前输入 x 连接后输出下一个状态s,注意:每次计算 s 时的 α 都需要重新计算的

    在这里插入图片描述

    • 缺点:参数巨大,耗时巨大。时间复杂度对比如下图:
      在这里插入图片描述

    5.2、Simple+self-Attention

    ​  加入 self-Attention 模型的 Simple RNN 仅是将每次的连接矩阵由h变为c:如下图所示:

    在这里插入图片描述
    ​  参数 α 的计算方法和上一节的一致,以此不停的循环即可完成左右的输出。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 本文简要介绍了常用分词算法以及python实现,包括:基于规则的分词算法、基于语言模型的分词算法和维特比分词算法
  • 大纲 关键词提取技术介绍 常用的关键词提取算法详解 ...不需人工生成、维护的词表,也不需要人工标注语料辅助进行训练,主要有TF-IDF算法、TextRank算法和主题模型算法(LSA、LSI、LDA等); 5.
  • BM25算法是一种常见用来做相关度打分的公式,思路比较简单,主要就是计算一个query里面所有词和文档的相关度,然后在把分数做累加操作,而每个词的相关度分数主要还是受到tf/idf的影响。 关于Bim BIM(二元假设模型)...
  • 引言分词是自然语言处理中的基本操作,今天我们就来看一下常用的分词算法及实现。最大匹配算法所谓的最大匹配指的是匹配最长的单词,通常会指定一个最大长度。根据搜索顺序的不同,主要有前向最大匹配算法、后向最大...
  • 5.1 关键词提取技术概述 相对于有监督的方法而言,无监督的方法对数据的...目前常用算法有TF-IDF算法、TextRank算法和主题模型算法(包括LSA、LSI、LDA等)5.2 关键词提取算法TF/IDF算法 TF-IDF(Term Frequenc...
  • 机器学习常用分类算法:朴素贝叶斯、支持向量机、逻辑回归等 机器学习的聚类方法:k-means算法 机器学习的应用 9.1 简介 机器学习训练的要素 数据 转换数据的模型 衡量模型好坏的损失函数 调整模型权重以最小化...
  • 自然语言处理常用处理过程: 先针对训练文本进行分词处理(词干提取、原型提取),统计词频,通过词频-逆文档频率算法获得该词对样本语义的贡献,根据每个词的贡献力度,构建有监督分类学习模型。把测试样本交给...
  • 自然语言处理概括

    2018-04-22 14:38:23
    文本挖掘: ...自然语言处理: 原理:形式化描述,数学模型算法化,程序化,实用化。 常用中文分词: StanfordNLP汉语分词工具 哈工大语言云 庖丁解牛分词 盘古分词 ICTCLAS汉语词法分析系统 FudanNL...
  • CRF简介CRF是序列标注场景中常用模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。[gerative-discriminative.png] CRF训练这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请...
  • 课程基于PyTorch主流框架实现,其中涉及深度学习主流框架LSTM模型以及自然语言处理的词向量;彻底掌握中文情感分析。 适用人群 想要从事NLP的在校学生、NLP研发工程师 自然语言处理从业者、深度学习爱好者 课程简介 ...
  • Python 自然语言处理(基于Gensim)

    千次阅读 2018-05-15 17:39:56
    它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。 简单地说,Gensim主要处理文本数据,对文本数据进行建模挖掘。 ...
  • 奇虎360自然语言处理面试总结

    千次阅读 2018-01-16 15:04:22
    1.机器学习常用的分类算法,Logistic回归,SVM,Decision Tree,随机森林等相关分类算法的原理,公式推导,模型评价,模型调参。模型使用场景 2.机器学习常用的聚类算法,Kmeans,BDSCAN,SOM(个人论文中使用的算法...
  • 文本向量化常用算法介绍,word2vec及doc2vec 向量化方法的模型训练和使用 7.1 文本向量化概述 即将文本表示为一系列能表达文本语义的向量; 7.2 向量化算法word2vec 词袋(Bag of Word)模型:最早的以词语为...
  • 牛客网自然语言处理(NLP)专项练习总结过拟合与欠拟合1.有助于解决模型训练过程中的过拟合问题的方法2.解决欠拟合的方法梯度消失1.下面哪些方法有助于解决深度网络的梯度消失问题激活函数1.Sigmoid、tanh和Relu机器...
  • 它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。 from gensim import corpora, models, similarities from gensim....
  • 深度学习最常用算法:Adam优化算法

    千次阅读 2018-11-16 11:22:19
    深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大...Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为...
  • 常用的机器学习算法大汇总 ...在此,我们先不谈比如计算智能(进化算法等)、计算机视觉(CV)、自然语言处理(NLP)、推荐系统、强化学习和图模型。 一、根据学习方式分类 二、从功能
  • 自然语言处理实战入门》 文本检索---- 初探 常用的检索算法有根据余弦相似度进行检索,Jaccard系数,海灵格-巴塔恰亚距离和BM25相关性评分。 (1)余弦(cosine)相似度,用向量空间中两个向量夹角的余弦值作为...
  • 它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。 gensim中基本概念 语料(Corpus):一组原始文本的集合,用于无监督...
  • 第三次作业–Topic model 无监督学习 目录第三次作业--Topic model 无监督学习一、Topic model是什么?二、LDA算法1.LDA的引入2.LDA...主题模型(Topic Model)是一种常用的文本挖掘工具,用于发现文本主体中的隐藏语
  • 它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。 - LSI - LDA - HDP - DTM - DIM - TF-IDF - word2vec...
  • CRF是序列标注场景中常用模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。 [gerative-discriminative.png] CRF训练 这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考...
  • CRF是序列标注场景中常用模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。 [gerative-discriminative.png] CRF训练 这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考...
  • 它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口. 如果去除文本中的标点符号,然后停用词过滤,效果会更好。 import re...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 259
精华内容 103
关键字:

常用自然语言处理算法模型