【读图识政治】中国最高领导人

最高领导人

中华人民共和国最高领导人是指中华人民共和国政治中具有最终决定和最高地位的政治领导人,是一个“非官方”的称谓。最高领导人在中国共产党和中华人民共和国的权力机构中不一定拥有最高职衔,但均曾担任中共中央军委主席,能有效控制其三大党政军机构——中国共产党、政府和解放军等武装力量。

目前中国官方称呼毛泽东、邓小平、江泽民、习近平为第一、二、三、五代中央领导集体的核心,称呼第四代胡锦涛为以他为总书记的党中央。党主席兼总理华国锋则是过渡时期的领导人。

2017年中共十九大之后,中共中央政治局全体委员和常委都被规定要向总书记述职,形成“总书记绝对领导制”,习近平作为总书记不再只是集体领导的一员,其权威已经达到毛泽东时期中央委员会主席的程度,成为全党全国的最高领袖。

历代领导人

姓名 肖像 党职 时间 备注
1 毛泽东 Mao_Zedong_portrait.jpg 中共中央委员会主席
中共中央军事委员会主席
1949-1976 党主席,一直都是最高领导人
华国锋 Hua Guofeng-1.jpg 中共中央委员会主席
中共中央军事委员会主席
1976-1978 毛泽东钦点的接班人,党内斗争失势后退休
2 邓小平 Deng Xiaoping.jpg 中共顾问委员会主任
中共中央军事委员会主席
1978-1992 1978年复出做元老代表,主持改革开放政策
3 江泽民 Jiang Zemin St. Petersburg2002.jpg 中共中央总书记
中共中央军事委员会主席
1992-2002 六四事件之后取代赵紫阳做中共中央总书记
4 胡锦涛 Hu Jintao Cannes2011.jpg 中共中央总书记
中共中央军事委员会主席
2002-2012 邓小平于1992年就已经隔代钦点的接班人
5 习近平 Xi Jinping Sept. 19, 2012.jpg 中共中央总书记
中共中央军事委员会主席
2012- 革命元老习仲勋儿子,中共党内协商产生

领导班子

邓小平一生未担任国家元首、政府首脑,或党内最高领导职务,但从1978年12月(中共十一届三中全会)至1989年11月辞去中共中央军委主席(中共十三届五中全会)一职前,普遍认为他是实际的最高领导人,并写入《中国共产党章程》予以确认。

1976-1981 华国锋任国家主席。1978年实权逐渐转移至邓小平。
1981-1982 胡耀邦任国家主席。由邓小平为首的中共元老掌握实权。
1982-1987 胡耀邦 总书记 在职期间由中共元老邓小平担任实际最高领导人。
1987-1989 赵紫阳 总书记 在职期间由中共元老邓小平担任实际最高领导人。

军委主席

因此形式上存在两个中央军事委员会,即中国共产党中央军事委员会中华人民共和国中央军事委员会,但是两个委员会的最高负责人(又分别称中共中央军委主席和国家军委主席)和副主席除了过渡时期外均为相同的人选

国家主席

  • 邓小平指出:“还是要设国家主席,有国家主席代表国家比较好,但是对国家主席的职权可以规定得虚一点,不要管具体工作,不要干涉具体政务。”
  • 1981年5月16日,第五届全国人民代表大会常务委员会第十八次会议决定,授予病危的宋庆龄“中华人民共和国名誉主席”荣誉称号。
  • 1983年开始,中华人民共和国“主席”的官方英文译名由“Chairman”(直译为“主席”)改为“President”(可译为“总统”)。

参考

  • 维基百科

【深度学习-模型系列】Inception

简介

创新点

code

https://github.com/tensorflow/models/tree/master/research/inception

【Hexo插件系列】hexo-reference

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var renderFootnotes = require('./src/footnotes');
util = require('hexo-util');

// Register footnotes filter
hexo.extend.filter.register('before_post_render', function(data) {
data.content = renderFootnotes(data.content);
return data;
});

