精华内容
下载资源
问答
  • CSS实现内容超出时用省略号表示

    千次阅读 2018-08-13 20:29:56
    除了利用JS实现将超出的字数隐藏外,还可以利用CSS帮我们来... overflow 属性规定当容器内的文本内容溢出时,容器所发生的事情。hide值指明了溢出的内容会被修剪。 ②、text-overflow:ellipsis text-overflo...

    除了利用JS实现将超出的字数隐藏外,还可以利用CSS帮我们来实现。

    我们可以使用三个属性来实现,分别是:

            ①、overflow:hide

            overflow 属性规定当容器内的文本内容溢出时,容器所发生的事情。hide值指明了溢出的内容会被修剪

            ②、text-overflow:ellipsis

            text-overflow 属性规定当容器内的文本内容溢出时,容器所发生的事情。ellipsis值指明了溢出的内容将以省略符号来表示

            ③、white-space: nowrap

            white-space属性设置容器如何处理容器内的空白。nowrap值规定了段落中的文本不进行换行,即只用一行显示。

            所以我们的目标是,不管宽度故不固定,我们都要将文本结点的所有内容只在一行显示(white-space: nowrap),然后再根据容器的宽度将多余的内容剪切(overflow: hide)。而剪切的方式主要是两种,一种是多余的内容用省略号显示(text-overflow: ellipsis),另外一种是直接剪切(无text-overflow属性)。

    效果如下所示:

    注意:如果想要剪切文本,就必须指定文本结点不换行,否则文本元素由于换行并不会超过容器宽度,所以也就没有多余的字符串可以剪切。例如下面效果所示:

    主要代码:

    #Container{
    	overflow: hidden;	
    	white-space: nowrap;
        text-overflow: ellipsis;
    }

    展开全文
  • 数据结构:有向环图的表示

    千次阅读 2017-02-10 11:22:31
    数据结构:有向环图的表示最近在做workflow的时候有用到怎么去存储一个有向环图,在百度上看到一个答复感觉很棒 http://blog.chinaunix.net/uid-24774106-id-3505579.html文中使用先是 malloc 一个内存然后每当...

    数据结构:有向无环图的表示

    最近在做workflow的时候有用到怎么去存储一个有向无环图,在百度上看到一个答复感觉很棒
    http://blog.chinaunix.net/uid-24774106-id-3505579.html

    文中使用先是 malloc 一个内存然后每当超出长度的时候就 realloc 内存(其实感觉跟 python 的 list 差不多)后面发现其实可以用vector,不用实现那么多代码(捂脸),但是自己实现了这个想法的确是work的,而且也省了不少内存

    • 我程序的代码片如下:
    struct node {
        struct node **succ;
        int num_succ = 0;
        int num_pred = 0;
        int pred_len, succ_len;
    }; // 省略了很多参数

    然后先初始化:

        nodes[i].succ = (struct node**)malloc(1 * sizeof(struct node*));
        nodes[i].num_succ = 0;
        nodes[i].succ_len = 1;

    接下来遇到后继的时候判断num_succ 和succ_len 为图方便每次内存扩大两倍(还有更更加使用的策略,参考python的list的扩充策略)

        // 检查后继是否越界,如果是则realloc内存,为了方便每次扩大两倍 应该能够满足需求
        while (nodes[current - 1].succ_len <= nodes[current - 1].num_succ) {
            nodes[current - 1].succ_len *= 2;
            new_ptr = realloc(nodes[current - 1].succ, sizeof(struct node *) * (nodes[current - 1].succ_len));
            if (!new_ptr) {
                fprintf(stderr, "succ realloc error!");
                exit(-1);
            }
            nodes[current - 1].succ = (struct node **)new_ptr;
        }

    上述代码与链接里面相比添加了错误处理机制

    realloc 的注意事项

    1. 如果有足够空间用于扩大mem_address指向的内存块,realloc()试图从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小=newsize。那么就ok。得到的是一块连续的内存。
    2. 如果原先的内存大小后面++没有++足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了,原来内存free掉)。

    因此,假如还有指针指向原来的内存的话,那么free则会出现double free的情况,另外避免 p = realloc(p,2048); 这种写法。有可能会造成 realloc 分配失败后,p原先所指向的内存地址丢失。

    展开全文
  • 在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的“词向量”(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一章中总结的类似,当然由于入门较晚没有...

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的“词向量”(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一章中总结的类似,当然由于入门较晚没有CIPS2016里面说法权威,于是把CIPS2016中的内容,做一个摘录。

    CIPS2016 中文信息处理报告《第五章 语言表示与深度学习研究进展、现状及趋势》第三节 技术方法和研究现状中有一些关于语言表示模型划分的内容P33-P35,其中:
    这里写图片描述
    语言表示方法大体上可以从两个维度进行区分。一个维度是按不同粒度进行划分,语言具有一定的层次结构,语言表示可以分为字、词、句子、篇章等不同粒度的表示。另一个维度是按表示形式进行划分,可以分为离散表示和连续表示两类。离散表示是将语言看成离散的符号,而将语言表示为连续空间中的一个点,包括分布式表示和分散式表示。

    CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bcebos.com/cips2016.pdf
    .
    .


    一、离散表示

    1、词向量

    • 一个词可以表示为One-Hot 向量(一维为1 其余维为0
      的向量),也叫局部表示。离散表示的缺点是词与词之间没有距离的概念,这和事实不符。
    • 一种改进的方法是基于聚类的词表示。其中一个经典的方法是Brown 聚类算法,该算法是一种层次化的聚类算法。在得到层次化结构的词类簇之后,我们可以用根节点到词之间的路径来表示该词。

    2、句向量

    有了词的表示之后,我们可以进一步得到句子或篇章的表示。句子或篇章的离散表示通常采用词袋模型、N 元模型等。
    .
    .
    .


    二、连续表示——分布式表示

    这样就可以通过共现矩阵的方式来进行词的表示,这类方法也叫分布式表示(Distributional Representations)

    1、词向量

    潜在语义分析模型(Latent Semantic Analysis, LSA)、潜在狄利克雷分配模型(Latent Dirichlet Allocation,LDA)、随机索引(random indexing)等。

    2、句向量

    句子的表示方式对应于共现矩阵,另一列,在LDA中句子-词语矩阵中就是很好地句子表示方式。
    .
    .
    .


    ★三、连续表示——分散式表示

    另一种连续表示是分散式表示(Distributed Representations),即将语言表示为稠密、低维、连续的向量

    1、词向量

    研究者最早发现学习得到词嵌入之间存在类比关系。比如apple−apples ≈ car−cars, man−woman ≈ king – queen 等。这些方法都可以直接在大规模无标注语料上进行训练。词嵌入的质量也非常依赖于上下文窗口大小的选择。通常大的上下文窗口学到的词嵌入更反映主题信息,而小的上下文窗口学到的词嵌入更反映词的功能和上下文语义信息。

    2、句向量

    句子编码主要研究如何有效地从词嵌入通过不同方式的组合得到句子表示。其中,比较有代表性的方法有四种。

    • (1)神经词袋模型

    简单对文本序列中每个词嵌入进行平均/加总,作为整个序列的表示。
    这种方法的缺点是丢失了词序信息。对于长文本,神经词袋模型比较有效。但是对于短文本,神经词袋模型很难捕获语义组合信息。

    • (2)递归神经网络(Recursive Neural Network)

    按照一个给定的外部拓扑结构(比如成分句法树),不断递归得到整个序列的表示。递归神经网络的一个缺点是需要给定一个拓扑结构来确定词和词之间的依赖关系,因此限制其使用范围。

    • (3)循环神经网络(Recurrent Neural Network)

    将文本序列看作时间序列,不断更新,最后得到整个序列的表示。

    • (4)卷积神经网络(Convolutional Neural Network)

    通过多个卷积层和子采样层,最终得到一个固定长度的向量。

    在上述四种基本方法的基础上,很多研究者综合这些方法的优点,结合具体的任务,已经提出了一些更复杂的组合模型,例如双向循环神经网络(Bi-directional Recurrent Neural Network)、长短时记忆模型(Long-Short Term Memory)等。
    同时根据上面的内容,句向量的表征在RNN、CNN之间,到底哪个更好呢? 有一篇文章在这点上讲得比较清楚,会在下面的延伸三:《NLP 模型到底选 RNN 还是 CNN?》提到。

    3、篇章表示

    如果处理的对象是比句子更长的文本序列(比如篇章),为了降低模型复杂度,一般采用层次化的方法,先得到句子编码,然后以句子编码为输入,进一步得到篇章的表示。具体的层次化可以采用以下几种方法:

    • (1)层次化的卷积神经网络

    即用卷积神经网络对每个句子进行建模,然后以句子为单位再进行一次卷积和池化操作,得到篇章表示。

    • (2)层次化的循环神经网络

    即用循环神经网络对每个句子进行建模,然后再用一个循环神经网络建模以句子为单位的序列,得到篇章表示。

    • (3)混合模型

    先用循环神经网络对每个句子进行建模,然后以句子为单位再进行一次卷积和池化操作,得到篇章表示。在上述模型中,循环神经网络因为非常适合处理文本序列,因此被广泛应用在很多自然语言处理任务上。
    .
    .
    .


    四、总结

    基于深度学习的方法在自然语言处理中取得了很大的进展,因此,分散式表示也成为语言表示中最热门的方法,不但可以在特定的任务中端到端地学习字、词、句子、篇章的分散式表示,也可以通过大规模未标注文本自动学习。
    分散式表示可以非常方便地应用在下游的各种自然语言处理任务上,并且可以端到端地学习,给研究者带来了很大的便利。但是分散式表示对以下几种情况还不能很好地处理,需要进一步解决。

    1. 语言中出现所有符号是否都需要使用统一的表示模型?比如,无意义的符号、变量、数字等。
    2. 新词以及低频词的表示学习方法。目前的表示学习方法很难对这些词进行很好的建模,而这些词都是极具信息量的,不能简单忽略。
    3. 篇章的语言表示。目前对篇章级别的文本进行建模方法比较简单,不足以表示篇章中的复杂语义。
    4. 语言表示的基础数据结构。除了目前的基于向量的数据结构之外是否有更好的表示结构,比如矩阵、队列、栈等。
      .
      .

    延伸一:句向量的表示方式

    参考blog:Sentence Embedding/Nishant Nikhil

    在实际应用方面,可以参考google在2014发表的内容,对实际应用非常有帮助:Distributed Representations of Sentences and Documents

    该博客较多是对分散表示词向量进行一定的总结与归纳。

    1、词向量简单相加/平均(类似神经词袋模型)

    对词向量的相加/平均,但是譬如以下的两句话质心是一致的:

    You are going there to teach not play.
    You are going there to play not teach

    这样的方式,再来求句子距离,其实是在求句子的质心距离(centroid distance)。
    另外一种改良版本,用Word Movers’ Distance

    这里写图片描述

    相近词之间求距离,然后把这样的相近距离相加。

    参考paper1:From Word Embeddings To Document Distances
    参考paper2:Using Centroids of Word Embeddings and Word Mover’s Distance for Biomedical Document Retrieval in Question Answering
    .
    .

    2、深度学习方面

    以上的方法并没有关照到句子的序列信息。
    1、CNN
    用CNN来句子表示(paper:Convolutional Neural Networks for Sentence Classification),操作流程是:
    padding句子让其长度一致 -> 使用词表示技术成为方阵 -> 使用CNN -> 使用Max-overtime pooling -> 全连接层 -> 获得句向量。

    2、GRU
    Dynamic Memory Networks for Visual and Textual Question Answering
    通过GRU进行编码,生成上下文向量+更新记忆。
    当然还有用双向GRUs(Efficient Summarization With Read-Again And Copy Mechanism
    .
    .

    3、fasttext表示

    可见NLP︱高级词向量表达(二)——FastText(简述、学习笔记)
    .
    .

    延伸二:句向量表达:Sentence 2 vec

    跟眼神一中词向量简单相加减类似,是通过PCA/SVD的加权得到了句向量,同时作者在实验过程中,发现这一表征方式,可以跟LSTM表征的效果媲美。
    这里写图片描述

    github地址:https://github.com/peter3125/sentence2vec
    paper地址:《A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS》

    # test
    embedding_size = 4   # dimension of the word embedding
    w1 = Word('Peter', [0.1, 0.2, 0.3, 0.4])
    w2 = Word('was', [0.2, 0.1, 0.3, 0.4])
    w3 = Word('here', [0.1, 0.4, 0.1, 0.4])
    
    sentence1 = Sentence([w1, w2, w3])
    sentence2 = Sentence([w2, w3, w1])
    sentence3 = Sentence([w3, w1, w2])
    
    # calculate and display the result
    print(sentence_to_vec([sentence1, sentence2, sentence3], embedding_size))

    .


    延伸三:NLP 模型到底选 RNN 还是 CNN?

    本文来源于文章《AI技术讲座精选:NLP 模型到底选 RNN 还是 CNN?》,不过实质上并没有得出非常建设性的答案。
    paper地址:https://arxiv.org/pdf/1702.01923.pdf

    CNN 是分层架构,RNN 是连续结构。一般靠常规直觉来判断:

    1. 倾向于为分类类型的任务选择 CNN,例如情感分类,因为情感通常是由一些关键词来决定的;
    2. 对于顺序建模任务,我们会选择 RNN,例如语言建模任务,要求在了解上下文的基础上灵活建模。

    在实践中,得到的结论:

    1. CNN 和 RNN 为文本分类任务提供补充信息。至于哪个架构的执行效果更好一点,取决于对整个序列的语义理解的重要程度。
    2. 目前来看,RNN 在文本级别的情感分类表现得很好(Tang et al., 2015),对于LSTM,封闭的 CNN
      在语言建模任务上同比 LSTM 更胜一筹
    3. RNN 表现较好并且在大范围内的任务中都较为稳健。除了以下种情况:当前的任务本质上是一项在一些情感探测和问答匹配设置中识别关键词的任务。
    4. 隐藏层尺寸hidden size和批尺寸batch size会使 DNN 的性能变得非常不稳定,波动较大,从实践来看这两个参数对结果的影响非常大。

    .

    延伸四:对词向量干预,可以提高效率

    paper:All-but-the-Top: Simple and Effective Postprocessing for Word Representations
    本文来源于paperweekly,《本周值得读(2017.02.06-2017.02.10)》

    本文提出了一种对已有的词向量进行预处理的方法,用来对学习到的词向量降噪。基于词向量自身的几何结构 — 均值非零以及各项不同性,本文提出了一个反直观的处理方法:从所有的词向量中移除均值,以及移除部分导致各项不同性的方向。虽然这种处理方式忽略了词向量中的部分信息,但是它可以使多种通过不同方式训练出来的词向量加强词向量中包含的语义信息。经过预处理之后的词向量在一系列intrinsic衡量方式上(similarity, analogy, concept categorization)得到了一致性地提高。同时,我们通过了不同的应用上进行了测试,试验结果表明该预处理已经在诸多neural network中有所体现,进一步证实了对词向量进行预处理的重要性。

    .


    延伸五:NLP+Skip-Thoughts-Vectors︱基于TensorFlow的带语义特征的句向量编码方式

    本篇转载于新智元,题为《TensorFlow 自动句子语义编码,谷歌开源机器学习模型
    Skip-Thoughts》

    笔者觉得是高层次的

    github地址(新换):https://github.com/tensorflow/models/tree/master/research/skip_thoughts

    Skip-Thoughts 模型概要

    Skip-Thoughts 模型是一个句子编码器。它学习将输入的句子编码成固定维度的向量表示,这些向量表示能够对许多任务有用,例如检测释义,或对产品评论进行积极或消极的分类等等。有关模型架构和更多示例应用的详细信息,可以参阅Ryan Kiros 等人的 NIPS 论文 Skip-Thought Vectors。

    一个训练好的 Skip-Thoughts 模型会在嵌入的向量空间中对相互临近的相似句子进行编码。以下示例展示了对电影评论数据集中的一些句子的余弦相似性的最近邻域。
    我们描述了一种通用、分布式句子编码器的无监督学习方法。使用从书籍中提取的连续文本,我们训练了一个编码器-解码器模型,试图重建编码段落周围的句子。语义和语法属性一致的句子因此被映射到相似的向量表示。我们接着引入一个简单的词汇扩展方法来编码不再训练预料内的单词,令词汇量扩展到一百万词。同时建立word2vec到skip-thoughts向量之间的映射关系。
    在训练模型后,我们用线性模型在8个任务上提取和评估我们的向量,包括:语义相关性,释义检测,图像句子排序,问题类型归类,以及4个基准情绪和主观性数据集。最终的结果是一个非专门设计的编码器,能够生成高度通用性的句子表示,在实践中表现良好。
    这里写图片描述

    Skip-Thought 模型是 NIPS 2015论文 Skip-Thought Vectors 中描述的模型的一个 TensorFlow 实现,学习对句子的语义属性进行编码。

    引用:Ryan Kiros, Yukun Zhu, Ruslan Salakhutdinov, Richard S. Zemel, Antonio Torralba, Raquel Urtasun, Sanja Fidler. Skip-Thought Vectors. In NIPS, 2015.

    论文下载地址:https://papers.nips.cc/paper/5950-skip-thought-vectors.pdf

    这里写图片描述

    编码句子示例

    该示例的句子来自电影评论数据集(Movie Review Data)。

    ipython  # Launch iPython.
    
    In [0]:
    
    # Imports.
    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    import numpy as np
    import os.path
    import scipy.spatial.distance as sd
    from skip_thoughts import configuration
    from skip_thoughts import combined_encoder
    
    In [1]:
    # Set paths to the model.
    VOCAB_FILE = "/path/to/vocab.txt"
    EMBEDDING_MATRIX_FILE = "/path/to/embeddings.npy"
    CHECKPOINT_PATH = "/path/to/model.ckpt-9999"
    # The following directory should contain files rt-polarity.neg and
    # rt-polarity.pos.
    MR_DATA_DIR = "/dir/containing/mr/data"
    
    In [2]:
    # Set up the encoder. Here we are using a single unidirectional model.
    # To use a bidirectional model as well, call load_encoder() again with
    # configuration.ModelConfig(bidirectional_encoder=True) and paths to the
    # bidirectional model's files. The encoder will use the concatenation of
    # all loaded models.
    encoder = combined_encoder.CombinedEncoder()
    encoder.load_encoder(configuration.ModelConfig(),
                         vocabulary_file=VOCAB_FILE,
                         embedding_matrix_file=EMBEDDING_MATRIX_FILE,
                         checkpoint_path=CHECKPOINT_PATH)
    
    In [3]:
    # Load the movie review dataset.
    data = []
    with open(os.path.join(MR_DATA_DIR, 'rt-polarity.neg'), 'rb') as f:
      data.extend([line.decode('latin-1').strip() for line in f])
    with open(os.path.join(MR_DATA_DIR, 'rt-polarity.pos'), 'rb') as f:
      data.extend([line.decode('latin-1').strip() for line in f])
    
    In [4]:
    # Generate Skip-Thought Vectors for each sentence in the dataset.
    encodings = encoder.encode(data)
    
    In [5]:
    # Define a helper function to generate nearest neighbors.
    def get_nn(ind, num=10):
      encoding = encodings[ind]
      scores = sd.cdist([encoding], encodings, "cosine")[0]
      sorted_ids = np.argsort(scores)
      print("Sentence:")
      print("", data[ind])
      print("\nNearest neighbors:")
      for i in range(1, num + 1):
        print(" %d. %s (%.3f)" %
              (i, data[sorted_ids[i]], scores[sorted_ids[i]]))
    
    In [6]:
    # Compute nearest neighbors of the first sentence in the dataset.
    get_nn(0)

    输出:

    Sentence:
     simplistic , silly and tedious .
    
    Nearest neighbors:
     1. trite , banal , cliched , mostly inoffensive . (0.247)
     2. banal and predictable . (0.253)
     3. witless , pointless , tasteless and idiotic . (0.272)
     4. loud , silly , stupid and pointless . (0.295)
     5. grating and tedious . (0.299)
     6. idiotic and ugly . (0.330)
     7. black-and-white and unrealistic . (0.335)
     8. hopelessly inane , humorless and under-inspired . (0.335)
     9. shallow , noisy and pretentious . (0.340)
     10. . . . unlikable , uninteresting , unfunny , and completely , utterly inept . (0.346)

    延伸六:Doc2Vec的情感分析以及相似性

    Tutorial for Sentiment Analysis using Doc2Vec in gensim (or “getting 87% accuracy in sentiment analysis in under 100 lines of code”)
    github:https://github.com/linanqiu/word2vec-sentiments

    也可以用doc2vec来做相似性分析,其他办法有:
    第一种方法,使用docsim;第二种办法,使用doc2vec;第三种方式:使用LSH。
    博客里面也有code

    详细可见:用docsim/doc2vec/LSH比较两个文档之间的相似度

    .

    延伸七:能够表征相似的:基于CNN的短文本表达模型及相似度计算的全新优化模型

    来源:LSF-SCNN:一种基于CNN的短文本表达模型及相似度计算的全新优化模型

    LSF-SCNN,即基于词汇语义特征的跳跃卷积模型 (Lexical Semantic Feature based Skip Convolution neural network ),基于卷积神经网络模型引入三种优化策略:词汇语义特征 (Lexical Semantic Feature, LSF)、跳跃卷积 (Skip Convolution, SC)和K-Max均值采样 (K-Max Average Pooling, KMA) ,分别在词汇粒度、短语粒度、句子粒度上抽取更加丰富的语义特征,从而更好的在向量空间构建短文本语义表达模型,并广泛的适用于问答系统 (question answering)、释义识别 (paraphrase identification) 和文本蕴含 (textual entailment)等计算成对儿出现的短文本的相似度的任务中。
    LSF特征怎样计算得到?
    问题和答案中的每一个单词都会有一个LSF特征,具体来说是一个[0,t]上的整数值。LSF的计算过程可通过下面一个例子说明,当我们想要求解问题中general一词的LSF特征时,第一步我们需要计算general与答案中每一个词的余弦相似度并选取其中的最大值,因此chief被选取出来。第二步,余弦相似度值的最大值0.79将通过一个映射函数映射为一个[0,t]区间的整数,当我们假定t=10,最终计算得到general的LSF特征为3。这是合理的,general和chief一定程度上是近义词。
    这里写图片描述

    .

    延伸八:473个模型试验告诉你文本分类中的最好编码方式

    论文地址:https://arxiv.org/pdf/1708.02657.pdf
    来源机器之心:学界 473个模型试验告诉你文本分类中的最好编码方式
    本论文实证研究了在文本分类模型中汉语、日语、韩语(CJK)和英语的不同编码方式。该研究讨论了不同层面的编码,包括 UTF-8 bytes、字符级和词汇级。对于所有的编码层面,我们都提供了线性模型、fastText (Joulin et al., 2016) 和卷积网络之间的对比。对于卷积网络,我们使用字符字形(character glyph)图像、one-hot(或 one-of-n)编码和嵌入方法比较了不同的编码机制。总的来说,该实验涉及 473 个模型,并使用了四种语言(汉语、英语、日语和韩语)的 14 个大规模文本分类数据集。该研究所得出来的一些结论:基于 UTF-8 字节层面的 one-hot 编码在卷积网络中始终生成优秀结果;词层面的 N 元线性模型即使不能完美地分词,它也有强大的性能;fastText 使用字符层面的 N 元模型进行编码取得了最好的性能,但当特征太多时容易过拟合。
    这里写图片描述

    通过比较以上表格中的误差率,作者得出以下结论:

    • 1、fastText模型对中、日、韩文本(CJK语言文本)在character级编码的处理结果更好;而对英语文本则在word级编码的处理结果更好;
    • 2、对于fastText和线性模型,CJK语言的word级编码在没有完美分割的情况下效果相当;
    • 3、卷积网络的最佳编码机制是byte级独热编码(byte-level one-hot encoding)。
      这表明卷积网络能够从低级别的表示中理解文本,并提供了一致的和统一的方式来处理多种语言。
    • 4、fastText相比于卷积网络更倾向于过拟合,而相比于线形模型也并没有表现出更多的表示能力(representation
      capacity)。

    当然,尽管作者在此列了473种模型进行对比,但仍不是全部。例如深度学习模型本文只用了卷积网络模型,但其实还有别的一些有意思的模型,例如周期性网络(recurrent networks)等。作者似乎计划在之后会对周期性网络进行研究,同时还会改进卷积网络模型,看会有什么样的效果。

    展开全文
  • 文本表示

    千次阅读 2015-11-18 14:45:27
    要使得计算机能高效的处理真实文本,就必须找到一种理想的形式化表示方法,这种表示一方面能真实的反映文档内容(主题、领域或结构等),另一方面也要有对不同文档的区分能力。   目前文本表示通常采用向量空间模型...

    要使得计算机能高效的处理真实文本,就必须找到一种理想的形式化表示方法,这种表示一方面能真实的反映文档内容(主题、领域或结构等),另一方面也要有对不同文档的区分能力。

     

    目前文本表示通常采用向量空间模型(vector space model, VSM) 。VSM是20世纪60年代末期由G. Salton等人提出的,是当前自然语言处理中常用的主流模型。

     

    下面首先给出VSM设计的基本概念:

    (1) 文档(document): 通常是文章中具有一定规模的字符串。文档通常我们也叫文本。

    (2) 特征项 (feature term): 是VSM中最小的不可分的语言单元,可以是字、词、词组、短语等。一个文档内容可以被看成是它含有的特征项的集合。表示为一个向量:D(t1,t2,...,tn),其中tk是特征项。

    (3) 特征项权重 (term weight): 对于含有n个特征项的文档D(t1,t2,..,tn),每一个特征项tk都依据一定的原则被赋予了一个权重wk,表示该特征相在文档中的重要程度。这样一个文档D可用它含有的特征项及其特征项所对应的权重所表示: D(t1=w1,t2=w2,...,tn=wn),简记为D(w1,w2,...,wn),其中wk就是特征项tk的权重。

     

    一个文档在上述约定下可以看成是n维空间中的一个向量,这就是VSM的由来,下面给出其定义。

    定义(向量空间模型VSM)给定一个文档D(t1,w1;t2,w2;...;tn,wn),D符合以下两条约定:

    1)各个特征项tk互异(即没有重复);

    2)各个特征项tk无先后顺序关系(即不考虑文档的内部结构)。


    在以上两个约定下,可以把特征项t1,t2,……tn看成一个n维坐标系,而权重w1,w2,……wn为相应的坐标值,因此,一个文本就表示为N维空间中的一个向量。我们称D=D(w1,w2,...,wn)为文本D的向量表示或向量空间模型。


     

    定义(向量的相似性度量simlilarity) 任意两个文档D1和D2之间的相似性系数sim(D1,D2)指两个文档内容的相关程度(degree of relevance)。设文档D1和D2表示VSM中的两个向量:



    那么可以借助N维向量空间中两个向量之间的某种距离来表示文档见的相似系数,常用的方法是使用向量之间的内积来计算:



    如果考虑向量的归一化,则可以使用两个向量夹角的余弦值来表示相似系数:



    采用VSM进行文本表示时,需要经过以下两个主要步骤:

    1)根据训练样本集生成文本表示所需要的特征项序列D = {t1,t2,……,td};

    2)依据文本特征项序列,对训练样本集和测试样本集中的各个文档进行权值赋值、规范化等处理,将其转化为机器学习算法所需的特征向量。


    另外,用VSM表示文档时,首先要对各个文档进行词汇化处理,在英文、法文等西方语言中这项工作相对简单,但在汉语中主要取决于汉语自动分词技术。


    除了VSM方法之外,还有例如:词组表示法,概念表示法等。词组表示法对文本分类效果的提高并不十分明显。概念表示法需要额外的语言资源,主要是一些语义词典,例如英文的Wordnet,中文的hownet。相关研究表明,用概念代替单个词可以在一定程度上解决自然语言的歧义性和多样性给特征向量带来的噪声问题,有利于提高文本分类效果。


     

    VSM模型为计算机处理文本分类打下了夯实的数学基础,但是一篇文本到底用哪些特征项来表示呢?比如在《【文本分类】 概述 》文章中举的那篇NBA文本的例子,我们可以用所有标蓝的词语作为特征项来表示文本向量:

     

               D = {勒布朗-詹姆斯 ,德维恩-韦德 , 里斯-波什 ,新赛季 ,迈阿密热火 ,总冠军 ,热火 ,球队 ,卫冕冠军,湖人 ,凯尔特人 ,休赛期 ,联盟 }

     

     而且这些特征项在文章中的权重是如何计算的呢? 关于这几个问题,我们都将在后面的特征提取方法和特征权重计算方法中讲到。

     

    因为统计学习方法的理论基础(即文档的内容与其中所包含的词有着必然的联系,同一类文档之间总存在多个共同的词,而不同类的文档所包含的词之间差异很大。进一步的,不光是包含哪些词很重要,这些词出现的次数对分类也很重要)。使得

    VSM成了适合文本分类问题的文档表示模型。在这种模型中,一篇文章被看作特征项集合来看,利用加权特征项构成向量进行文本表示,利用词频信息对文本特征进行加权。它实现起来比较简单,并且分类准确度也高,能够满足一般应用的要求。


    而实际上,文本是一种信息载体,其所携带的信息由几部分组成:如组成元素本身的信息(词的信息)、组成元素之间顺序关系带来的信息以及上下文信息(更严格的说,还包括阅读者本身的背景和理解)而VSM这种文档表示模型,基本上完全忽略了除词的信息以外所有的部分,这使得它能表达的信息量存在上限,也直接导致了基于这种模型构建的文本分类系统(虽然这是目前绝对主流的做法),几乎永远也不可能达到人类的分类能力。后面我们也会谈到,相比于所谓的分类算法,对特征的选择,也就是使用哪些特征来代表一篇文档,往往更能影响分类的效果。


    对于扩充文档表示模型所包含的信息量,人们也做过有益的尝试,例如被称为LSI(Latent Semantic Index潜在语义索引)的方法,就被实验证明保留了一定的语义信息(之所以说被实验证明了,是因为人们还无法在形式上严格地证明它确实保留了语义信息,而且这种语义信息并非以人可以理解的方式被保留下来),此为后话。

    实际上:统计学习方法其实就是一个两阶段的解决方案,(1)训练阶段,由计算机来总结分类的规则;(2)分类阶段,给计算机一些它从来没见过的文档,让它分类 。


    展开全文
  • 对抗的深度卷积生成网络来学习监督表示 主线为 Alec Radford 与 Luke Metz 等人的论文“Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks” 1 。 ...
  • 在计算机中,可以区分正负的类型,称为有符类型,正负的类型(只有正值),称为符类型。 数值类型分为整型或实型,其中整型又分为符类型或有符类型,而实型则只有符类型。 字符类型也分为有符和符类型
  • 语言表示方法大体上可以从两个维度进行区分。一个维度是按不同粒度进行划分,语言具有一定的层次结构,语言表示可以分为字、词、句子、篇章等不同粒度的表示。另一个维度是按表示形式进行划分,可以分为离散表示和...
  • 计算机中数的表示

    千次阅读 2018-11-27 22:20:40
    符号数保存在寄存器中,寄存器的位数,反映了符号数的表示范围。 如:如果寄存器位数为8位,存储数据范围为: 如果寄存器位数为16位,存储数据的位数范围: 有符号数 (一)真值和机器 首先要明白...
  • 知识表示

    万次阅读 2010-04-02 16:07:00
    http://kczx.whu.edu.cn/Able.acc2.web/Template/office/a2b4d3cd65264b1b23c3de5416909-2943708102602.html 知识表示...在智能信息系统研究中,知识表示则是其核心部分之一。本章介绍六种常用的知识表示方法及
  • 文章目录2.... 数的定点表示和浮点表示定点表示浮点表示浮点数的存储格式移码浮点数的规格化单精度浮点数真值双精度浮点数真值2.2.2 加法运算2.2.3 补码加减运算2.2.4 定点数的乘除运算一. 原码乘法1. 题目2
  • 图的两种表示方法

    万次阅读 2018-01-12 16:33:33
    前面我们简单的介绍了一些关于图的基础知识,这一次我们来讨论一下在计算机中如何去描述一个图,采用怎样的一个数据结构。前面我们看到,一个图的基本组成就是节点和边,因此,我们只想找到一种描述节点并且节点之间...
  • 计算机中的数值表示

    千次阅读 2019-07-03 18:05:56
    符号数和带符号数 在计算机中,采用数字化方式来表示数据。数据有无符号数和带符号数之分,带符号数根据其编码的不同又有原码、补码和反码3种形式。 在C语言中,八进制数常以前缀0开始,十六进制数以前缀0x开始。...
  • 基于 FPGA 的数字表示

    万次阅读 2018-11-13 17:35:41
    文章目录基于 FPGA 的数字表示零、计数系统框架一 、整数的表示1.1 二进制反码1.2 二进制补码二、 非整数值的表示2.1 定点二进制数2.2 定点量化2.4 小数部分截断2.5 一种不同的方法 Trounding三、 浮点数定义及表示...
  • 词向量、word2vec门槛理解! 其实顺便分享下,在我个人的方法论思维中,一个带有完整上下文以及结构构建良好的知识框架,在某种程度上,比一些细枝末节的详细知识点来的重要的多了!因为,一旦构建了一个完备的...
  • 有符号整数的表示范围

    万次阅读 2018-08-23 08:44:07
    n比特有符号整数的表示范围为[−2^(n−1) ~ 2^(n−1)−1] 解释 1、符号位 首位为符号为,1为负,0为正; 2、对于八位整数为例 00000000到01111111,表示0到+127。10000001到11111111,表示-1到-127。大家可以...
  • 正则表达式,表示且(与)关系的匹配

    千次阅读 2020-07-13 21:09:22
    类似上面的方法,每个()表示你所要放置的一个条件,该正则匹配的结果必须满足每一个括号中的内容。括号里的内容需要以?=开始,.*表示任意个其他字符。 其实很简单,这样以括号区分的话,就不要求先后顺序,只要...
  • 我们在前面的《模型汇总_9 深度学习网络的表达方式汇总及模型分类方法》这篇文章中,指出了深度学习中常用的三种表示数据的方式,即局部表达、稀疏表达和分布式表达。深度学习强大建模和知识抽取的能力,主要原因之...
  • 本栏目(Machine learning)包括单参数的线性回归、多参数的线性回归、Octave Tutorial、Logistic Regression、Regularization、神经网络、机器学习系统设计、SVM...所有内容均来自Standford公开课machine learning
  • 之前的StringBuffer,缓冲区中的内容可以更改,可以提高效率。 如果想接收任意长度的数据,而且避免乱码的产生,就可以使用BufferedReader。 public class BufferedReader extends Reader 因为输入的数据有可能...
  • 电源符号:VCC、VDD、VEE、VSS、VBAT各表示什么意思?

    万次阅读 多人点赞 2018-05-19 11:47:22
    下面是stm32vet6的引脚图:   电路设计以及PCB制作中,经常碰见电源符号:VCC、VDD、VEE、VSS、VBAT,他们具有什么样的关系那?... (3)VSS:S=series 表示公共连接的意思,通常指电路公共接地...
  • 监督信息抽取较多都是使用哈工大的ltp作为底层框架。那么基于ltp其实有了非常多的小伙伴进行了尝试,笔者私自将其归纳为: 事件抽取(三元组) 观点抽取 “语言云” 以哈工大社会计算与信息检索研究中心研发的 ...
  • 首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0~255。计算方法就是二进制与十进制之间的转换。 如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0...
  • java解析pdf获取pdf中内容信息

    万次阅读 多人点赞 2019-04-28 18:31:13
    java解析pdf获取pdf中内容信息 今日项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询。 1 使用开源组织提供的开源框架 pdfbox api ; ...
  • 在你的手机更多设置或者高级设置中,我们会发现有个障碍的功能,很多人不知道这个功能具体是干嘛的,其实这个功能是为了增强用户界面以帮助残障人士,或者可能暂时无法与设备充分交互的人们 它的具体实现是通过...
  • 稀疏矩阵:矩阵中0元素的个数远大于非零,且0元素分布规律。稠密矩阵:稀疏矩阵反之。稀疏表示:寻找一个系数矩阵A(K*N)以及一个字典矩阵B(M*K),使得B*A尽可能的还原X,且A尽可能的稀疏。A便是X的稀疏表示。...
  • 一、原理:大致简述一下,谷歌已经在View、ViewGroup、TextView等控件的文字改变、滑动、UI变化埋下了接口,当这些状态变化时控件会回调系统API,API系统然后对这些对象的数据进行组装,为了数据的安全性,系统会...
  • Python 文本文件内容批量抽取

    万次阅读 2018-06-26 20:02:35
    Python新手编写脚本处理数据,...我们这里的目的是将每行Top 7对应的评分数据抽取出来,并且将评分第二的数值与一个阈值(这里是0.7)进行比较,超过阈值表示此次测试成功,结果为正样本,记为1,否则置0。并最终将...
  • html中form表示一个表单,用来把一系列的控件包围起来,然后再统一发送这些数据到目标,比如最常见的注册,你说需要填写的资料,都是被封装在form里的,填写完毕后,提交form内的内容,如果不再form内则不会提交。...
  • 基于产生式表示的动物识别系统

    万次阅读 2011-10-23 10:35:03
     理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用编程技术建立一个基于产生式知识表示的简单的智能系统。 例 建立一个动物识别系统的规则库,用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等7...
  • 年、月、日、时、分、秒、毫秒、星期等等,但是在内核中,为了软件逻辑和代码的方便性,它使用了一些不同的时间表示方法,并为这些表示方法定义了相应的变量和数据结构,本节的内容就是阐述这些表示方法的意义和区别...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,008,693
精华内容 403,477
关键字:

怎么表示一下无内容