^

Young Anything I do that may help others, I'll post it here.

JS Note

Syntax Note

...
more »

ElasticSearch Note

Score formula

ES版本跟新迭代的很快,截止到今天(2018.7.10) master的版本为6.3,打分公式一直都在微调,当前版本每个doc的对query的得分计算公式如下(就是最普通的BM25),其中n为query的term和当前doc的term的交集的大小:

idf计算公式如下,其中docCount为index中doc总数,docFreq为曾出现当前计算的term的doc频数:

tfNorm的计算公式如下,其中fieldLength为当前doc的term的个数,avgFieldLength为index内所有doc的平均term个数,freq为当前计算的term的频数,$k_1$和b为参数,其默认值分别为1.2和0.75:

注意:ES 为了分布式index和search的性能,docFreq , docCount and avgFieldLengthare computed per shard.

...
more »

NLP Memo Note

NLP

虚词

对短语的语义不起决定作用,对QA的查询贡献也小,这些词一般作为停用词表(stop list)

语法词:can, go, say, he;

功能词:介词of, about;

...
more »

设计模式

0 适配器模式

client -> adaptor interface -> adaptor class -> adaptee

不要为了适应功能的interface而去继承修改,实现的耦合重不可复用,应该用adaptor来转换interface。

concrete:具体的,凝固。

tabular:扁平的,列表的

1 工厂模式

客户端代码调用工厂类,让工厂类的内部方法逻辑选择判断该实例化哪个具体类。

  1. 简单工厂模式的最大优点是工厂类中包含的必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端,去除了与具体产品的依赖;
  2. 简单工厂模式是把创建对象的判断逻辑放到了工厂类的静态方法里面了,后续增加工厂功能的话,就需要改动里面的逻辑代码,不符合开闭原则。客户端代码的逻辑要上升到工厂类中去修改具体方法逻辑,这样太过耦合。

2 迪米特法则(松耦合)

  1. 类之间应该松耦合,耦合越弱,越有利于复用,处于弱耦合的类被修改,不会对有关系的类造成波及。
  2. 如果两类不必彼此直接通信,那这两个类就不应该发生直接的相互作用。如果一个类需要调用另一个类的某一个方法,可通过第三者转发该调用。
...
more »

C++笔记

编码和二进制

  1. 十进制小数转为二进制,要不断地乘以2直到为整数:
  2. 3个二进制位为一个8进制位,4个二进制位为一个16进制位。
  3. 原码:用0,1来表示正负号。其缺点:1.零的表示不唯一,四则运算符号位要单独处理,运算规则复杂。
  4. 补码:0的表示唯一,符号位可以作为数值参与运算。一般只考虑负数的原码转换方式:
    • 原码 -> 反码 -> 补码:负数的原码最高符号位不变,其他位全部取反,最后整体加1。这个过程叫做求补,补码转回原码只需要再次求补即可。

C++ 变量类型

<font color=#CD5C5C> 变量其实只不过是程序可操作的存储区的名称。</font>C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

...
more »