文本表示:從one-hot到word2vec

文本表示的意思是把字詞處理成向量或矩陣康二,以便計算機能進(jìn)行處理碳胳。文本表示是自然語言處理的開始環(huán)節(jié)。

文本表示按照細(xì)粒度劃分沫勿,一般可分為

字級別(char level):

如把“鄧紫棋實在太可愛了挨约,我想養(yǎng)一只”這句話拆成一個個的字:{鄧,紫产雹,棋诫惭,實,在蔓挖,太夕土,可,愛瘟判,了怨绣,我,想拷获,養(yǎng)篮撑,一,只}匆瓜,然后把每個字用一個向量表示赢笨,那么這句話就轉(zhuǎn)化為了由14個向量組成的矩陣

文本表示:

分為離散表示分布式表示驮吱。
離散表示的代表就是詞袋模型茧妒,one-hot(也叫獨熱編碼)、TF-IDF左冬、n-gram都可以看作是詞袋模型
分布式表示也叫做詞嵌入(word embedding)桐筏,經(jīng)典模型是word2vec,還包括后來的Glove拇砰、ELMO九昧、GPT和最近很火的BERT。

詞袋模型:離散毕匀、高維、稀疏癌别;

假如現(xiàn)在有1000篇新聞文檔皂岔,把這些文檔拆成一個個的字,去重后得到3000個字展姐,然后把這3000個字作為字典躁垛,進(jìn)行文本表示的模型剖毯,叫做詞袋模型。這種模型的特點是字典中的字沒有特定的順序教馆,句子的總體結(jié)構(gòu)也被舍棄了逊谋。下面分別介紹詞袋模型中的one-hot、TF-IDF和n-gram文本表示方法土铺。

其原理就是把句子看著若干個單詞的集合胶滋,不會考慮單詞的出現(xiàn)順序,僅僅考慮單詞出現(xiàn)沒有或者出現(xiàn)的頻率悲敷,這樣看來每一個句子都可能有高維究恤、稀疏和離散的情況,即使通過n-gram來表征單詞間的關(guān)聯(lián)也會造成高維后德、稀疏的情況發(fā)生部宿,所以缺點是明顯:
比如:語義丟失, 表現(xiàn)為詞的順序信息丟失瓢湃;近義詞沒辦法體現(xiàn)理张;假定詞都是獨立的,等绵患。

one-hot

有該詞就是1否則為0

  • 第一個問題是數(shù)據(jù)稀疏和維度災(zāi)難雾叭。
    數(shù)據(jù)稀疏也就是向量的大部分元素為0,如果詞袋中的字詞達(dá)數(shù)百萬個藏雏,那么由每篇文檔轉(zhuǎn)換成的向量的維度是數(shù)百萬維拷况,由于每篇文檔去重后字?jǐn)?shù)較少,因此向量中大部分的元素是0掘殴。而且對數(shù)百萬維的向量進(jìn)行計算是一件比較蛋疼的事赚瘦。但是這樣進(jìn)行文本表示有幾個問題∽嗾可見起意,盡管兩個句子的長度不一樣,但是one-hot編碼后長度都一樣了病瞳,方便進(jìn)行矩陣運算揽咕。

  • 第二個問題是沒有考慮句中字的順序性
    假定字之間相互獨立。這意味著意思不同的句子可能得到一樣的向量套菜。比如“我太可愛了亲善,鄧紫棋愛我”,“鄧紫棋要看我的演唱會”逗柴,得到的one-hot編碼和上面兩句話的是一樣的蛹头。

  • 第三個問題是沒有考慮字的相對重要性。
    這種表示只管字出現(xiàn)沒有,而不管出現(xiàn)的頻率渣蜗,但顯然一個字出現(xiàn)的次數(shù)越多屠尊,一般而言越重要(除了一些沒有實際意義的停用詞)。

TF-IDF