// Add CDN CSS resources
hexo.extend.filter.register('after_post_render', function(data) {
data.content =
util.htmlTag('link', {rel: 'stylesheet', type: 'text/css', href: 'https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css'}) +
data.content;
return data;
});

是不是应该叫filter

【java源码系列】random的源码实现

API介绍

  • Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double
    -

用法

生成从1到10的int型随机数

1
2
3
4
5
// 方式一:
int i = (int)(1+Math.random()*(10-1+1))

// 方式二:
int i = random.nextInt(99)+1;

主要涉及的类

java.util.Random

其他

Random从Jdk 1.0开始就有了,而ThreadLocalRandom是Jdk1.7才新增的。简单从命名和类所在的包上看,两者的区别在于对并发的支持。

【数据分析篇】aspect-level 数据分析

SemEval 2014 Task 4

Read train 2990, test 973

长度 20以下的,Trimmed to train 2124, test 692

数据量好少,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
and cheap !
price
1
the staff is n't the friendliest or most competent , and i am stickler for service , but everything else about this place makes up for it .
service
-1
the service is always bad though , do n't expect much of anything from your server , and i would not recommend bringing a date here either .
service
-1
i absolutely love this place ! ! !
miscellaneous
1
a restaurant that does n't try to do anything except serve great food with great service in a pleasant atmosphere .
ambience
1
this place was not all that !
miscellaneous
-1
the food is great .
food
1
highly recommended ! ! ! ! !
miscellaneous
1
the food was really good , i had the onion soup and it was one of the best ever .
food
1
a++ the service was good to excellent along with the attitude .
service
1
we had a 3 hour brunch- they definitely do not rush you- and they kept the unlimited mimosas flowing the whole time .
service
1
i 've been eating at taj mahal for over twenty years and have found them to be the most excellent of the indian eateries on this block of indian restaurants .
miscellaneous
1
anyway , the food is good , the price is right and they have a decent wine list .
price
1

基于aspect的情感分析指的是挖掘句子中涉及的aspect,以及对每个aspect表现出来的情感。

现有的工作一般把这个任务分成两个部分:aspect识别,可以是aspect term提取或者aspect分类;aspect的情感识别

aspect term提取

待阅读

【深度学习-trick系列】batch、batch_size、batch normalization

简介

“you want zero-mean unit-variance activations? just make them so.”

采用强制归一化,而不通过小心翼翼的设计激活函数,实现中间层的N(0,1)分布

#

雷军
为什么要在激活前做BN?
雷军
因为我们期望的是激活函数的输入服从N(0,1),而不是激活函数的output服从N(0,1)。
雷军
有了BN,是否还需要对输入数据归一化处理?
雷军
不用了

#

  • Train mode:
    • 𝜇, 𝜎 are functions of 𝑥; backprop gradients
  • Test mode:
    • 𝜇, 𝜎 are pre-computed on training set (by running average, or post-processing after training)

DNN中的normalization

  • 白化(whitening)
    -

ResNet采用了Batch Normalization

实例

resnet中的BN

1
2
3
x = Conv2D(filters1, (1, 1), name=conv_name_base + '2a')(input_tensor)
x = BatchNormalization(axis=bn_axis, name=bn_name_base + '2a')(x)
x = Activation('relu')(x)

RNN中的BN

rnn中

transformer中

没有BN,只有LN。为什么?

batch_size

为了充分利用大规模集群算力以达到提升训练速度的目的,人们不断的提升batch size大小,这是因为更大的batch size允许我们在扩展GPU数量的同时不降低每个GPU的计算负载。

调参经验

难以捉摸的batch size

通常的经验:

  1. 速度:
    1. batch size越大,速度越快(每小时处理的样本数越多)。
    2. 速度有上限,计算资源会饱和
  2. 精度:
    1. batch size越大,泛化能力却变差(在测试集上效果差)
    2. batch size极小(比如1, SGD),模型可能会收敛困难,甚至发散

实测

语言模型

