倒排表
QA system 中 返回相似度最高的答案,对于知识库,需要计算N次相似度,O(N) 每次相似度计算的复杂度,无法满足实时性要求
解决问题核心思想“层次过滤思想”
遇到问题,O 输入,和所有问题匹配,
10^6 多次过滤 -> 10 ^3 -> 10 ^2;最后通过余弦相似度比较最后5个…
核心思想 过滤依次选取时间复杂度最快的,即过滤器1时间复杂度1>>过滤器2
Introducing Inverted Index
demo 搜索引擎
doc1 我们 今天 运动
doc2 我们 昨天 运动
doc3 你们 上课
doc4 你们 上 什么课
词典库 [我们 今天 运动 昨天 上 课 什么]
我们 [doc1,doc2]
今天 [doc1]
运动 [doc1,doc2]
昨天[doc2]
。。。。。。
我们可以快速根据词定位
假设 用户输入“运动”,我们只需要匹配倒排表中运动,最简单的方式是返回 doc1,doc2 的一个排序
假设用户输入“我们 上课”,we know “我们”出现在doc1,doc2;“上课” 出现在 doc3,doc4;由于交集为空,可以简单return 并集
回到QA system
Question:How do you like NLP?
对问题进行 分词,先选择至少包含其中一个单词的question,(此时也可以进行第二轮过滤)然后对于所获得的question进行相似度匹配
Noisy Channel Model
p(text|source) 正比于 p(source|text)p(text)
Language Model
判断是否一句话从语法上通顺
Object: Compute the probability of a sentence of a sentence or sequence of words
chain rule
random variable
P(A,B,C,D )=P(A)*P(B|A)*P(C|A,B)*P(D|A,B,C)
右式=P(A,B)*P(C|A,B)*P(D|A,B,C)=P(A,B,C)*P(D|A,B,C)=左式
Markov Assumption
1st order markov assumption p(a|b)
2nd … p(a|b,c)
…
Language Model
Unigram
把当前单词作为独立对待,假设每一个单词是独立的
问题 不考虑单词顺序
如何计算P(Wi)?
需要有语料库 假设C(我们)=100 V=10^5 p=C/V=1%
Bigram
来自first-order Markov assumption
能解决先后顺序
N-gram
Higher Order
Evaluation of language Model
Perplexity = 2^(-x) average log likelihood
根据不同场景要用不同的
一般而言 更高维度的Gram 效果更好,但是更可能过拟合
为什么需要平滑方法?
因为在训练语料库没出现不意味着在未来也不会出现
Smoothing
Add-one Smoothing Laplace Smoothing
PMLE(Wi|Wi-1)=C(Wi-1,wi)/C(wi)
PAdd-1(Wi|Wi-1)=(C(Wi-1,wi)+1)/(C(wi)+V)
处理了分子为0的情况,分母加V的原因?为了确保条件概率sum 后为1
V是词典的大小
Add-K Smoothing Laplace Smoothing
PAdd-k(Wi|Wi-1)=(C(Wi-1,wi)+k)/(C(wi)+k*V)
- k=1,2,3,…
- 优化 f(k)
对于训练好的语言模型 概率C(Wi,we)是已知的
perplexity=f(k)
Minimize perplexity
Interpolation
在当前数据中没有出现不意味着在未来也不会出现
p(kitchen| in the )>>p(arboretum | in the)随着数据增加
核心思想
在计算Trigram概率同时考虑Unigram 和 Bigram,Trigram出现频次
P(wn|wn-1,wn-2)=λ1p(wn|wn-1,wn-2)+λ2p(wn|wn-1)+λ3p(wn)
∑λi=1