TF-IDF用來評估字詞對于文檔集合中某一篇文檔的重要程度耕拷。字詞的重要性與它在某篇文檔中出現(xiàn)的次數(shù)成正比讼昆,與它在所有文檔中出現(xiàn)的次數(shù)成反比。TF-IDF的計算公式為:

TF-IDF的思想比較簡單骚烧,但是卻非常實用浸赫。然而這種方法還是存在著數(shù)據(jù)稀疏的問題,也沒有考慮字的前后信息止潘。

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vec = TfidfVectorizer()
# stop words自定義停用詞表掺炭,為列表List類型             
# token_pattern過濾規(guī)則,正則表達(dá)式凭戴,如r"(?u)bw+b
# max_df=0.5涧狮,代表一個單詞在 50% 的文檔中都出現(xiàn)過了,那么它只攜帶了非常少的信息么夫,因此就不作為分詞統(tǒng)計
documents = [
    'this is the bayes document',
    'this is the second second document',
    'and the third one',
    'is this the document'
]
tfidf_matrix = tfidf_vec.fit_transform(documents)  
# 擬合模型者冤,并返回文本矩陣  表示了每個單詞在每個文檔中的 TF-IDF 值
print('輸出每個單詞在每個文檔中的 TF-IDF 值,向量里的順序是按照詞語的 id 順序來的:', '\n', tfidf_matrix.toarray())
print('不重復(fù)的詞:', tfidf_vec.get_feature_names())
print('輸出每個單詞對應(yīng)的 id 值:', tfidf_vec.vocabulary_)
print('返回idf值:', tfidf_vec.idf_)
print('返回停用詞表:', tfidf_vec.stop_words_)

n-gram

上面詞袋模型的兩種表示方法假設(shè)字與字之間是相互獨立的档痪,沒有考慮它們之間的順序涉枫。于是引入n-gram(n元語法)的概念。n-gram是從一個句子中提取n個連續(xù)的字的集合腐螟,可以獲取到字的前后信息愿汰。一般2-gram或者3-gram比較常見。

比如“鄧紫棋太可愛了乐纸,我愛鄧紫棋”衬廷,“我要看鄧紫棋的演唱會”這兩個句子,分解為2-gram詞匯表:
{鄧汽绢,鄧紫吗跋,紫,紫棋宁昭,棋跌宛,棋太,太积仗,太可疆拘,可,可愛寂曹,愛入问,愛了丹锹,了,了我芬失,我,我愛匾灶,愛鄧棱烂,我要,要阶女,要看颊糜,看鄧,棋的秃踩,的衬鱼,的演,演憔杨,演唱鸟赫,唱會,會}
于是原來只有14個字的1-gram字典(就是一個字一個字進(jìn)行劃分的方法)就成了28個元素的2-gram詞匯表消别,詞表的維度增加了一倍抛蚤。
結(jié)合one-hot,對兩個句子進(jìn)行編碼得到:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0]
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1]
也可以結(jié)合TF-IDF來得到文本表示寻狂,這里不再計算岁经。
這種表示方法的好處是可以獲取更豐富的特征,提取字的前后信息蛇券,考慮了字之間的順序性缀壤。
但是問題也是顯而易見的,這種方法沒有解決數(shù)據(jù)稀疏和詞表維度過高的問題纠亚,而且隨著n的增大塘慕,詞表維度會變得更高。
這種表示方法的好處是可以獲取更豐富的特征菜枷,提取字的前后信息苍糠,考慮了字之間的順序性。

分布式表示:連續(xù)啤誊、低維岳瞭、稠密。

基本思想是把研究的對象表示成一個低維的稠密的實質(zhì)的向量蚊锹,那么這種向量的物理意義就是在于它能夠把所有的這些對象都能夠表示在一個語義的空間里瞳筏。

Word2vec

是Google的Mikolov等人提出來的一種文本分布式表示的方法,這種方法是對神經(jīng)網(wǎng)絡(luò)語言模型的“瘦身”牡昆, 巧妙地運用層次softmax(hierarchical softmax )和負(fù)采樣(Negative sampling )兩種技巧姚炕,使得原本參數(shù)繁多摊欠、計算量巨大的神經(jīng)網(wǎng)絡(luò)語言模型變得容易計算。