我的测试

Batch_size Emb_size N_unit Epoch Elapse min/epoch TrainPPL TestPPL wps (train) 显存 comments
512 512 512 20 11h 33 213 363,313 90k-150k 2G
2048 512 512 20 6.5h 19.5 350,208 514,300 170k-220k 4G 大batch能提速,测试集上的收敛情况不不确定
4096 512 512 20 6h 18 438,208 687,332 170k-220k 8G 速度达到上限,也许计算资源饱和
512 1024 2048 13 23h 106 190,105 236,185 30k-35k 4G emb_size和num_unit增大,效果提升
2048 1024 2048 15 23.5h 94 229,102 284,185 35k-40k 8G 大batch,微弱提速
  • 验证了经验 1.11.2
  • 并未验证经验2

机器翻译 - transformer

paper中的测试
来自training tips for transformer:

  • base model:
    • 大batch size不仅速度快,而且收敛快。所以transformer中batch size越大越好,不OOM就行。
    • 验证了经验1,与经验2.1相抵触
  • big model:
    • batch_size=1450效果挺好,1400在2小时候突然效果变差。可能是因为,batch太小导致较大误差,从而训练变得发散。这种发散可能是临时的(1400),也可能是不可恢复的(1000)。另一部分原因可能是 big model有可能比较比较难初始化。
    • 验证了经验12
  • 推荐: transformer中batch size能设置多大就多大


我的测试

总结 - 面临的挑战

大batch size带来精度损失

过度增大batch size会带来明显的精度损失!这是因为在大batch size(相对于训练样本数)情况下,样本随机性降低,梯度下降方向趋于稳定,训练就由SGD向GD趋近,这导致模型更容易收敛于初始点附近的某个局部最优解,从而抵消了计算力增加带来的好处。如何既增大batch size,又不降低精度,是机智团队面临的首要挑战。

TODO: 测试大batch_size的影响

解决办法

为了提升大batch size情况下的可扩展性,机智团队将训练数据和参数采用半精度浮点数的方式来表示,以减少计算量的同时降低带宽需求。但半精度浮点数的表示方式不可避免的会降低模型收敛精度。

我的测试 - 机器翻译

接口

1
keras.layers.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001,...)

参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
axis: Integer, the axis that should be normalized
(typically the features axis). For instance, after a Conv2D layer
with data_format="channels_first", set axis=1 in BatchNormalization.
momentum: Momentum for the moving mean and the moving variance.
epsilon: Small float added to variance to avoid dividing by zero.
center: If True, add offset of beta to normalized tensor. If False, beta is ignored.
scale: If True, multiply by gamma. If False, gamma is not used. When the next layer is linear (also e.g. nn.relu), this can be disabled since the scaling will be done by the next layer.
beta_initializer: Initializer for the beta weight.
gamma_initializer: Initializer for the gamma weight.
moving_mean_initializer: Initializer for the moving mean.
moving_variance_initializer: Initializer for the moving variance.
beta_regularizer: Optional regularizer for the beta weight.
gamma_regularizer: Optional regularizer for the gamma weight.
beta_constraint: Optional constraint for the beta weight.
gamma_constraint: Optional constraint for the gamma weight.

实例

  • 2018年6月25日,OpenAI在其Dota2 5v5中取得一定成绩后介绍,其在训练中batch size=100W,而1v1的训练batch_size=800W;训练时间则是以周计。
  • 腾讯内部的游戏AI也面临大batch size收敛精度和低训练速度慢的问题;目前batch_size超过10K则收敛不到基准精度
  • 腾讯在ImageNet数据集上,6.6分钟训练好ResNet-50,batch_size=65536
  • transformer翻译模型,batch_size=2048、4096

雷军
百万级的batch_size是用GPU训的?显存够吗?要多大显存啊?
雷军
。。。。
雷军
显存不够情况下,能否把单卡放一部分参数?
雷军
...

源码实现

参考

【深度学习-trick系列】Dropout

