越来越觉得,其实所谓觉得好吃,是因为那里有美好的回忆。
Continue readingMonthly Archives: January 2019
180 degree south
Sunset
今天无意中看到了几张以前拍的照片,都是晚霞,觉得很漂亮。
The master algorithm
所有知识,无论是过去的、现在的还是未来的。都有可能通过单个通用学习算法来从数据中获得。
BERT based sentence scenario detector
前两天用简单的多层感知器搭建了一个Word-level的detector模型。在模型的最后一次是用来Softmax,将Output Layer进行了分类。
对于场景识别这个问题,我目前先规定了可选的类别(比如Forest/ Ocean/ River/ College/ Suburb/ etc.)。这样一方面来说,可以简化detector的工作流程,另外也比较适应我们组目前的资源情况(识别场景之后需要提取事先准备好的Background,如果提取出了新的element也是无法获取到background resource的)。
上周我的想法是先使用Word embedding将Sentence转化为Sequence,然后使用Bi-LSTM或者直接使用Linear CRF对Sequence进行Sequence Tagging,以提取Sentence中涉及场景的Word。最后通过Word-level detector分析所选的Word,得到Sentence-level Scenario。
不过经过实验我发现,由于我手上只有不到500个短篇的儿童故事,还是没有标注的那种。就算我全部拿来进行标注,也只能生成不到5000个Phases。因为Labeler的资源比较紧张,我先用第一版的词表Detector模型生成了Labeling data,丢到CRF里面之后发现出了Person-entities,其他的类别基本无法有效识别出来。
于是这种方法暂时宣告失败。
周五晚上在公司发呆,突然觉得可以试一试力大砖飞的方法,直接使用Sentence-level embedding来作为Input。在这个模型里加入了CNN Layer,但其实单靠Dense Full connect Layer就已经可以在这个数据集上达到同样的效果了。
# 模型构建
model = Sequential([
Conv1D(filters=5, kernel_size=5, strides=1, padding='valid', input_shape=(768, 1), name="Convolution_Layer_1"),
AveragePooling1D(pool_size=5, strides=1, padding="valid", name="Pooling_Layer_1"),
Conv1D(filters=5, kernel_size=5, strides=1, padding='valid', name="Convolution_Layer_2"),
AveragePooling1D(pool_size=5, strides=1, padding="valid", name="Pooling_Layer_2"),
Flatten(name="Flatten_Layer"),
Dense(256, input_dim=3760, name="Dense_Layer_1"),
Activation('relu'),
Dropout(0.1),
Dense(32, input_dim=256, name="Dense_Layer_2"),
Activation('relu'),
Dropout(0.1),
Dense(11, input_dim=32, name="Dense_Layer_3"),
Activation('softmax'),
])
More than it
上周换了一副新眼镜。
由于用眼习惯不好,我一直都是高度近视。眼镜在我的生活里是必需品。
之前在澳洲眼镜架突然坏了,我找了整个City和Box Hill都没有找到可以修理或者更换的地方。只好自己从国内买了维修的零件和胶水自己修理。
为了把断在眼镜架里面的鼻托支架取出来,我用电钻给鼻托支架的支撑位钻了一个小洞,之后又往里面灌了不少解胶剂。估计是因为镜架是塑钢材质的,我修好之后发现镜架居然裂了一条缝,还好我已经用胶水填了缝。
结果上周的某一天不知道怎么回事,戴上眼镜之后就觉得很不舒服。仔细一看才发现是因为之前的那个缝隙裂开了,导致镜片松动,屈光位置对不上了。
想了想再用胶水粘起来也不是长久之计,如果回了墨尔本再断了,就不是这个容易修理的了。于是果断换了一副新的眼镜。
这次配了一个比较大的镜框,据说这样看东西会明亮许多,但估计也得需要时间去适应一下。这两天戴这副眼镜的话,还是有一点晕的。还有就是,老妈一直非常关心我的视力问题,因为她身边有不少同事都因为高度近视吃了不少苦头。我自己其实也深受其害,希望自己以后可以注意用眼,少看一点电脑屏幕,少刷一点手机。
有的时候,闭上眼睛,你可以看到更多。
HHKB keyboard layout
通用场景识别器
今天是新年第一天上班,然后想到这周只用上三天班就很开心。
由于Sequence Tagging需要大量的标注数据,我这边暂时没有数据源,所以今天下午就先用现有的标注数据集做了一个场景Softmax分类器。
原理十分简单,使用Word2vec (之后可能会考虑换成BERT,但是这两天BERT在我这里表现还不是很理想,所以先用顺手的工具搭建一下Demo)生成词向量。之后通过标注数据集合,将词表里所有的词分成以下几个大类(类别可以由具体的使用场景确定,我这里的分类主要是为了适配童话故事的情况)。
# 模型构建
model = Sequential([
Dense(32, input_dim=200),
Activation('relu'),
Dropout(0.1),
Dense(16, input_dim=32),
Activation('relu'),
Dense(9, input_dim=32),
Activation('softmax'),
])
用Keras搭建了一个最简单的多层感知机,加上Dropout,开始喂数据。最后可以达到96%左右的Accuracy,算是基本可以使用了。
test loss: 0.09276254528926478
test accuracy: 0.9666666666666667
现在这套模型已经可以识别任意词的场景类别了。下一步就是使用Sequence Tagging找出描述场景的位置了。