NLP = NLU + NLG
- NLU: 语音/文本 -> 意思
- NLG: 意思-> 文本
机器翻译系统实现
Decoding Algarithm
Viterb
NLP 应用案例
- Question Answering问答系统(IBM)
- Sentiment Analysis情感分析
- Machine Translation 机器翻译
- Text Summarization 自动摘要
- Chatbot 聊天机器人
- Information Extraction 信息抽取
自然语言处理技术的四个维度
- Semantic 语义
- Syntax 句子结构
- Morphology 单词 NER 命名实体识别
- Phonetics 声音
NLP关键技术
- Word Segmentation (分词)
- Part-of-Speech 词性
- Named Entity Recognition 命名实体识别
- Dependency Parsing 依存分析
- Relation Extraction 关系抽取
文本处理过程
原始文本 -> 分词(Segmentation) -> 清洗(Cleaning)(无用的标签, 特殊符号,停用词,大小写转换) -> 标准化(Normalization) -> 特征提取 -> 建模 -> 评估
- Word Segmentation
- Spell Correction
- Filtering Words Stop Words Removal
- Stemming
Word Segmentation Tools
- Jieba分词
- SnowNLP
- LTP
- HanNLP
分词工具实现:
- 基于匹配规则的方法
最大匹配(Max Matching) 前向最大匹配(forward-max matching) 后向最大匹配(backward-max matching) - 基于概率统计的方法
Incorporate Semantic(考虑语义)
language model 维特比算法
LM,HMM,CRF
Spell Correction(拼写错误纠正)
计算编辑距离 insert delete replace
Flitering Words
把停用词和出现频率低的词过滤
Stemming/lemmatization 相同含义单词合并
Porter Stemmer 算法
文本表示 Word Representation
词表示 one-hot representation
句子表示 Boolean representation
Count-based representation
tfidf(w) = tf(d, w) * idf(w)
tf(d,w)表示文档d中w的词频
idf(w)考虑单词的重要性 logN/N(w) N语料库中的文档总数 N(w)词语w出现在多少个文档
句子相似度 Sentence Similarity
欧式距离: d = |s1 - s2|
余弦相似度: d = (s1 * s2)/(|s1| * |s2|)
one-hot representation 缺点
没办法表示单词间语义的相似度
Sparsity 稀疏性
分布式表示法 Distributed Representation
词向量(word vectors)
词向量表达句子向量
- 平均法则
- LSTM/RNN
训练词向量的常用模型
Skip-Gram
G-lone
CBow
RNN/LSTM
MF
Noisy Channel Model
p(text|source) 等比 p(source|text)p(text)
应用场景
语音识别 P(文本|语音信号) 等比 P(语音信号|文本) * P(文本)
机器翻译 P(中文|英文) 等比 P(英文|中文) * P(中文)
拼写纠错 P(正确写法|错误写法) 等比 P(错误写法|正确写法) * P(正确写法)
OCR
密码破译 P(明文|暗文) 等比 P(暗文|明文) * P(明文)
语言模型 Language Model
作用:是否一句话从语法上是通顺的
Chain Rule
p(w1,w2, w3,w4,w5,…wn) = p(w1) * p(w2|w1) * p(w3|w1w2)….p(wn|w1w2…wn_1)
Markov Assumption 马尔可夫假设 解决稀疏问题
1st order | 2st order | 3rd order
语言模型分类:
Unigram: 每个单词是独立个体,相互独立 P(w1, w2, w3, w4 … wn) = p(w1) * p(w2) * p(w3) … p(wn)
Bigran: 1st order Markov Assumption P(w1, w2, w3, w4 … wn) = p(w1) * p(w2|w1) * p(w3|w2) … p(wn|wn_1)
N-gram:
使用Estimating Probability 计算每个单词的概率,但是会出现概率0项,可做平滑
如何评估语言模型
$ Perplexity = 2^{-(x)} $
处理未出现在字典中的词
- Add-one Smoothing (Laplace Smoothing)
$ P_{ADD-1}(w_i|w_{i-1}) = \frac{c(w_{i-1}, w_i) + 1}{c(w_i) + V} $ - Add-k Smoothing
$ P_{ADD-1}(w_i|w_{i-1}) = \frac{c(w_{i-1}, w_i) + k}{c(w_i) + kV} $
如何选择k- k = 1,2,3尝试
- 优化 f(k) 使用Preplexity优化
- Interpolation
$p(w_n|w_{n-1}, w_{n-1}) = \lambda_1 p(w_n| w_{n-1}, w_{n-2}) + \lambda_2 p(w_n| w_{n-1} + \lambda_3 p(w_n)$
$ \lambda_1 + \lambda_2 + \lambda_3 = 1$ - Good-Turning Smoothing
缺点:
语言模型
pandas
贪心算法 每次选择当前最好的 局部最优
DP 全局最优