alex 2012 首次采用

能够防止过拟合

学习到的feature更鲁棒

Bagging 是通过结合多个模型降低泛化误差的技术,主要的做法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。而 Dropout 可以被认为是集成了大量深层神经网络的 Bagging 方法,因此它提供了一种廉价的 Bagging 集成近似方法,能够训练和评估值数据数量的神经网络。

Dropout 指暂时丢弃一部分神经元及其连接。随机丢弃神经元可以防止过拟合,同时指数级、高效地连接不同网络架构。神经元被丢弃的概率为 1 − p,减少神经元之间的共适应。隐藏层通常以 0.5 的概率丢弃神经元。使用完整网络(每个节点的输出权重为 p)对所有 2^n 个 dropout 神经元的样本平均值进行近似计算。Dropout 显著降低了过拟合,同时通过避免在训练数据上的训练节点提高了算法的学习速度。

Drop Connect

Drop Connect 是另一种减少算法过拟合的正则化策略,是 Dropout 的一般化。在 Drop Connect 的过程中需要将网络架构权重的一个随机选择子集设置为零,取代了在 Dropout 中对每个层随机选择激活函数的子集设置为零的做法。由于每个单元接收来自过去层单元的随机子集的输入,Drop Connect 和 Dropout 都可以获得有限的泛化性能 [22]。Drop Connect 和 Dropout 相似的地方在于它涉及在模型中引入稀疏性,不同之处在于它引入的是权重的稀疏性而不是层的输出向量的稀疏性。

【深度学习-模型系列】word2vec

简介

单词在计算机看来只是个符号而已,如何让计算机理解词义?

为什么要学习word embedding

图像和音频处理系统使用丰富的高维数据集,这些数据集被编码为图像数据的单个原始像素强度的向量,或者音频数据的功率谱密度系数。
对于物体或语音识别这一类的任务,我们所需的全部信息已经都存储在原始数据中(显然人类本身就是依赖原始数据进行日常的物体或语音识别的)。

然而,NLP通常将单词视为离散的原子符号(atomic symbol),因此“cat”可以表示为Id537,“dog”表示为Id143。这些编码是任意的,并且没有为系统提供关于个别符号之间可能存在的关系的有用信息。这意味着,当该模型处理有关“狗”的数据(比如它们既是动物、四条腿的、宠物等)时,它对“猫”的了解很少。将单词表示为惟一的、离散的id会导致数据稀疏,这通常意味着我们可能需要更多的数据来成功地训练统计模型。使用向量表示可以克服其中一些障碍。

向量空间模型(VSMs)表示连续向量空间中的词(嵌入),其中语义相似的词映射到附近的点(“彼此嵌入在一起”)。VSMs在NLP领域有着悠久而丰富的历史,但所有的方法都以某种方式依赖于分布假设,即出现在相同上下文中的单词具有相同的语义。利用这一原理的不同方法可以分为两类:

  • 基于计数的方法
    • 基于计数的方法计算某个单词与相邻单词在大型文本语料库中共存的频率的统计数据,然后将这些统计数据映射到每个单词的一个小而密集的向量。
    • 即对one-hot的降维
    • 如潜在语义分析、LDA、PCA,等传统降维方法
      • lda中的p(w|z)跟softmax什么关系?
  • 基于预测的方法(如神经概率语言模型)
    • 预测模型直接尝试根据学习到的小而密集的嵌入向量(考虑到模型的参数)来预测邻居的单词

以上参考tensorflow tutorial

简而言之,就是one-hot编码不能体现语义,单词间相似度是0

embedding可以看成sparse one-hot的降维,也可以看成id的升维。我觉得视为前者更好。

分布式假设

词向量的模型和求解都是基于同一种假设,Distributional Hypothesis (D.H.) (Harris, 1954):
“words are characterised by the company that they keep”

基于以上假设可以得出,上下文相似的词所表达的词义也是相似的

D.H. : the meaning of “cat” is captured by the probability
distribution P(|cat).

