Sentence Classification

针对句子的分类,理解的处理是自然语言处理领域中很重要的研究领域。 这里将介绍以下几种句子的分类方法:

  1. Bag-of-words
  2. Word2Vec
  3. Doc2Vec
  4. TF-IDF

1. Bag-of-words

Bag-of-words是对句子中单词的出现次数的向量表示。 比如说 {I, have, a, pen, I, have, an, apple} 通过使用Bag-of-words向量表示时, 单词的顺序为: I, have, a, pen, an, apple 对应的单词频度为: [2,2,1,1,1,1]

Bag-of-words的优点: 简单易懂, 计算效率高。

Bag-of-words的缺点:

a. 没有考虑单词的出现顺序, 只要使用了相同的单词,那么表达出来的向量就是一样的。

b. 不能表达语义,比如,programming, python, plane 三个单词的距离是一样的。 (按语义理解,programming和python应该是相近的)

2. Word2Vec

Word2Vec是什么

Word2Vec是单词的向量表示方法,对单词的表示,常见的是使用one-hot向量的方法。 与one-hot vector相比Word2Vec可以表达单词的语义,以及其文法, 经过word2vec表示的单词,不在是一个单独的词,而是包含了上下文统计信息的一种向量表达。

比如, 根据{I, have, a, pen, I, have, an, apple}建立一个词表, 那么我们可以得到I, have, a, pen, an, apple 当我们对pen使用one-hot表示时,可以得到[0,0,0,1,0,0]. apple为[0,0,0,0,0,1]

这种表达的缺点是,当词表中增加新单词时, 向量的维数就要增加。 另外也无法表达单词与单词之间的相互关系(相似,反义词等等)。

Word embedding方法解决了以上的几种缺陷,它支持更复杂的表达, 并且可以支持演算处理。

Word embedding通常表达为一个固定维数的向量,比如200-1000维。 它不是简单的将单词映射为向量,而是通过复杂的演算来对单词进行编码。

Word2Vec训练方法

Word2Vec通过关注文中的单词是否可以交换来学习单词与单词之间的关系。

CBow and Skip-ngram

方法1: CBoW (Continuous Bag-of-Words)

CBoW通过使用前后k个单词,来预测当前的对象单词来学习。

方法2: Continuous Skip-gram

Skip-gram使用当前的单词来预测前后k个单词。 此方法在训练数据比较少的情况下,也可以有比较好的精度。 Skip-gram方法对低频词效果更好。

Word2Vec的加减运算

可以进行加减运算 比如可以进行以下运算:

国王 - 男 + 女 = 女王

巴黎 - 法国 + 日本 = 东京

Word2Vec弱点

Word2vec不能很好的表达反义词。 例如:

我喜欢在外面吃饭

我讨厌在外面吃饭

通过这两个句子表达出来的[喜欢]与[讨厌]是没有区别的。

当要开发的功能对反义词有很重要的依赖时, 需要谨慎使用Word2vec。

使用Google pre-trained word2vec model

直接使用Google训练Word2Vec模型, 通常可以得到比较好的性能。 https://code.google.com/archive/p/word2vec/

3. Doc2Vec

与Word2Vec类似,Doc2Vec也有两种计算方式,dmpv(Distributed memory paragraph vector)和DBow(Distributed Bag of Words)。 DBoW是一种考虑单词的顺序的简洁的模型, 其计算效率高效。 dmpv比DBoW更复杂,有更多的参数。

dmpv(Distributed memory paragraph vector)

Distributed memory paragraph vector

dmpv是基于word2vec的CBoW的方法改进而来。 dmpv增加了Paragraph ID, 通过使用前后的单词来预测对象单词。

DBow(Distributed Bag of Words)

Distributed Bag of Words

DBoW与Skip-gram方法相似,Skip-gram使用对象单词来预测前后的单词。 DBoW使用Paragraph ID来预测句子。 由于此方法与Bag-of-words类似没有考虑单词前后顺序, 所以被命名为Distributed Bag of Words。 此方法简单,省内存,计算效率高, 但是精度上没有dmpv方法好。

Doc2Vec参数优化

文章[3]中介绍了一些高效训练Doc2Vec的方法。

下表中给出针对不同任务的最优参数设置。

Q-Dup是使用StackExchange的数据,用来检测重复问题
Semantic Textual Similarity (STS)预测句子相似度任务。范围:0~5

Doc2Vec Parameters

Task:

Vector size: Word2Vec的维数

Window size: 单词前后的单词数

Min Count: 单词出现次数小于此值被忽略

Sub sampling:

Negative Sample:

学习率learning rate从0.25开始线性递减到0.0001。

4. TF-IDF

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆向文件频率(Inverse Document Frequency)。

TFIDF的主要思想是:如果词w在一篇文档d中出现的频率高,并且在其他文档中很少出现,则认为词w具有很好的区分能力,适合用来把文章d和其他文章区分开来。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)。

TF-IDF计算方法:

TF-TDF

TF-IDF值越大,则此单词的区分能力越强。

相关工具

gensim

Others

LDA

[1] Document Embedding with Paragraph Vectors

[2] Distributed Representations of Sentences and Documents

[3] An Empirical Evaluation of doc2vec with Practical Insights into Document Embedding Generation

参考文献:

https://github.com/jhlau/doc2vec#model-hyper-parameter-explanation

http://www.davidsbatista.net/blog/2017/04/01/document_classification/

https://groups.google.com/forum/#!topic/gensim/bEskaT45fXQ

https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-IMDB.ipynb

https://deepage.net/machine_learning/2017/01/08/doc2vec.html

http://www.ruanyifeng.com/blog/2013/03/tf-idf.html