服务器维护

本次服务器维护,将原来的一堆杂乱的资料重新整理了。但是出了些差错,之前的博客图片在备份的时候没有保存成功,好在数据库全保存了,不然文字图片都没了那是灾难。

本次维护会影响到之前推出的一些关键词工具的使用,会尽快恢复使用的,请随时关注博客的更新。

pymongo中find_one和find的效率

在Mongodb中,如果想检查一个文档是否存在,最高效的方法应该是使用find()+count(),而不是使用find_one()。

在Mongodb中,如果想检查一个文档是否存在,最高效的方法应该是使用find()+count(),而不是使用find_one()。

一般来说,我们第一感觉会认为find_one()最高效,但是find_one()每次查找会同时读取文档,这相比find()返回一个cursor,会慢不少。

David Mytton,在《Checking if a document exists – MongoDB slow findOne vs find》 (2013),指出了这个区别。

在我目前使用的pymongo 3.7.2中,无法像其文中所述,使用limit()判断返回的cursor是否存在,而需要count()判断返回的cursor是否包含文档。

因此,使用

db.collection.find({"username":"abc"}).count()
db.collection.find({"username":{"$in":usernames}).count() # 如果usernames是一个列表

来替代:

db.collection.find_one({_id: "myId"}, {_id: 1})

 

CNN文本分类数据不平衡的处理

用CNN做文本分类有一段时间了,关于训练数据不平衡的问题,我一直使用一个简单的方法,复制样本数据少的类别,在训练的时候,每个mini-batch都能相对均匀的抓取每个类别的信息。

今天一个偶然,去查了查CNN数据不均衡的问题,发现网上资料不少,主要围绕过采样的方法,看了下定义,原来就是我的这个操作方式,这种方式不适合在SVM里面使用,因为数据表现的信息恒定不变,可是为啥在CNN里面效果好呢?复制样本并没有添加任何的信息。只是为了让mini-batch更均衡的使用每个类别数据。

跟着疑问,追逐mini-batch的痕迹,在梯度下降的时候,由于计算量和机器的限制,无法一次性读入所有数据,而1个样本1个样本的处理,根本无法收敛,采用mini-batch,可以找到合适的下降步长和方向,快速收敛。同时,我们在使用mini-batch的时候,是用的sample batch,每一个batch,随机从总训练样本中抽取,这样每一个batch在梯度下降中的表现就不一样了。说到这,应该能联系上过采样在CNN中的好处了,一方面较为均匀的分配给每一个batch每一类别的信息,另一方面,增加了mini-batch的多样性,梯度下降能更好的找到最优或局部最优解。

当然,最好的方式还是增加信息量,即样本多样性,让模型的准确率更高,这个就是数据量大的说法了。

下次有机会做个对比实验。

 

 

关键词提取工具

发布一个关键词提取工具的在线版本,希望能给有需要的朋友提供便利,可以生成词云,也有详细的关键词和权重,这个工具的另外一个特性是提取的词会将高频的词组也提出,也因此存在一些非词组的词被自动提出),好处是通过关键词(或词组)能更清晰的看到文本的特点。

 

由于服务器性能有限,提交文本的长度最大为一万个字,每天工具使用次数上限为一万词,不过顶不住大家使用的压力的话,会下调,可以看通知。

传送门:关键词提取

有什么问题可以留言!

Nodemcu、无线射频和Wifi实现家庭灯光控制

之前参与智能音箱的项目,做语义理解,但硬件方面,实在是小白,这段时间腾出些时间,折腾下硬件,把家中的灯光整体改造一下。这篇文章从设计、硬件、软件、云服务、手机应用5个方面记录了这次改造中所获取的信息以及相关的程序代码。最终构建了一个通过手机控制和传统控制兼容的智能灯光。

项目地址
https://github.com/Ushiao/smartlife

Continue reading “Nodemcu、无线射频和Wifi实现家庭灯光控制”

词频、互信息、信息熵发现中文新词