word2vec只是利用分布式假设的方法之一。

word2vec的起源

word2vec builds on existing research
architecture is essentially that of Minh and Hinton’s log-bilinear
model
change of focus: vectorization, not language modelling.

模型

skipgram VS cbow

字面意思呢?

  • skipgram: 重在skip这个词,并非连续的,而是跳跃的(predict the target using a random close‑by word)
  • cbow: continuous‑bag‑of‑words,重在continuous

优化目标

分类。词典大小是N,那么就是N分类。

弊端:

  • 【策略一】转化为二叉树,多个二分类。即Hierarchical Softmax
  • 【策略二】直接视为二分类:中心词w和context(w)相关,是正例,其他word都是负例
    • 负例太多,所以采用Negative Sampling

FS、 HS、 NCE

full softmax

神经网络语言模型通常采用极大似然估计(MLE)的方式,会采用softmax来计算$P(w_t | h) $。

$$\begin{align}
P(w_t | h) &= \text{softmax} (\text{score} (w_t, h)) \
&= \frac{\exp { \text{score} (w_t, h) } }
{\sum_\text{Word w’ in Vocab} \exp { \text{score} (w’, h) } }
\end{align}$$

其中$\text{score} (w_t, h)$

log似然,要最大化以下的函数
$$\begin{align}
J_\text{ML} &= \log P(w_t | h) \
&= \text{score} (w_t, h) -
\log \left( \sum_\text{Word w’ in Vocab} \exp { \text{score} (w’, h) } \right).
\end{align}$$

但是这里的第二项(full probabilistic model)计算量较大。

在word2vec,并不需要计算full probabilistic model。
CBOW and skip-gram 是采用二分类

$$J_\text{NEG} = \log Q_\theta(D=1 |w_t, h) +
k \mathop{\mathbb{E}}{\tilde w \sim P\text{noise}}
\left[ \log Q_\theta(D = 0 |\tilde w, h) \right]$$

HS

1
2
3
4
5
// 默认采用cbow模型
cbow = 1;

// 默认不用`Hierarchical Softmax`
int hs = 0, negative = 5;

Use Hierarchical Softmax; default is 0 (not used)

为什么层次 SoftMax 能加速?

  • Softmax 大部分的计算量在于分母部分,它需要求出所有分量的和
  • 而层次 SoftMax 每次只需要计算两个分量,因此极大的提升了速度

NCE

Noise-Contrastive Training

Negative Sampling

层次 Softmax 还不够简单,于是提出了基于负采样的方法进一步提升性能
负采样(Negative Sampling)是 NCE(Noise Contrastive Estimation) 的简化版本

比如我们有一个训练样本,中心词是w,它周围上下文共有2c个词,记为context(w)。由于这个中心词w,的确和context(w)相关存在,因此它是一个真实的正例。通过Negative Sampling采样,我们得到neg个和w不同的中心词wi,i=1,2,..neg,这样context(w)和$$w_i$就组成了neg个并不真实存在的负例。利用这一个正例和neg个负例,我们进行二元逻辑回归,得到负采样对应每个词$w_i$对应的模型参数$\theta_{i}$,和每个词的词向量。

Negative Sampling由于没有采用霍夫曼树,每次只是通过采样neg个不同的中心词做负例,就可以训练模型,因此整个过程要比Hierarchical Softmax简单。

Negative Sampling可否也用霍夫曼树?貌似还真不能?HS和NS貌似是冲突的。

负采样算法 - Negative Sampling

assigns high probabilities to the real words, and low probabilities to noise words

计算复杂度大大减小(注意分母,也就是log的第二项)。

scales only with the number of noise words that we select (k), and not all words in the vocabulary (V).

损失函数采用noise-contrastive estimation (NCE) loss tf.nn.nce_loss()

  • 负采样算法,即对给定的 w ,生成相应负样本的方法
  • 最简单的方法是随机采样,但这会产生一点问题,词表中的词出现频率并不相同
    • 如果不是从词表中采样,而是从语料中采样;显然,那些高频词被选为负样本的概率要大于低频词
    • 在词表中采样时也应该遵循这个
  • 因此,负采样算法实际上就是一个带权采样过程