Word2vec概括地說是包含了兩種模型和兩種加速訓(xùn)練方法:

兩種模型:CBOW(continuous bag-of-words)和Skip-Gram柱宦。

CBOW的目標(biāo)是通過上下文的詞語預(yù)測中間的詞是什么些椒。而skip-gram則相反,由一個特定的詞來預(yù)測前后可能出現(xiàn)的詞掸刊。這兩個模型并非是在Word2vec中首次提出免糕,而是神經(jīng)網(wǎng)絡(luò)語言模型中就有的。

兩種方法:層次softmax和負(fù)采樣忧侧。

層次softmax是通過構(gòu)建一種有效的樹結(jié)構(gòu)(哈夫曼樹石窑,huffman tree)來加速計算詞語的概率分布的方法;而負(fù)采樣則是通過隨機抽取負(fù)樣本蚓炬,與正樣本一起參加每次迭代松逊,變成一個二分類問題而減少計算量的方法。


上圖的流程是把文章的單詞使用詞向量來表示肯夏。
(1)提取文章所有的單詞经宏,把其按出現(xiàn)的次數(shù)降序排列
(2)每個編號ID都可以使用50000維的二進(jìn)制(one-hot)表示
(3)最后,我們會生產(chǎn)一個矩陣M熄捍,行大小為詞的個數(shù)50000烛恤,列大小為詞向量的維度(通常取128或300)。
那這個矩陣M怎么獲得呢余耽?在Skip-Gram 模型中缚柏,我們會隨機初始化它,然后使用神經(jīng)網(wǎng)絡(luò)來訓(xùn)練這個權(quán)重矩陣
那我們的輸入數(shù)據(jù)和標(biāo)簽是什么碟贾?如下圖币喧,輸入數(shù)據(jù)就是中間的哪個藍(lán)色的詞對應(yīng)的one-hot編碼,標(biāo)簽就是它附近詞的one-hot編碼(這里windown_size=2,左右各取2個)


我輸入數(shù)組中的詞典大小是3袱耽,即有三個不同的詞杀餐,所以我的input_dim便要比3要大1,其中output_dim便是輸出維度朱巨,就如同CNN最后的全連接層一樣史翘,上面我設(shè)置的5,便將每一位要表示的數(shù)字變?yōu)橛?x5來表示的向量冀续。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琼讽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洪唐,更是在濱河造成了極大的恐慌钻蹬,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凭需,死亡現(xiàn)場離奇詭異问欠,居然都是意外死亡肝匆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門顺献,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旗国,“玉大人,你說我怎么就攤上這事滚澜〈植郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵设捐,是天一觀的道長。 經(jīng)常有香客問我塘淑,道長萝招,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任存捺,我火速辦了婚禮槐沼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捌治。我一直安慰自己岗钩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布肖油。 她就那樣靜靜地躺著兼吓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪森枪。 梳的紋絲不亂的頭發(fā)上视搏,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音县袱,去河邊找鬼浑娜。 笑死,一個胖子當(dāng)著我的面吹牛式散,可吹牛的內(nèi)容都是我干的筋遭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼暴拄,長吁一口氣:“原來是場噩夢啊……” “哼漓滔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起揍移,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤次和,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后那伐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踏施,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡石蔗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畅形。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片养距。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖日熬,靈堂內(nèi)的尸體忽然破棺而出棍厌,到底是詐尸還是另有隱情,我是刑警寧澤竖席,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布耘纱,位于F島的核電站,受9級特大地震影響毕荐,放射性物質(zhì)發(fā)生泄漏束析。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一憎亚、第九天 我趴在偏房一處隱蔽的房頂上張望员寇。 院中可真熱鬧,春花似錦第美、人聲如沸蝶锋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扳缕。三九已至,卻和暖如春恶守,著一層夾襖步出監(jiān)牢的瞬間第献,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爹凹。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像飒赃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子科侈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容