精华内容
下载资源
问答
  • 自然语言处理总结

    2019-06-10 14:42:43
    总结下词袋模型的三部曲:分词(tokenizing),统计修订词特征值(counting)与标准化(normalizing)。 与词袋模型非常类似的一个模型是词集模型(Set of Words,简称SoW),和词袋模型唯一的不同是它仅仅考虑词是否...

    基础知识

    监督学习

    更具体的说:

    one-hot representation

    词语表示

    该单词对应所在元素为1,向量中其他元素均为0,向量的维度就等于词库中的单词数目

    • 所有向量都是互相正交的,我们无法有效的表示两个向量间的相似度
    • 向量维度过大。

    词袋模型

    词袋模型(Bag of Words,简称BoW)。词袋模型假设我们不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词的权重。而权重与词在文本中出现的频率有关。

    词袋模型首先会进行分词,在分词之后,通过统计每个词在文本中出现的次数,我们就可以得到该文本基于词的特征,如果将各个文本样本的这些词与对应的词频放在一起,就是我们常说的向量化。向量化完毕后一般也会使用TF-IDF进行特征的权重修正,再将特征进行标准化。 再进行一些其他的特征工程后,就可以将数据带入机器学习算法进行分类聚类了。

    总结下词袋模型的三部曲:分词(tokenizing),统计修订词特征值(counting)与标准化(normalizing)。

    与词袋模型非常类似的一个模型是词集模型(Set of Words,简称SoW),和词袋模型唯一的不同是它仅仅考虑词是否在文本中出现,而不考虑词频。也就是一个词在文本在文本中出现1次和多次特征处理是一样的。在大多数时候,我们使用词袋模型,后面的讨论也是以词袋模型为主。

    当然,词袋模型有很大的局限性,因为它仅仅考虑了词频,没有考虑上下文的关系,因此会丢失一部分文本的语义。但是大多数时候,如果我们的目的是分类聚类,则词袋模型表现的很好。

    下面使用sklearn的CountVectorizer分别实现词集模型和词袋模型。

    词集模型代码

    from sklearn.feature_extraction.text import CountVectorizer
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    corpus = ['Time flies flies like an arrow.',
              'Fruit flies like a banana.']
    
    vocab = set([word for sen in corpus for word in sen.split(" ")])
    
    one_hot_vectorizer = CountVectorizer(binary=True)
    one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()
    
    print(one_hot_vectorizer.vocabulary_)
    print(one_hot)
    
    sns.heatmap(one_hot, annot=True,cbar=False, xticklabels=vocab, yticklabels=['Sentence 2'])
    plt.show()
    复制代码

    输出结果:

    {'time': 6, 'flies': 3, 'like': 5, 'an': 0, 'arrow': 1, 'fruit': 4, 'banana': 2}
    [[1 1 0 1 0 1 1]
     [0 0 1 1 1 1 0]]
    复制代码

    词袋模型代码

    如果设置为False,那么还会包含进词频信息,这就是词袋模型。输出如下:

    {'time': 6, 'flies': 3, 'like': 5, 'an': 0, 'arrow': 1, 'fruit': 4, 'banana': 2}
    [[1 1 0 2 0 1 1]
     [0 0 1 1 1 1 0]]
    复制代码

    Hash Trick

    在大规模的文本处理中,由于特征的维度对应分词词汇表的大小,所以维度可能非常恐怖,此时需要进行降维,不能直接用我们上一节的向量化方法。而最常用的文本降维方法是Hash Trick。

    Hash Trick降维后的特征我们已经不知道它代表的特征名字和意义。此时我们不能像上一节向量化时候可以知道每一列的意义,所以Hash Trick的解释性不强。

    TF-IDF

    TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

    TF是词频(Term Frequency) 词频(TF)表示词条(关键字)在文本中出现的频率。这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。

    IDF是逆向文件频率(Inverse Document Frequency) 逆向文件频率 (IDF) :总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。罕见词的IDF很高,高频词的IDF很低。

    TF-IDF实际上是:TF * IDF

    应用

    • 关键字:计算出文章中每个词的TF-IDF值之后,进行排序,选取其中值最高的几个作为关键字。
    • 文章的相似性: 计算出每篇文章的关键词,从中各选取相同个数的关键词,合并成一个集合,计算每篇文章对于这个集合中的词的词频,生成两篇文章各自的词频向量,进而通过欧氏距离或余弦距离求出两个向量的余弦相似度,值越大就表示越相似。

    使用sklearn计算tfidf

    from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformer,TfidfVectorizer
    from pprint import pprint
    import seaborn as sns
    from matplotlib.pylab import plt
    
    corpus = ['Time flies flies like an arrow.',
              'Fruit flies like a banana.']
    
    one_hot_vectorizer = CountVectorizer()
    one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()
    
    pprint(one_hot) #输出词频
    
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(one_hot)
    
    vocab = one_hot_vectorizer.get_feature_names()
    
    print(vocab) #打印词典
    pprint(transformer.idf_ ) #输出逆文档频率
    pprint(tfidf.toarray()) #输出TFIDF
    
    sns.heatmap(tfidf.toarray(), annot=True, cbar=False, xticklabels=vocab,
                yticklabels= ['Sentence 1', 'Sentence 2'])
    
    plt.show()
    复制代码

    输出如下:

    array([[1, 1, 0, 2, 0, 1, 1],
           [0, 0, 1, 1, 1, 1, 0]], dtype=int64)
    ['an', 'arrow', 'banana', 'flies', 'fruit', 'like', 'time']
    array([1.40546511, 1.40546511, 1.40546511, 1.        , 1.40546511,
           1.        , 1.40546511])
    array([[0.42519636, 0.42519636, 0.        , 0.60506143, 0.        ,
            0.30253071, 0.42519636],
           [0.        , 0.        , 0.57615236, 0.40993715, 0.57615236,
            0.40993715, 0.        ]])
    复制代码

    简单验证

    取文档1的词频表示为TF,计算IDF的公式是

    其中n_{d}为总的文档数,df(d,t)是包含词 t 的文档数。 首先根据词表,计算出来含词 t 的文档数。然后计算TFIDF并归一化。

    import numpy as np
    tf = np.array([1, 1, 0, 2, 0, 1, 1])
    x = np.array([1, 1, 1, 2, 1, 2, 1])
    
    idf = np.log(3/(1+x))+1
    
    print(idf)
    tfidf = tf * idf
    print(tfidf / np.linalg.norm(tfidf))
    复制代码

    输出如下:

    [1.40546511 1.40546511 1.40546511 1.         1.40546511 1.
     1.40546511]
    [0.42519636 0.42519636 0.         0.60506143 0.         0.30253071
     0.42519636]
    复制代码

    实际使用的时候也可以一步到位:

    from sklearn.feature_extraction.text import TfidfVectorizer
    tfidf2 = TfidfVectorizer()
    result = tfidf2.fit_transform(corpus)
    print(result)
    复制代码

    几个问题

    • 为什么idf的大小总是有限的?
    • 出现在所有文档中的词项的idf值是多少?
    • 词项的tfidf权重能否超过1?
    • idf的对数底数会对tfidf有什么影响?
    • 假设idf以2为底,给出idf的一个简单近似。

    向量空间模型(VSM)

    使用TF-IDF可以把文档表示成向量,其中每个分量表示一个词项,但是这种表示忽略了词语的相对顺序。把不同的文档用向量表示称为向量空间模型。 然后文档相似度可以用余弦相似度表示出来:

    其他的距离函数还有:

    • 欧式距离
    d = \sqrt{\sum_{i=1}^{n}(x_{i}-y_{i})^{2}}
    • 曼哈顿距离
    d = \sum_{i=1}^{n}|x_{i}-y_{i}|

    Topk相似度计算和优化

    主题模型

    在传统信息检索领域里,实际上已经有了很多衡量文档相似性的方法,比如经典的VSM模型。然而这些方法往往基于一个基本假设:文档之间重复的词语越多越可能相似。这一点在实际中并不尽然。很多时候相关程度取决于背后的语义联系,而非表面的词语重复。 举个例子: 设有两个句子,我们想知道它们之间是否相关联:

      第一个是:“乔布斯离我们而去了。”

      第二个是:“苹果价格会不会降?”

    这两个句子之间虽然没有任何公共词语,但仍然是很相关的。

    主题模型,顾名思义,就是对文字中隐含主题的一种建模方法。主题就是词汇表上词语的条件概率分布 。与主题关系越密切的词语,它的条件概率越大,反之则越小。

    主题模型就是用大量已知的“词语-文档”矩阵 ,通过一系列的训练,推理出右边的“词语-主题”矩阵Φ 和“主题-文档”矩阵Θ 。

    主题模型的优点

    1)它可以衡量文档之间的语义相似性。对于一篇文档,我们求出来的主题分布可以看作是对它的一个抽象表示。对于概率分布,我们可以通过一些距离公式(比如KL距离)来计算出两篇文档的语义距离,从而得到它们之间的相似度。

    2)它可以解决多义词的问题。回想最开始的例子,“苹果”可能是水果,也可能指苹果公司。通过我们求出来的“词语-主题”概率分布,我们就可以知道“苹果”都属于哪些主题,就可以通过主题的匹配来计算它与其他文字之间的相似度。

    3)它可以排除文档中噪音的影响。一般来说,文档中的噪音往往处于次要主题中,我们可以把它们忽略掉,只保持文档中最主要的主题。

    4)它是无监督的,完全自动化的。我们只需要提供训练文档,它就可以自动训练出各种概率,无需任何人工标注过程

    5)它是跟语言无关的。任何语言只要能够对它进行分词,就可以进行训练,得到它的主题分布。

    主题模型训练推理的方法主要有两种,一个是pLSA(Probabilistic Latent Semantic Analysis),另一个是LDA(Latent Dirichlet Allocation)。pLSA主要使用的是EM(期望最大化)算法;LDA采用的是Gibbs sampling方法。

    pLSA

    pLSA采用的方法叫做EM(期望最大化)算法,它包含两个不断迭代的过程:E(期望)过程和M(最大化)过程。

    LDA

    LDA 采用词袋模型。所谓词袋模型,是将一篇文档,我们仅考虑一个词汇是否出现,而不考虑其出现的顺序。在词袋模型中,“我喜欢你”和“你喜欢我”是等价的。与词袋模型相反的一个模型是n-gram,n-gram考虑了词汇出现的先后顺序。 LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,即认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

    SVD

    NMF

    Triplet Loss

    Triplet Loss的优化目标是拉近Anchor和正例的距离,拉远Anchor和负例的距离。

    模型的实现

    loss函数

    其他知识

    • 判别式模型:KNN,SVM,决策树,感知机,线性判别分析(LDA),LR(线性回归,逻辑回归),神经网络,CRF(条件随机场),Boosting; 生成模型:朴素贝叶斯,HMM,GMM(高斯混合模型),主题文档生成模型(LDA),受限玻尔兹曼机

    • Python3中已经删除的raw_input函数。使用input函数用以获取用户输入。

    • 不可变对象:数值,字符串,元组(tuple) 可变对象:列表,字典。不可变对象是指不可以被其引用所改变的对象。

    • bagging是将许多单独训练的学习机集成起来;dropout是将许多单独训练的子网络集成起来,某些权值是共享的。 boosting并不是单独训练的,而是按照有一定的顺序训练的,具有相互依赖关系。 stacking是通过两层学习机完成的学习。

    • Bagging和Boosting的区别: 1)样本选择上: Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。 Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。 2)样例权重: Bagging:使用均匀取样,每个样例的权重相等 Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。 3)预测函数: Bagging:所有预测函数的权重相等。 Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。 4)并行计算: Bagging:各个预测函数可以并行生成 Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果

    QA

    1. Transfomer为什么需要位置编码?CNN需要吗?

    如果不加位置信息,Transformer模型并没有捕捉顺序序列的能力,也就是说无论句子的结构怎么打乱,Transformer都会得到类似的结果。换句话说,Transformer只是一个功能更强大的词袋模型而已。RNN 因为是线性序列结构,所以很自然它天然就会把位置信息编码进去;CNN 的卷积核是能保留特征之间的相对位置的。

    1. Transfomer的残差结构有什么用?

    1. 为什么需要Multi-Head Attention?

    如果把输入看成是多个维度信息的concat的话,Multi-Head Attention相当于n个不同的self-attention的集成(ensemble);如果把输入看成一个整体的话,则是对一个向量的不同部分施以不同的attention权重。

    1. self Attention的公式,为什么要除以d的开方?
    (Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V

    防止其结果过大,会除以一个尺度标度

    1. LSTM,GRU结构和参数计算

    2. Dying Relu Dying Relu现象指的是,在使用Relu作为激活函数时,因为学习率较大或某些原因,导致某一层的bias学到较大的负值,使得该层在过完Relu激活函数后的输出始终是0。当进入到这一状态时,基本上没办法再回到正常状态。因为在回传时,值为0导致梯度也为0。

    3. CRF和HMM?

    4. L2正则和L1正则?L1为什么是稀疏的?

    5. 大数定律和中心极限定理?

    大数定律讲的是样本均值收敛到总体均值,说白了就是期望。而中心极限定理告诉我们,当样本足够大时,样本均值的分布会慢慢变成正态分布。

    1. 矩阵求逆?
    2. SVD分解?
    3. 聚类的方法?
    4. 条件概率计算?
    5. 水塘抽样?

    问题描述:当内存无法加载全部数据时,如何从包含未知大小的数据流中随机选取k个数据,并且要保证每个数据被抽取到的概率相等。

    简单抽样算法就是从固定的n个元素里随机选出k个元素,这样每个元素被选的概率都是平等的k/n。简单抽样是最简单的抽样算法,同样也是使用最为普遍的算法。简单抽样有个前提就是必须提前知道目标总体的大小n。

    区别于简单抽样,水塘抽样是一种动态的抽样方法。具体证明和算法

    1. 树的合并
    2. 乘积最大的子串?
    3. Two Sum?

    代码

    1. Keras Attention
    from keras import backend as K
    from keras.engine.topology import Layer
    from keras import initializers, regularizers, constraints
    from keras.layers.merge import _Merge
    
    
    class Attention(Layer):
        def __init__(self, step_dim,
                     W_regularizer=None, b_regularizer=None,
                     W_constraint=None, b_constraint=None,
                     bias=True, **kwargs):
            """
            Keras Layer that implements an Attention mechanism for temporal data.
            Supports Masking.
            Follows the work of Raffel et al. [https://arxiv.org/abs/1512.08756]
            # Input shape
                3D tensor with shape: `(samples, steps, features)`.
            # Output shape
                2D tensor with shape: `(samples, features)`.
            :param kwargs:
            Just put it on top of an RNN Layer (GRU/LSTM/SimpleRNN) with return_sequences=True.
            The dimensions are inferred based on the output shape of the RNN.
            Example:
                model.add(LSTM(64, return_sequences=True))
                model.add(Attention())
            """
            self.supports_masking = True
            # self.init = initializations.get('glorot_uniform')
            self.init = initializers.get('glorot_uniform')
    
            self.W_regularizer = regularizers.get(W_regularizer)
            self.b_regularizer = regularizers.get(b_regularizer)
    
            self.W_constraint = constraints.get(W_constraint)
            self.b_constraint = constraints.get(b_constraint)
    
            self.bias = bias
            self.step_dim = step_dim
            self.features_dim = 0
            super(Attention, self).__init__(**kwargs)
    
        def build(self, input_shape):
            assert len(input_shape) == 3
    
            self.W = self.add_weight((input_shape[-1],),
                                     initializer=self.init,
                                     name='{}_W'.format(self.name),
                                     regularizer=self.W_regularizer,
                                     constraint=self.W_constraint)
            self.features_dim = input_shape[-1]
    
            if self.bias:
                self.b = self.add_weight((input_shape[1],),
                                         initializer='zero',
                                         name='{}_b'.format(self.name),
                                         regularizer=self.b_regularizer,
                                         constraint=self.b_constraint)
            else:
                self.b = None
    
            self.built = True
    
        def compute_mask(self, input, input_mask=None):
            # do not pass the mask to the next layers
            return None
    
        def call(self, x, mask=None):
            input_shape = K.int_shape(x)
    
            features_dim = self.features_dim
            # step_dim = self.step_dim
            step_dim = input_shape[1]
    
            eij = K.reshape(K.dot(K.reshape(x, (-1, features_dim)), K.reshape(self.W, (features_dim, 1))), (-1, step_dim))
    
            if self.bias:
                eij += self.b[:input_shape[1]]
    
            eij = K.tanh(eij)
    
            a = K.exp(eij)
    
            # apply mask after the exp. will be re-normalized next
            if mask is not None:
                # Cast the mask to floatX to avoid float64 upcasting in theano
                a *= K.cast(mask, K.floatx())
    
            # in some cases especially in the early stages of training the sum may be almost zero
            # and this results in NaN's. A workaround is to add a very small positive number ε to the sum.
            a /= K.cast(K.sum(a, axis=1, keepdims=True) + K.epsilon(), K.floatx())
    
            a = K.expand_dims(a)
            weighted_input = x * a
            # print weigthted_input.shape
            return K.sum(weighted_input, axis=1)
    
        def compute_output_shape(self, input_shape):
            # return input_shape[0], input_shape[-1]
            return input_shape[0], self.features_dim
    # end Attention
    复制代码
    1. Attention RNN Model
    import keras
    from keras import Model
    from keras.layers import *
    import Attention
    
    class TextClassifier():
    
        def model(self, embeddings_matrix, maxlen, word_index, num_class):
            inp = Input(shape=(maxlen,))
            encode = Bidirectional(CuDNNGRU(128, return_sequences=True))
            encode2 = Bidirectional(CuDNNGRU(128, return_sequences=True))
            attention = Attention(maxlen)
            x_4 = Embedding(len(word_index) + 1,
                            embeddings_matrix.shape[1],
                            weights=[embeddings_matrix],
                            input_length=maxlen,
                            trainable=True)(inp)
            x_3 = SpatialDropout1D(0.2)(x_4)
            x_3 = encode(x_3)
            x_3 = Dropout(0.2)(x_3)
            x_3 = encode2(x_3)
            x_3 = Dropout(0.2)(x_3)
            avg_pool_3 = GlobalAveragePooling1D()(x_3)
            max_pool_3 = GlobalMaxPooling1D()(x_3)
            attention_3 = attention(x_3)
            x = keras.layers.concatenate([avg_pool_3, max_pool_3, attention_3], name="fc")
            x = Dense(num_class, activation="sigmoid")(x)
    
            adam = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08,amsgrad=True)
            model = Model(inputs=inp, outputs=x)
            model.compile(
                loss='categorical_crossentropy',
                optimizer=adam)
            return model
    复制代码

    转载于:https://juejin.im/post/5cfdb564e51d4510774a8839

    展开全文
  • 项目介绍:基于英文维基百科的自然语言处理工作,计划实现借助维基百科作为语料库,学习概念间相似度,应用在其他文本分析中。项目时间:2013-10 至今项目职责:本人主要负责从维基离线数据库中提取出概念间链接关系...
    项目介绍:基于英文维基百科的自然语言处理工作,计划实现借助维基百科作为语料库,学习概念间相似度,应用在其他文本分析中。
    项目时间:2013-10 至今
    项目职责:本人主要负责从维基离线数据库中提取出概念间链接关系,同时计算出概念的初度以及入读,用概念的锚文本来表示这个概念。第二个工作是对上述得到的语义向量进行修改,利用tf-idf对向量进行赋值。
    采用python,语言,用到了nltk,mysqldb等库。
    python与java语言的区别:
    本质区别是python 脚本语言,属于解释型语言,而java属于编译型语言。
    JAVA 里的块用大括号对包括,Python 以冒号 + 四个空格缩进表示。
    JAVA 的类型要声明,Python 的类型不需要。
    JAVA 基本上是类/结构操作,也就是面向对象处理,Python 可以以独立的函数模块来处理逻辑而不需要放到类中。
    JAVA 每行语句以分号结束,Python 可以不写分号。
    技术难点:
    离线数据库噪声处理
    解决方法:
    采用正则匹配,去掉文档非正文部分。然后在利用正则匹配匹配出里面的概念来。
    sql语句中存单引号问题,对每一个单引号,加多一个引号。

    收获:

    展开全文
  • 自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正。内容来源主要参考黄志洪老师的自然语言...

           自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正。内容来源主要参考黄志洪老师的自然语言处理课程。主要参考书为宗成庆老师的《统计自然语言处理》,虽然很多内容写的不清楚,但好像中文NLP书籍就这一本全一些,如果想看好的英文资料,可以到我的GitHub上下载:  

    http://github.com/lovesoft5/ml

      下面直接开始正文:
        一、自然语言处理概述
                   1)自然语言处理:利用计算机为工具,对书面实行或者口头形式进行各种各样的处理和加工的技术,是研究人与人交际中以及人与计算机交际中的演员问题的一门学科,是人工智能的主要内容。
                  2)自然语言处理是研究语言能力和语言应用的模型,建立计算机(算法)框架来实现这样的语言模型,并完善、评测、最终用于设计各种实用系统。
                  3)研究问题(主要):
                                       信息检索
                                       机器翻译
                                       文档分类
                                       问答系统
                                       信息过滤
                                       自动文摘
                                       信息抽取
                                       文本挖掘
                                       舆情分析
                                       机器写作
                                       语音识别
               研究模式:自然语言场景问题,数学算法,算法如何应用到解决这些问题,预料训练,相关实际应用
                   自然语言的困难:
                               场景的困难:语言的多样性、多变性、歧义性
                               学习的困难:艰难的数学模型(hmm,crf,EM,深度学习等)
                               语料的困难:什么的语料?语料的作用?如何获取语料?
        二、形式语言与自动机
                   语言:按照一定规律构成的句子或者字符串的有限或者无限的集合。

                    描述语言的三种途径:
                                                  穷举法
                                                  文法(产生式系统)描述
                                                  自动机

                   自然语言不是人为设计而是自然进化的,形式语言比如:运算符号、化学分子式、编程语言

                   形式语言理论朱啊哟研究的是内部结构模式这类语言的纯粹的语法领域,从语言学而来,作为一种理解自然语言的句法规律,在计算机科学中,形式语言通常作为定义编程和语法结构的基础

                   形式语言与自动机基础知识:
                                                     集合论
                                                     图论
                   自动机的应用:

                                                1,单词自动查错纠正

                                                2,词性消歧(什么是词性?什么的词性标注?为什么需要标注?如何标注?)

                  形式语言的缺陷:

                                          1、对于像汉语,英语这样的大型自然语言系统,难以构造精确的文法

                                          2、不符合人类学习语言的习惯

                                          3、有些句子语法正确,但在语义上却不可能,形式语言无法排出这些句子

                                          4、解决方向:基于大量语料,采用统计学手段建立模型                              
        三、语言模型
               1)语言模型(重要):通过语料计算某个句子出现的概率(概率表示),常用的有2-元模型,3-元模型
               2)语言模型应用:

                                             语音识别歧义消除例如,给定拼音串:ta shi yan yan jiu saun fa de

                                             可能的汉字串:踏实烟酒算法的   他是研究酸法的      他是研究算法的,显然,最后一句才符合。

              3)语言模型的启示:

                                  1、开启自然语言处理的统计方法

                                  2、统计方法的一般步骤:               
                                                                     收集大量语料
                                                                     对语料进行统计分析,得出知识
                                                                     针对场景建立算法模型
                                                                     解释和应用结果
              4) 语言模型性能评价,包括评价目标,评价的难点,常用指标(交叉熵,困惑度)

              5)数据平滑:

                             数据平滑的概念,为什么需要平滑

                             平滑的方法,加一法,加法平滑法,古德-图灵法,J-M法,Katz平滑法等

            6)语言模型的缺陷:

                            语料来自不同的领域,而语言模型对文本类型、主题等十分敏感

                             n与相邻的n-1个词相关,假设不是很成立。

       四、概率图模型,生成模型与判别模型,贝叶斯网络,马尔科夫链与隐马尔科夫模型(HMM)
                1)概率图模型概述(什么的概率图模型,参考清华大学教材《概率图模型》)
               2)马尔科夫过程(定义,理解)
          3)隐马尔科夫过程(定义,理解)

                  HMM的三个基本问题(定义,解法,应用)

                     注:第一个问题,涉及最大似然估计法,第二个问题涉及EM算法,第三个问题涉及维特比算法,内容很多,要重点理解,(参考书李航《统计学习方法》,网上博客,笔者github)

           
        五、马尔科夫网,最大熵模型,条件随机场(CRF)
                   1)HMM的三个基本问题的参数估计与计算
                   2)什么是熵
                   3)EM算法(应用十分广泛,好好理解)
                   4)HMM的应用
                   5)层次化马尔科夫模型与马尔科夫网络
                                             提出原因,HMM存在两个问题
                   6)最大熵马尔科夫模型
                                             优点:与HMM相比,允许使用特征刻画观察序列,训练高效
                                             缺点: 存在标记偏置问题
                   7)条件随机场及其应用(概念,模型过程,与HMM关系)
                                参数估计方法(GIS算法,改进IIS算法)
                                CRF基本问题:特征选取(特征模板)、概率计算、参数训练、解码(维特比)
                                应用场景:
                                                 词性标注类问题(现在一般用RNN+CRF)
                                                 中文分词(发展过程,经典算法,了解开源工具jieba分词)
                                                 中文人名,地名识别
                   8)  CRF++
        六、命名实体 识别,词性标注,内容挖掘、语义分析与篇章分析(大量用到前面的算法)
                1)命名实体识别问题
                                         相关概率,定义

                                         相关任务类型

                                         方法(基于规程->基于大规模语料库)
                  2)未登录词的解决方法(搜索引擎,基于语料)

                  3)CRF解决命名实体识别(NER)流程总结:

                           训练阶段:确定特征模板,不同场景(人名,地名等)所使用的特征模板不同,对现有语料进行分词,在分词结                      果基础上进行词性标注(可能手工),NER对应的标注问题是基于词的,然后训练CRF模型,得到对应权值参数值

                           识别过程:将待识别文档分词,然后送入CRF模型进行识别计算(维特比算法),得到标注序列,然后根据标                            注划分出命名实体

                  4)词性标注(理解含义,意义)及其一致性检查方法(位置属性向量,词性标注序列向量,聚类或者分类算法)
                
        七、句法分析
                  1)句法分析理解以及意义
                               1、句法结构分析
                                          完全句法分析
                                                 浅层分析(这里有很多方法。。。)
                               2、 依存关系分析
                 2)句法分析方法
                                    1、基于规则的句法结构分析
                                    2、基于统计的语法结构分析
              
        八、文本分类,情感分析
                   1)文本分类,文本排重
                                      文本分类:在预定义的分类体系下,根据文本的特征,将给定的文本与一个或者多个类别相关联
                               典型应用:垃圾邮件判定,网页自动分类
                   2)文本表示,特征选取与权重计算,词向量
                              文本特征选择常用方法:
                                            1、基于本文频率的特征提取法
                                            2、信息增量法
                                            3、X2(卡方)统计量
                                            4、互信息法
                   3)分类器设计
                                    SVM,贝叶斯,决策树等
                   4)分类器性能评测
                                    1、召回率
                                    2、正确率
                                    3、F1值
                   5)主题模型(LDA)与PLSA
                                  LDA模型十分强大,基于贝叶斯改进了PLSA,可以提取出本章的主题词和关键词,建模过程复杂,难以理解。
                   6)情感分析
                             借助计算机帮助用户快速获取,整理和分析相关评论信息,对带有感情色彩的主观文本进行分析,处理和归纳例如,评论自动分析,水军识别。
                            某种意义上看,情感分析也是一种特殊的分类问题
                   7)应用案例

        九、信息检索,搜索引擎及其原理
                  1)信息检索起源于图书馆资料查询检索,引入计算机技术后,从单纯的文本查询扩展到包含图片,音视频等多媒体信息检索,检索对象由数据库扩展到互联网。
                        1、点对点检索
                        2、精确匹配模型与相关匹配模型
                        3、检索系统关键技术:标引,相关度计算
                2)常见模型:布尔模型,向量空间模型,概率模型
                3)常用技术:倒排索引,隐语义分析(LDA等)   
                4)评测指标
        十、自动文摘与信息抽取,机器翻译,问答系统
                  1)统计机器翻译的的思路,过程,难点,以及解决
                2)问答系统
                        基本组成:问题分析,信息检索,答案抽取
                        类型:基于问题-答案, 基于自由文本
                        典型的解决思路
               3)自动文摘的意义,常用方法
               4)信息抽取模型(LDA等)
     
        十一、深度学习在自然语言中的应用  
                 1)单词表示,比如词向量的训练(wordvoc)
                 2)自动写文本
                                写新闻等
                 3)机器翻译
                 4)基于CNN、RNN的文本分类
                 5)深度学习与CRF结合用于词性标注
                           ...............
             更多深度学习内容,可参考我之前的文章。
          
    https://blog.csdn.net/meihao5/article/details/79592667

    展开全文
  • 自然语言处理常用模型方法总结 自然语言处理常用模型方法总结
  • 自然语言生成/总结 (2004) ROUGE: A Package for Automatic Evaluation of Summaries ???? Introduces ROUGE, an evaluation metric for summarization that is used to this day on a variety of sequence ...

    自然语言生成/总结

    展开全文
  • 自然语言处理(NLP)知识结构总结
  • 我爱自然语言,是自然语言的一个博客群 ... 自然语言问题列表 ... 自然语言处理课程在线学习网站 https://www.coursera.org/ ACL Anthology,囊括了ACL,EMNLP,CL等NLP领域重要会议和期...
  • 1.什么是自然语言? 定义为一组规则或符号的集合,组合集合中的符号来传递各种信息。 2.NLP 应用 机器翻译 计算机具备将 一种语言翻译成另 一种语言的能力 情感分析 计算机能够判断用户评论是否积极[二分类] 智能...
  • 自然语言处理(NLP)学习路线总结

    万次阅读 多人点赞 2019-03-20 21:01:53
    自然语言处理概述 自然语言处理入门基础 自然语言处理的主要技术范畴 自然语言处理基本点 特征处理 模型选择 NLP常用工具 NLP语言模型 快速入门NLP方法 自然语言处理...
  • 自然语言处理中的Attention机制总结

    万次阅读 多人点赞 2018-08-22 15:20:57
    思想:Self attention也叫做intra-attention在没有任何额外信息的情况下,我们仍然可以通过允许句子使用–self attention机制来处理自己,从句子中提取关注信息。 它在很多任务上都有十分出色的表现,比如阅读理解...
  • 自然语言处理比赛总结

    千次阅读 2019-05-10 15:38:12
    比赛仍然在继续,但是过了一个阶段,应该稍微总结一下(毕竟是个菜鸡): 比赛的任务是一个数据量较少的文本情感二分类任务,总体来说十分简单,但是需要达到一定分数才能才能通过。 首先我们使用了简单的jieba...
  • https://www.cnblogs.com/maybe2030/p/5203186.html#_label3
  • 自然语言处理(NLP)资源总结
  • 自然语言处理课程学习总结

    千次阅读 2016-12-13 21:08:48
    概念自然语言处理, 主要是研究如何利用计算机来理解和生成自然语言, 其发展经历了三个阶段, 分别是: Natural language understanding Natural language processing Computational Linguistics 现在的自然...
  • 自然语言处理以及对话系统知识点总结

    千次阅读 热门讨论 2018-07-06 20:32:00
    自然语言处理以及对话系统知识点总结 一、先谈谈 GAN 二、自然语言处理 三、对话系统
  • 讲述语言模型的发展历史,对阶段性较有代表性的工作进行了简述,同时对一些重要的技术细节展开了分析,主要从n-gram语言模型到BERT预训练语言模型,同时对这些模型的应用场景也进行了阐述,可以帮助我们整理思路,...
  • 自然语言处理实验室总结

    千次阅读 2018-07-15 21:27:39
    中国大陆地区:苏州大学自然语言处理实验室 http://nlp.suda.edu.cn/苏州大学人类语言技术研究所 http://hlt.suda.edu.cn/微软亚洲研究院自然语言计算组 Natural Language Computing (NLC) Group ...
  • 自然语言处理(NLP)知识结构总结

    万次阅读 多人点赞 2018-03-17 18:04:35
    自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正。内容来源主要参考黄志洪老师的自然语言...
  • 自然语言处理发展历程自我总结

    千次阅读 2017-06-04 23:14:56
    自然语言处理(NLP)历史悠久,从上个世纪初,便有人开始提出自然语言相关的规律和假设,但本人阅读了若干自然语言相关的书籍后,发现自然语言处理的方法论在长达近1个世纪的时间内并无半点实质上的进展。 自然语言...
  • 自然语言处理中的分词问题总结

    千次阅读 2018-10-29 13:47:46
    自然语言处理中的分词问题总结   众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。把中文的汉字序列切分成有意义的词,就是中文分词,有些人...
  • 自然语言处理课程 主要讲解 词法->句法->语义->语用 四个方面
  • TF-IDF(term frequency–inverse document frequency) 这是一种用于信息检索的一种常用加权技术。它是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。...
  • 自然语言处理-中文分词方法总结

    千次阅读 2017-10-27 16:21:24
    不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性、句法树等模块的效果。当然分词只是一个工具,场景不同,要求也不同。前人做的工作,已注明...
  • 奇虎360自然语言处理面试总结

    千次阅读 2018-01-16 15:04:22
    10.进行数据处理时,如何过滤无用的信息(例如利用正则表达式提取或者其他方法),数据乱码的处理 11.交叉熵与信息熵,信息增益与信息增益率,gini系数,具体如何计算 12.BIC准则(贝叶斯信息准则)与AIC...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,828
精华内容 731
关键字:

自然语言处理总结