这里还有很多细节,参考imhuay的github

一些源码细节

σ(x) 的近似计算,类似带权采样的策略,用查表来代替计算。

具体计算公式如下

$$\sigma(x)=\left {\begin{array}{ll} 0, &x<-6 \\="" \sigma(x_k),="" &x\in="" [-6,6]="" 1,="" &x="">6 \end{array}\right.$$

因为 σ(x) 函数的饱和性,当 x < -6 || x > 6 时,函数值基本不变了

低频词的处理

对于低频词,会设置阈值(默认 5),对于出现频次低于该阈值的词会直接舍弃,同时训练集中也会被删除

高频词的处理

  • 高频词提供的信息相对较少,为了提高低频词的词向量质量,有必要对高频词进行限制
  • 高频词对应的词向量在训练时,不会发生明显的变化,因此在训练是可以减少对这些词的训练,从而提升速度

Sub-sampling 技巧

  • 源码中使用 Sub-sampling 技巧来解决高频词的问题,能带来 2~10 倍的训练速度提升,同时提高低频词的词向量精度
  • 给定一个词频阈值 t,将 w 以 p(w) 的概率舍弃,p(w) 的计算如下

$$\begin{aligned} &p(w)=1-\sqrt\frac{t}{\mathrm{len}(w)}\ \text{where}\quad\ &\mathrm{len}(w)=\frac{\mathrm{count}(w)}{\sum_{u\in V}\mathrm{count}(u)} \end{aligned}$$

Word2Vec 中的Sub-sampling

  • 显然,Sub-Sampling 只会针对 出现频次大于 t 的词
  • 特别的,Word2Vec 使用如下公式计算 p(w),效果是类似的

$$p(w)=1-\left ( \sqrt\frac{t}{\mathrm{len}(w)} + \frac{t}{\mathrm{len}(w)} \right )$$

自适应学习率

  • 预先设置一个初始的学习率 η_0(默认 0.025),每处理完 M(默认 10000)个词,就根据以下公式调整学习率
  • 随着训练的进行,学习率会主键减小,并趋向于 0
  • 为了方式学习率过小,Word2Vec 设置了一个阈值 η_min(默认 0.0001 * η_0);当学习率小于 η_min,则固定为 η_min。

参数初始化

  • 词向量服从均匀分布 [-0.5/m, 0.5/m],其中 m 为词向量的维度
  • 所有网络参数初始化为 0

word2vec的不足

  • 基于上文的分布式假设,会出现“好”和“不好”相似度很高(因为这两个词的上下文大部份都是一样的)
    • “好”和”不好”更多的是相似,差异的细微的,人们认为它们是反义词。word2vec认为它俩相近是正常的,反而人是不客观的。
    • 要想学出它俩的区别来,需要用到情感分类的标签
  • HS树的构建
    • 采用的是平衡二叉树。n叉树呢?
      • 二叉树,是较多二分类,不适宜GPU。所以word2vec的相关代码都是采用的cpu,(google官方源码、fastText、gensim)
    • 树的深度,霍夫曼的最优性?
  • NCE的采样数目
    • 可以同时采样多个负样本,这样就适合GPU了吧?
  • 长依赖?需要这个东西吗?
  • 多义词
    • 每个词学多个vector(word2tensor): Improving Word Representations via Global Context and Multiple Word Prototypes; A Scalable Probabilistic Model for Learning Multi-Prototype Word Embeddings
  • oov

FAQ

  • Is “embedding” an action or a thing? Both
    • embedding words in a vector space (action)
    • producing word embeddings (things).
  • 为什么层次 SoftMax 能加速?
  • 为什么叫CBOW( Continuous Bag-Of-Words,即连续的词袋模型) 和 Skip-Gram?

参考

live demo

https://demo.eson.org/projector

TODO:扩展demo

  • word2vec的可视化
    • 给定word1 出word2
    • 显示vector向量
    • 一个word与一组word的相似度。用attention可视化。
    • 向量计算,比如king - man + woman = queen

【java源码系列】导读

背景知识

  • JCP:
    JCP(Java Community Process)成立于1998年,是使有兴趣的各方参与定义Java的特征和未来版本的正式过程。
    -

关于版本号

7是指jdk版本 7.0版本 u是update 更新的意思 45 是第45次更新

为什么要新建u开头的project?http://openjdk.java.net/projects/jdk8u/qanda.html

b07是不是发布JDK6u1时,JDK6作为开发分支的最后一个buid号?
每个release(无论是大版本的第一个release还是后面小版本的update release)在真的发布前都会经过很多次build。开发过程中通常是每周一build来做整合测试,临发布前会选择一个build作为候选版本跑更完整的测试,当这些测试都通过之后就发布。
所以6u18b07的意思就是针对JDK 6 update 18这个release,这是第07个build。
每个release的build number都是独立递增的,从1开始。

实现

OpenJDK 是一个自由开放源始码软件实现在Java Platform, Standard Edition (Java SE)。
在OpenJDK之前,许多各式各样不同的公司和组织推出好几个免费的Java实现。其中一个例子是Apache
Harmony。 IBM也有提供Java实现,而RedHat则是通过IcedTea项目提供它:一个用于OpenJDK的架构和集
成项目。

历史

版本 年份 new feature 其他
JDK Beta 1994
JDK 1.0 1996 几百个类
JDK 1.1 1997 内部类、JDBC、RMI
J2SE 1.2 1998 collections框架 - 作者Joshua Bloch
J2SE 1.3 2000 HotSpot JVM
J2SE 1.4 2002 仿照perl的正则、NIO
J2SE 5.0 2005 大量语法糖: 泛型、自动封装、枚举等 三千多个类
Java SE 6 2006
Java SE 7 2011
Java SE 8 2014
Java SE 9

JDK源码

openJDK

阅读笔记

参考

Oracle JDK

文本分类 - 综述

任务

  • 短文本分类
  • 长文本分类
  • 超短文本(一个word)分类

特定领域的文本分类

  • aspect-level classification
  • ss

methods:

  • word-level

    • tfidf + svm/lr
    • fastText facebook (只是作为baseline而已)
    • lstm bilstm
    • lstm + attention
    • cnn code1 code2
    • gated cnn
    • rcnn
  • char-level

    • char的作用? 见NLP.md
    • char cnn (Zhang and LeCun, 2015)
    • char rnn
    • char-CRNN (Xiao and Cho, 2016)
    • char-rnn + word rnn (Finding Function in Form: Compositional Character Models for Open Vocabulary Word Representation)
    • char-cnn + word rnn
  • Hierarchical:

datasets &

paper & implementation

[TextCNN]: Convolutional Neural Networks for Sentence Classification
[TextCNN-code]: https://richliao.github.io/supervised/classification/2016/11/26/textclassifier-convolutional/

[TextRNN]: Recurrent Neural Network for Text Classification with Multi-Task Learning
[TextRNN-code]:

[RNN+Attention]: Hierarchical Attention Networks for Document Classification
http://www.jianshu.com/p/4fbc4939509f
[RNN+Attention-code]: https://richliao.github.io/supervised/classification/2016/12/26/textclassifier-RNN/

[RNN+CNN]: Recurrent Convolutional Neural Networks for Text Classification. AAAI. 2015.
[RNN+CNN-code]: https://github.com/knok/rcnn-text-classification

[fastText]:

tutorial & survey & blog

http://www.jeyzhang.com/cnn-apply-on-modelling-sentence.html
https://zhuanlan.zhihu.com/p/25928551

web service

1. watson NLC: https://www.ibm.com/watson/developercloud/natural-language-classifier/api/v1
2. songfang NLC

code