咱們在作模型訓練的時候,不是直接把文本或者詞語傳給計算機讓其進行計算,而是須要將單詞、句子、文本轉換成向量或者矩陣進行計算,而如何將文本轉換成向量就是本文須要介紹的內容。算法
介紹內容以前,你們須要先熟悉一些概念。機器學習
出現爲1,不出現爲0學習
每一個單詞是一個詞庫數量維度的向量,可是其中只有一個1,其餘都是0。spa
好比:code
詞典:【咱們,又,去,登山,今天,大家,昨天,跑步】blog
」咱們「對應的向量是:[1, 0, 0, 0, 0, 0, 0, 0]圖片
缺點ci
好比:按照one-hot表示方式,船和舟是沒有關係的。rem
向量爲詞庫的大小,每一個句子對應詞庫中單詞出現與否的狀況,出現爲1,不出現爲0,好比下面的例子:文檔
詞典:【咱們,又,去,登山,今天,大家,昨天,跑步】
【「咱們」出現了爲1,「又「沒出現爲0,」去「出現了爲1,」登山「出現類爲1,」今天「出現了爲1,」大家「沒出現爲0,」昨天「沒出現爲0,」跑步「出現了爲1】
例子:咱們今天去登山,明天去跑步 (1,0,1,1,1,0,0,1)
向量爲詞庫的大小,每一個句子對應詞庫中單詞出現的次數,好比下面的例子:
詞典:【咱們,又,去,登山,今天,大家,昨天,跑步】
【「咱們」出現的次數1,「又「出現的次數0,」去「出現的次數1,」登山「出現的次數1,」今天「出現的次數1,」大家「出現的次數0,」昨天「出現的次數0,」跑步「出現的次數0】
計算每一個詞出現的次數
例子:咱們今天去登山,明天去跑步 (2,0,2,1,1,0,0,1)
tfidf的思想是一個單詞在其所在文本中出現的次數越多,在其餘文本中出現的次數越少,那麼這個單詞就能很好的表徵單詞所在的文本。
TF-IDF = TF * IDF
TF = term frequency 詞頻 IDF = inverse document frequency 逆向文件頻率,表示單詞的重要性
IDF = log(\frac{N}{N(w)})
其中:
N: 文檔總數 N(w): 詞語w出如今多少個文檔中, 出現的次數越多,越不重要
TF-IDF = 詞頻 * 重要性
例子:計算三個句子的TF-IDF向量表示:
好比第一個句子的「今天」:TF = 1(句子中「今天」出現的次數)
IDF = log(N/N(w))
N 文檔總數爲 3;N(w) 文檔中「今天」出現的次數爲2(第一句出現一次,第二句出現一次)。
因此IDF = log(3/2)。其餘的一樣的計算原理。
TF-IDF 算法是建立在這樣一個假設之上的:對區別文檔最有意義的詞語應該是那些在文檔中出現頻率高,而在整個文檔集合的其餘文檔中出現頻率少的詞語,因此若是特徵空間座標系取tf詞頻做爲測度,就能夠體現同類文本的特色。
可是在本質上idf是一種試圖抑制噪聲的加權,而且單純地認爲文本頻率小的單詞就越重要,文本頻率大的單詞就越無用,顯然這並非徹底正確的。idf的簡單結構並不能有效地反映單詞的重要程度和特徵詞的分佈狀況,使其沒法很好地完成對權值調整的功能,因此tf-idf法的精度並非很高。
補充概念:
混淆矩陣:相似於計算準確率和召回率的矩陣。
True positive: 正例而且預測也是正例 False positive: 負例可是預測是正例 False negative:正例可是預測是負例 True negative:負例而且預測是負例
用檢索舉例子
準確率 precision: 檢索出來的結果中正確的結果佔返回結果總數(返回的結果有的是正例,有的是反例)的比例。
召回率 recall: 檢索出來的結果正確的結果佔全部正例(包括返回回來的正例和沒有返回來的正例)的比例
precision = True-positive / (True-positive + False-positive) recall = True-positive / (True-positive + False-negative)
吳恩達-《機器學習》:https://www.coursera.org/lear...