词提取任务是文本挖掘的一个重要环节,本文的方法通过文本自身的特点,用互信息和信息熵来提取文本中的词。

新词发现任务是中文自然语言处理的重要步骤。新词有“新”就有“旧”,属于一个相对个概念,在相对的领域(金融、医疗),在相对的时间(过去、现在)都存在新词。文本挖掘会先将文本分词,而通用分词器精度不过,通常需要添加自定义字典补足精度,所以发现新词并加入字典,成为文本挖掘的一个重要工作。
Continue reading “词频、互信息、信息熵发现中文新词”

Seq2Seq和MTCS实现的对话系统

Seq2Seq模型和蒙特卡洛搜索树(简称:MTCS)实现的对话系统,是一个信息检索的对话系统,seq2seq可以生成句向量,再通过欧式距离匹配历史对话中距离最近的问句,给出该问句的回答,同时对话框架采用蒙特卡洛搜索树,问答对来自于搜索树上的各个节点,因此可以实现前后文的对话,属于一种非理解式的多轮对话。

Seq2Seq模型和蒙特卡洛搜索树(简称:MTCS)实现的对话系统,是一个信息检索的对话系统,seq2seq可以生成句向量,再通过欧式距离匹配历史对话中距离最近的问句,给出该问句的回答,同时对话框架采用蒙特卡洛搜索树,问答对来自于搜索树上的各个节点,因此可以实现前后文的对话,属于一种非理解式的多轮对话。

Continue reading “Seq2Seq和MTCS实现的对话系统”

智能酒店一种不一样的体验

智能酒店的“智能”两字很多情况下会被解释成“自动化程度高,功能多样型”,被误以为缺少了人文的关怀。事实上,智能酒店的设计和传统相比有过之而无不及,结合了“智能”,酒店设计是更重视用户体验,

智能酒店的“智能”两字很多情况下会被解释成“自动化程度高,功能多样型”,被误以为缺少了人文的关怀。事实上,智能酒店的设计和传统相比有过之而无不及,结合了“智能”,酒店设计是更重视用户体验, Continue reading “智能酒店一种不一样的体验”

正则做语义解析的优劣势

正则表达式(简称:正则)做语义解析是一种方法经典的方法。该文章简单的总结了正则方法的优势和劣势。

正则表达式(简称:正则)做语义解析是一种方法经典的方法。在上世纪60年代,大量的对话系统、专家系统都是用模式匹配来做,其中正则就是一个非常实用且易学的工具。具有代表性的Eliza,在当时让大家都以为这个机器能理解自然语言,即使说明了其中的原理,也有不少人认同它的智能。这套方式一直被延续至今,基本在市面上能看到的chatbots,都或多或少的保留了正则的部分。也许说到这里,有人认为马上要介绍正则如何做对话了,这篇记录只是记录一下在工作中,正则的优势和劣势。另外基于统计的方法,这里不做说明。

Continue reading “正则做语义解析的优劣势”

seq2seq模型的字符级的向量表示

这篇文章将简单介绍seq2seq模型+attention机制,以及在这个模型下,字符级逐字的输入和输出任务产生的句向量的特性。

许久未更博了,在前段时间测试了用seq2seq做ner任务,可以参考之前的文章《RNN的Seq2Seq模型做命名实体识别》 ,之后通过NER做NLU,再加上RL尝试多轮对话,结果达到了期望,但是还有很多工作需要去做,多轮语料采集、句子相似度、句向量,在多轮对话中,我没有尝试将每句话进行分类,我认为句子本身表意就非常清晰,标注反而画蛇添足,特别是上下文中的句子,其意思根据上下文而变化。那么对话中去匹配距离最近的句子,并且人为的反馈,可能是一个多轮对话的主要方式。

这篇文章将简单介绍seq2seq模型+attention机制,以及在这个模型下,字符级逐字的输入和输出任务产生的句向量的特性。 Continue reading “seq2seq模型的字符级的向量表示”