日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

文本向量化(理论篇)

發布時間:2023/12/31 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 文本向量化(理论篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文介紹常見的文本表示模型,One-hot、詞袋模型(BOW)、TF-IDF、N-Gram和Word2Vec

離散表示

One-hot編碼

one-hot編碼是常用的方法,我們可以用one-hot編碼的方式將句子向量化,大致步驟為:

用構造文本分詞后的字典
對詞語進行One-hot編碼

John likes to watch movies. Mary likes too

John also likes to watch football games.

上面的兩句話分詞后可以構造一個字典,字典內容如下,字典的鍵是詞語,值是ID

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}

我們可以根據ID值對每個詞語進行向量化,用0和1代表這個詞是否出現

# John
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# too
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

one-hot 詞向量構造起來簡單,但通常不是一個好的選擇,它有明顯的缺點

維數過高。我們這里只有短短的2句話,每個詞語已經是一個10維的向量了,隨著語料的增加,維數會越來越大,導致維數災難
矩陣稀疏。利用One-hot編碼的另一個問題就是矩陣稀疏,從上面也可以看到,每一個詞向量只有1維是有數值的,其他維上的數值都為0
不能保留語義。用這種方式得到的結果不能保留詞語在句子中的位置信息, “我愛你” 和 “你愛我” 的向量化結果并沒有什么不同。

詞袋(BOW)模型

詞袋模型(Bag-of-words model,BOW),BOW模型假定對于一個文檔,忽略它的單詞順序和語法、句法等要素,將其僅僅看作是若干個詞匯的集合,文檔中每個單詞的出現都是獨立的,不依賴于其它單詞是否出現。

John likes to watch movies. Mary likes too

John also likes to watch football games.

使用之前同樣的例子,跟前面一樣,將上面的兩句話中看作一個文檔集,列出文檔中出現的所有單詞(忽略大小寫與標點符號),構造一個字典

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}

再用再將句子向量化,維數和字典大小一致,第 $i$ 維上的 數值 代表 ID 為 $i$ 的詞語在這個句子里出現的頻次

