文章目录
一、NLP项目的Pipeline
-
数据清洗(无用的标签、特殊的符号、停用词、大写转小写)
-
分词
-
标准化:
- Stemming:还原的单词不一定存在词典中,不保证还原为一个有效的单词 - Lemmazation:保证存在词典中
-
特征提取:tf-idf、word2vec
- 提取特征,特征工程决定了系统的上限,用模型去逼近这个上限。
-
建模:相似度算法、分类算法等
-
评估:acc、精确率、召回率、f1
二、word segmentation
2.1 最大匹配算法(max matching)
最大匹配是一个基于匹配规则的贪心算法。
- 前项最大匹配:max_len = 5(一般小于10,太大时间复杂度会很高),取百分比最多的词的长度,
- 后向最大匹配
最大匹配的缺点:
- 局部最优
- 效率(max_len)
- 歧义(不考虑语义),停留在单词阶段
2.2 Incorporate Semantic
- 生成输入句子的所有可能的划分(根据词典),选择其中最好的作为最终的划分(比如LM)
- 怎么解决效率问题:动态规划
三、文本表示
3.1 one-hot representation
-
boolean based
-
Count based
- 并不是出现的越多就越重要 - 并不是出现的越少,就越不重要
-
tf-idf based
- tf-idf(w) = tf(d,w) * idf(w) - tf(d,w):文档d中w的词频 - idf(w):考虑单词的重要性, - log(N/N(w)),如果词w出现在许多文档中,说明这个词不重要 - 不希望这个值太大,所以加上log - N:语料库中的文档总数 - N(w):词语w出现在多少个文档中
缺点:
- one-hot representation 无法表达单词之间的相似度(不能表达语义相似度)
- Sparsity(稀疏性):向量大小是词典的大小
3.2 Distributed Representation
一般不超过300维。
-
容量空间:
- 100维的one-hot表示法最多表示多少单词?100个 - 100维的分布式表示法最多表示多少单词?无穷个
-
分布式的优点:
- 分布式解决了稀疏性 - one-hot无法表达单词的相似度,分布式可以(且可视化)
-
句子向量怎么计算:平均法则
3.3 文本相似度
- 欧式距离:没有考虑方向
- 余弦相似度:考虑了方向
四、建模方法
4.1 Noisy channel Model
p(text|source) = p(source|text) * p(text)
应用场景:
-
机器翻译:
p(中文|英文) = p(英文|中文) * p(中文)
-
拼写纠错
p(正确的写法|错误的写法) = p(错|正) * p(正)
4.2 LM
-
用来判断一句话是否在语法上通顺
-
目标:p(s) = p(w1,w2,…,wn)
-
马尔科夫假设
- Unigram:不考虑,独立 - Bigram:一阶马尔科夫假设 - N-gram
-
语言模型:就是训练这些条件概率
-
一个短句包含很多单词时,概率很难计算且大部分为0
-
字符串越长,在文章中找到相应字符串的次数(概率)就越小,统计结果不准确
-
评估语言模型
- perplexity = 2 ^ -x , x:average log likelihood - perplexity越小越好,x越大越好,x = log(p(w1)p(w2)...)
4.3 语料库没有出现的单词怎么办?
训练语料库没出现,不代表未来不会出现。
-
Add-K-smoothing
- p(wi|wi-1) = c(wi-1,wi) / c(wi) - p(wi|wi-1) = c(wi-1,wi)+k / c(wi) +kv
-
Interpolation
核心思路:在计算Trigram概率下时,同时考虑Ungram,Bigram,Trigram出现的频次。加权为1
-
Good-Turning Smoothing
- 没有出现过的单词:P = 0 变为 P = N1 / N - 出现过的单词:P = c / N 变为 P = [(c+1) * N(c+1)] / [Nc * N] - Nc:出现c次单词的个数
五、评价指标
-
准确率acc
-
精确率
- precision = TP / (TP + FP) 选出的有多少是对的 - recall = TP / (TP + FN) 选出来整体的多少
-
f1
- f1 = 2*p*r / p+r