文章目錄
一、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