# 第一個文本
[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
# 第二個文本
[1, 1, 1, 1, 0, 1, 1, 1, 0, 0]

以第一個文本的向量化結果 [1, 2, 1, 1, 1, 0, 0, 0, 1, 1] 為例,2在第二維上,ID為2的詞語是likes,在第一個文本中出現了2次,所以第二維上的數值是2

這種方式不像one-hot編碼那樣導致維數非常大,但也有自己的缺點

不能保留語義:不能保留詞語在句子中的位置信息,“你愛我” 和 “我愛你” 在這種方式下的向量化結果依然沒有區別。“我喜歡北京” 和 “我不喜歡北京” 這兩個文本語義相反,利用這個模型得到的結果卻能認為它們是相似的文本。
維數高和稀疏性:當語料增加時,那么維數也會不可避免的增大,一個文本里不出現的詞語就會增多,導致矩陣稀疏

TF-IDF

TF-IDF(term frequency–inverse document frequency)是一種用于信息檢索與數據挖掘的常用加權技術。TF意思是詞頻(Term Frequency),IDF意思是逆文本頻率指數(Inverse Document Frequency)。

字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。一個詞語在一篇文章中出現次數越多, 同時在所有文檔中出現次數越少, 越能夠代表該文章。

TF-IDF公式如下:

$TF(t,d)$表示語t文檔d 中出現的頻率,$IDF(t)$是逆文本頻率指數,它可以衡量 單詞t用于區分這篇文檔和其他文檔的重要性。IDF的公式如下,分母加1是為了避免分母為0

比如在10篇文檔中,1篇是猴子的,9篇是關于人的,關于人的文章中不出現 “尾巴” 這個詞語,10篇文章中都出現 “嘴巴” 這個詞語,那么 “尾巴” 這個詞在這些文章中就很有區分度。從公式的角度也很容易看出。以10為底數的話,$IDF(尾巴)$ = 0.70, $IDF(嘴巴)$ = -0.04,說明 “尾巴” 重要性更高點,它有區分性。

前面說的缺點依然存在,它依然不能保留詞語在句子中的位置關系。

N-Gram

N-Gram語言模型的思想就是,給定一串字母,下一個最大可能出現的詞語是什么?比如 “今天你”,后面跟 “吃飯” 可能性大,但跟著 “后天” 的可能性就很小。

N=1時稱為unigram,N=2稱為bigram,N=3稱為trigram,假設下一個詞的出現依賴它前面的一個詞,即 bigram,假設下一個詞的出現依賴它前面的兩個詞,即 trigram,以此類推。

以下面的文本為例

你幫我

我幫你

它的bigram依次為:

你,你幫,幫,幫我,我
我,我幫,幫,幫你,你

同樣地,我們可以構造一個字典

{"你": 1, "你幫"; 2, "幫": 3,"幫我": 4, "我": 5, "我幫": 6, "幫你": 7}

向量化結果可以表示為

# 第一個文本
[1, 1, 1, 1, 1, 0, 0]

# 第二個文本
[1, 0, 1, 0, 1, 1, 1]

N-Gram基于一個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關(這也是隱馬爾可夫當中的假設)。整個句子出現的概率就等于各個詞出現的概率乘積,公式如下:

上面的表達式并不好計算,引入馬爾科夫假設,那么可以將式子寫成

馬爾可夫鏈(Markov chain)為狀態空間中經過從一個狀態到另一個狀態的轉換的隨機過程。該過程要求具備“無記憶”的性質:下一狀態的概率分布只能由當前狀態決定,而與之前的狀態無關

特別地,對unigram,有

對bigram,有

對trigram,有

N-Gram考慮了詞的順序,信息量更充分。

缺點是隨著N的增大,詞表迅速膨脹,數據出現大量稀疏的問題。

總結

由于存在以下的問題,對于一般的NLP問題,是可以使用離散表示文本信息來解決問題的,但對于要求精度較高的場景就不適合了。

無法衡量詞向量之間的關系。
詞表的維度隨著語料庫的增長而膨脹。
n-gram詞序列隨語料庫增長呈指數型膨脹,更加快。
離散數據來表示文本會帶來數據稀疏問題,導致丟失了信息,與我們生活中理解的信息是不一樣的。

分布式表示

科學家們為了提高模型的精度,又發明出了分布式的表示文本信息的方法。

用一個詞附近的其它詞來表示該詞,這是現代統計自然語言處理中最有創見的想法之一。當初科學家發明這種方法是基于人的語言表達,認為一個詞是由這個詞的周邊詞匯一起來構成精確的語義信息。就好比,物以類聚人以群分,如果你想了解一個人,可以通過他周圍的人進行了解,因為周圍人都有一些共同點才能聚集起來。

共現矩陣

共現矩陣顧名思義就是共同出現的意思,詞文檔的共現矩陣主要用于發現主題(topic),用于主題模型,如LSA。

局域窗中的word-word共現矩陣可以挖掘語法和語義信息,例如:

I like deep learning.
I like NLP.
I enjoy flying.

有以上三句話,設置滑窗(對稱窗口)為2,可以得到一個詞典:{"I like","like deep","deep learning","like NLP","I enjoy","enjoy flying","I like"}。

我們可以得到一個共現矩陣(對稱矩陣):

中間的每個格子表示的是行和列組成的詞組在詞典中共同出現的次數,也就體現了共現的特性。比如例如:“I like”出現在第1,2句話中,一共出現2次,所以=2。對稱的窗口指的是,“like I”也是2次

存在的問題:

向量維數隨著詞典大小線性增長。
存儲整個詞典的空間消耗非常大。
一些模型如文本分類模型會面臨稀疏性問題。
模型會欠穩定,每新增一份語料進來,穩定性就會變化。

Word2Vec

谷歌2013年提出的Word2Vec是目前最常用的詞嵌入模型之一。Word2Vec實際 是一種淺層的神經網絡模型,它有兩種網絡結構,分別是CBOW(Continues Bag of Words)連續詞袋Skip-gram。

CBOW

CBOW是一個三層神經網絡,特點是輸入已知上下文,輸出對當前單詞的預測。 CBOW通過中間詞來預測窗口中上下文詞出現的概率模型,把中間詞當做y,把窗口中的其它詞當做x輸入,x輸入是經過one-hot編碼過的,然后通過一個隱層進行求和操作,最后通過激活函數softmax,可以計算出每個單詞的生成概率,接下來的任務就是訓練神經網絡的權重,使得語料庫中所有單詞的整體生成概率最大化,而求得的權重矩陣就是文本表示詞向量的結果。。

舉一個例子,我們有以下文本

I drink coffee everyday

假設我們輸入為 I, drink, everyday,那么我們訓練的神經網絡要使 coffee 的輸出概率最大。首先,我們將原來的文本的單詞用One-hot編碼表示,如下圖所示

初始化輸入權重矩陣 $W$ 和輸出權重矩陣 $W^{'}$,利用這個權重矩陣W和One-hot編碼完的向量相乘,可以得到唯一的向量 $V$,相當于根據One-hot編碼中1的位置取出W中的對應的列,除非兩列完全相同,否則得到的向量不會是一樣的。

我們這里有3個輸入值,將3個輸入值與 $W$ 相乘得到的向量相加做平均,得到隱藏層向量

隱藏層向量再乘以輸出權重矩陣 $W^{'}$ ,得到一個輸出向量

對輸出向量做softmax,得到輸出概率

Skip-Gram

Skip-Gram與CBOW相反,即已知某個詞語,預測周圍的詞語。通過當前詞來預測窗口中上下文詞出現的概率模型,把當前詞當做 $x$,把窗口中其它詞當做 $y$,依然是通過一個隱層接一個Softmax激活函數來預測其它詞的概率。

以下圖舉例,我們選定句子“The quick brown fox jumps over lazy dog”,設定我們的窗口大小為2(window_size=2),也就是說我們將輸入詞前后各兩個詞和輸入詞進行組合作為訓練樣本。下圖中,藍色代表input word,方框內代表位于窗口內的單詞。

以第一條為例,The為輸入詞,但是The開頭,前面沒有詞跟它組合,所以只能和后面兩個單詞分別組合。

當quick輸入時,它前面只有1個單詞,所以一共只有3個組合。

從brown開始,前面才會有2個及以上的單詞,所以從這里開始有4個組合。

我們的模型將會從每對單詞出現的次數中習得統計結果。例如,我們的神經網絡可能會得到更多類似(“可樂“,”百事“)這樣的訓練樣本對,而對于(”可樂“,”醬油“)這樣的組合卻看到的很少。因此,當我們的模型完成訓練后,給定一個單詞”可樂“作為輸入,輸出的結果中”百事““要比”醬油“的概率高。

加速優化方法

有Hierarchical Softmax(層次Softmax)和Negative Sample(負采樣)兩個加速方法,參考以下鏈接

Hierarchical Softmax:https://www.cnblogs.com/pinard/p/7243513.html,https://cloud.tencent.com/developer/article/1387413
Negative Sample:https://www.cnblogs.com/pinard/p/7249903.html

參考資料

https://github.com/mantchs/machine_learning_model/tree/master/Word2Vec

https://www.jianshu.com/p/f8300129b568

https://blog.csdn.net/weixin_43112462/article/details/88669902

https://blog.csdn.net/lxg0807/article/details/78615917

https://www.cnblogs.com/bep-feijin/p/9430164.html

https://blog.csdn.net/yu5064/article/details/79601683

https://www.jianshu.com/p/471d9bfbd72f

https://www.zhihu.com/question/44832436

http://www.dataguru.cn/article-13488-1.html

總結

以上是生活随笔為你收集整理的文本向量化(理论篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。