06_1.Pytorch中如何表示字符串、word embedding、One - hot、Embedding(Word2vec、BERT、Glove)【学习总结】
1.6.1.如何表示字符串
1.6.1.1.word embedding
1.6.1.1.1.文本表示(Representation)
1.6.1.1.2.獨(dú)熱編碼 | one-hot representation
1.6.1.1.3.整數(shù)編碼
1.6.1.1.4.什么是詞嵌入 | word embedding ?
1.6.1.1.5. 2中主流的word embedding算法
1.6.1.1.6.百度百科和維基百科
1.6.1.1.7.維基百科版本
1.6.1.2.One - hot
1.6.1.2.1.文本數(shù)據(jù)向量化
1.6.1.2.2.ont-hot編碼
1.6.1.2.3.one-hot散列技巧
1.6.1.3.Embedding
1.6.1.3.1.Word2vec
1.6.1.3.1.1.什么是Word2vec
1.6.1.3.1.2.Word2vec的2中訓(xùn)練模式
1.6.1.3.1.3.Word2vec的優(yōu)缺點(diǎn)
1.6.1.3.1.4.百度百科
1.6.1.3.2.BERT
1.6.1.3.3.Glove
1.6.1.3.3.1.什么是GloVe?
1.6.1.3.3.2.GloVe是如何實(shí)現(xiàn)的?
1.6.1.3.3.4.Glove與LSA、word2vec的比較
1.6.1.3.3.5.公式推導(dǎo)
1.6.1.如何表示字符串
主要參考博文:
https://www.bilibili.com/read/cv4053575/
https://easyai.tech/ai-definition/word-embedding/
https://easyai.tech/ai-definition/word2vec/
https://easyai.tech/ai-definition/bert/
在深度學(xué)習(xí)中字符串不好表示,要通過(guò)以下的方式來(lái)表示。
1.6.1.1.word embedding
本文轉(zhuǎn)自:https://easyai.tech/ai-definition/word-embedding/
1.6.1.1.1.文本表示(Representation)
文本是一種非結(jié)構(gòu)化的數(shù)據(jù)信息,是不可以直接被計(jì)算的。
文本表示的作用就是將這些非結(jié)構(gòu)化的信息轉(zhuǎn)化為結(jié)構(gòu)化的信息,這樣就可以針對(duì)文本信息做計(jì)算,來(lái)完成我們?nèi)粘K?jiàn)到的文本分類(lèi),情感分析等任務(wù)。
文本表示的方法有很多種,下面只介紹3類(lèi)方式:
1.獨(dú)熱編碼 | one-hot representation
2.整數(shù)編碼
3.詞嵌入 | word embedding
1.6.1.1.2.獨(dú)熱編碼 | one-hot representation
假設(shè)我們要計(jì)算的文本中一共出現(xiàn)了4個(gè)詞:貓、狗、牛、羊。向量里每一個(gè)位置都代表一個(gè)詞。所以用one-hot來(lái)表示就是:
貓: [ 1, 0 ,0 ,0 ]
狗: [ 0, 1, 0, 0 ]
牛: [ 0, 0, 1, 0 ]
羊: [ 0, 0, 0, 1 ]
但是在實(shí)際情況中,文本中很可能出現(xiàn)成千上萬(wàn)個(gè)不同的詞,這時(shí)候向量就會(huì)非常長(zhǎng)。其中99%以上都是0。
one-hot的缺點(diǎn)如下:
1.無(wú)法表達(dá)詞語(yǔ)之間的關(guān)系。
2.這種過(guò)于稀疏的向量,導(dǎo)致計(jì)算和存儲(chǔ)的效率都不高。
1.6.1.1.3.整數(shù)編碼
這種方法也非常好理解,用一種數(shù)字來(lái)代表一個(gè)詞,上面的例子則是:
貓: 1
狗: 2
牛: 3
羊: 4
將句子里的每個(gè)詞拼起來(lái)就是可以表示一句話(huà)的向量。
整數(shù)編碼的缺點(diǎn)如下:
1.無(wú)法表達(dá)詞語(yǔ)之間的關(guān)系
2.對(duì)于模型解釋而言,整數(shù)編碼可能具有挑戰(zhàn)性。
1.6.1.1.4.什么是詞嵌入 | word embedding ?
word embedding 是文本表示的一類(lèi)方法。跟one-hot編碼和整數(shù)編碼的目的一樣,不過(guò)他有更多的優(yōu)點(diǎn)。
詞嵌入并不特指某個(gè)具體的算法,跟上面2種方式相比,這種方法有幾個(gè)明顯的優(yōu)勢(shì):
1.他可以將文本通過(guò)一個(gè)低維向量來(lái)表示,不像one-hot那么長(zhǎng)。
2.語(yǔ)意相似的詞在向量空間上也會(huì)比較相近。
3.通用性很強(qiáng),可以用在不同的任務(wù)中。
在回顧上面的例子:
1.6.1.1.5. 2中主流的word embedding算法
?Word2vec
這是一種基于統(tǒng)計(jì)方法來(lái)獲得詞向量的方法,他是 2013 年由谷歌的 Mikolov 提出了一套新的詞嵌入方法。
這種算法有2種訓(xùn)練模式:
1.通過(guò)上下文來(lái)預(yù)測(cè)當(dāng)前詞。
2.通過(guò)當(dāng)前詞來(lái)預(yù)測(cè)上下文。
?GloVe
Glove是對(duì)Word2vec方法的擴(kuò)展,它將全局統(tǒng)計(jì)和Word2vec的基于上下文的學(xué)習(xí)結(jié)合了起來(lái)。
想要了解GloVe的三步實(shí)現(xiàn)方法、訓(xùn)練方法、和w2c的比較。
1.6.1.1.6.百度百科和維基百科
詞向量(Word embedding),又叫Word嵌入式自然語(yǔ)言處理(NLP)中的一組語(yǔ)言建模和特征學(xué)習(xí)技術(shù)的統(tǒng)稱(chēng),其中來(lái)自詞匯表的單詞或短語(yǔ)被映射到實(shí)數(shù)的向量。從概念上講,它涉及從每個(gè)單詞一維的空間到具有更低維度的連續(xù)向量空間的數(shù)學(xué)嵌入。
生成這種映射的方法包括神經(jīng)網(wǎng)絡(luò),單詞共生矩陣的降維,概率模型,可解釋的知識(shí)方法,和術(shù)語(yǔ)的顯示表示 單詞出現(xiàn)的背景。
當(dāng)用做底層輸入表示時(shí),單詞和短語(yǔ)嵌入已經(jīng)被證明可以提高NLP任務(wù)的性能,例如語(yǔ)法分析和情感分析。
1.6.1.1.7.維基百科版本
Word embedding 是自然語(yǔ)言處理中的重要環(huán)節(jié),它是一些語(yǔ)言處理模型的統(tǒng)稱(chēng),并不具體指某種算法或模型。Word embedding 的任務(wù)是把詞轉(zhuǎn)換成可以計(jì)算的向量 。從概念上講,它涉及從每個(gè)單詞一維的空間到具有更低維度的連續(xù)向量空間的數(shù)學(xué)嵌入。
生成這種映射的方法包括神經(jīng)網(wǎng)絡(luò),單詞共生矩陣的降維,概率模型,可解釋的知識(shí)庫(kù)方法,和術(shù)語(yǔ)的顯式表示單詞出現(xiàn)的上下文。
當(dāng)用作底層輸入表示時(shí),單詞和短語(yǔ)嵌入已經(jīng)被證明可以提高NLP任務(wù)的性能,例如句法分析和情感分析。
1.6.1.2.One - hot
參考博文:https://www.bilibili.com/read/cv4053575/
1.6.1.2.1.文本數(shù)據(jù)向量化
文本數(shù)據(jù)的格式是一個(gè)序列數(shù)據(jù),常見(jiàn)的有單詞和字符序列。如果需要應(yīng)用到深度學(xué)習(xí)網(wǎng)絡(luò)模型中,就需要將將這些序列進(jìn)行有效編碼。
這里所謂的編碼其實(shí)就將這些單詞或者字符進(jìn)行向量化。
向量化:就是將文本信息轉(zhuǎn)化為數(shù)據(jù)張量信息。主要的方法如下:
?將文本分割為單詞,并將每個(gè)單詞轉(zhuǎn)換為一個(gè)向量。
?將文本分割為字符,并將每個(gè)字符轉(zhuǎn)換為一個(gè)向量。
?提取單詞或字符的 n-gram,并將每個(gè) n-gram 轉(zhuǎn)換為一個(gè)向量。n-gram 是多個(gè)連續(xù)單詞或字符的集合(n-gram 之間可重疊)。
上面的整個(gè)過(guò)程就是將文本信息進(jìn)行單元分割。這里有幾個(gè)概念:
標(biāo)記(token): 將文本分解而成的單元(單詞、字符或 n-gram)
分詞(tokenization): 將文本分解成標(biāo)記的過(guò)程
向量編碼: 將向量與標(biāo)記相關(guān)聯(lián)的方法
?one-hot編碼(one-hot encoding)
?標(biāo)記嵌入[token embedding] 詞嵌入(word embedding)
總結(jié)文本數(shù)據(jù)向量化的三個(gè)過(guò)程:
?原始文本(原始數(shù)據(jù))
?將文本分解成標(biāo)記(標(biāo)記)
?將標(biāo)記進(jìn)行編碼(向量編碼)
如下圖所示:
n-gram是從一個(gè)句子中提取的N個(gè)(或更少)連續(xù)單詞(或字符)的集合。
例如:“The cat sat on the mat.”
二元語(yǔ)法(2-gram)集合:
三元語(yǔ)法(3-gram)集合:
{"The", "The cat", "cat", "cat sat", "The cat sat", "sat", "sat on", "on", "cat sat on", "on the", "the", "sat on the", "the mat", "mat", "on the mat"}以上的集合又稱(chēng)為詞袋,處理的是標(biāo)記組成的集合.一般它往往被用于淺層的語(yǔ)言處理模型,而不是深度學(xué)習(xí)模型.
在使用輕量級(jí)的淺層文本處理模型時(shí)(比如 logistic 回歸和隨機(jī)森林),n-gram 是一種功能強(qiáng)大、不可或缺的特征工程工具。
1.6.1.2.2.ont-hot編碼
one-hot編碼是將標(biāo)記轉(zhuǎn)換為向量的最常用、最基本的方法。
它將每個(gè)單詞與一個(gè)唯一的整數(shù)索引相關(guān)聯(lián),然后將這個(gè)整數(shù)索引 i 轉(zhuǎn)換為長(zhǎng)度為 N 的二進(jìn)制向量(N 是詞表大小),這個(gè)向量只有第 i 個(gè)元素是 1,其余元素都為 0。
單詞向量化
# -*- coding: UTF-8 -*-import numpy as np# 初始化數(shù)據(jù),每個(gè)"樣本"一個(gè)條目 samples = ['The cat sat on the mat.', 'The dog ate my homework.']# 首先,構(gòu)建數(shù)據(jù)中所有token的索引 token_index = {}for sample in samples:# 通過(guò)'split'方法對(duì)樣本進(jìn)行標(biāo)記。實(shí)際使用時(shí)還會(huì)從樣本中刪除標(biāo)點(diǎn)符號(hào)和特殊字符for word in sample.split():# 可以參考如下去掉非字符的'''word = word.lower()# 去掉非字母字符if not word.isalpha():new_word = filter(str.isalpha(), word)word = ''.join(list(new_word))'''# 添加索引if word not in token_index:token_index[word] = len(token_index) + 1# 接下來(lái),對(duì)樣本進(jìn)行矢量化 # 對(duì)樣本進(jìn)行分詞。只考慮每個(gè)樣本前max_length個(gè)單詞 max_length = 5# 用于存儲(chǔ)結(jié)果 results = np.zeros((len(samples), max_length, max(token_index.values()) + 1)) for i , samples in enumerate(samples):for j , word in list(enumerate(sample.split()))[:max_length]:index = token_index.get(word)results[i, j , index] = 1print(token_index) print(results)輸出結(jié)果:
{'The': 1, 'cat': 2, 'sat': 3, 'on': 4, 'the': 5, 'mat.': 6, 'dog': 7, 'ate': 8, 'my': 9, 'homework.': 10} [[[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]][[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]]字符向量化
# -*- coding: UTF-8 -*- import numpy as np import stringsamples = ['The cat sat on the mat.', 'The dog ate my homeword.']characters = string.printable token_index = dict(zip(characters, range(1, len(characters) + 1)))max_length = 50 results = np.zeros((len(samples), max_length, max(token_index.values()) + 1)) for i ,samples in enumerate(samples):for j, characters in enumerate(samples[: max_length]):index = token_index.get(characters)results[i, j ,index] = 1print(token_index) print(results)輸出結(jié)果:
{'0': 1, '1': 2, '2': 3, '3': 4, '4': 5, '5': 6, '6': 7, '7': 8, '8': 9, '9': 10, 'a': 11, 'b': 12, 'c': 13, 'd': 14, 'e': 15, 'f': 16, 'g': 17, 'h': 18, 'i': 19, 'j': 20, 'k': 21, 'l': 22, 'm': 23, 'n': 24, 'o': 25, 'p': 26, 'q': 27, 'r': 28, 's': 29, 't': 30, 'u': 31, 'v': 32, 'w': 33, 'x': 34, 'y': 35, 'z': 36, 'A': 37, 'B': 38, 'C': 39, 'D': 40, 'E': 41, 'F': 42, 'G': 43, 'H': 44, 'I': 45, 'J': 46, 'K': 47, 'L': 48, 'M': 49, 'N': 50, 'O': 51, 'P': 52, 'Q': 53, 'R': 54, 'S': 55, 'T': 56, 'U': 57, 'V': 58, 'W': 59, 'X': 60, 'Y': 61, 'Z': 62, '!': 63, '"': 64, '#': 65, '$': 66, '%': 67, '&': 68, "'": 69, '(': 70, ')': 71, '*': 72, '+': 73, ',': 74, '-': 75, '.': 76, '/': 77, ':': 78, ';': 79, '<': 80, '=': 81, '>': 82, '?': 83, '@': 84, '[': 85, '\\': 86, ']': 87, '^': 88, '_': 89, '`': 90, '{': 91, '|': 92, '}': 93, '~': 94, ' ': 95, '\t': 96, '\n': 97, '\r': 98, '\x0b': 99, '\x0c': 100} [[[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]...[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]][[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]...[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]]]keras實(shí)現(xiàn)的one-hot 編碼
from keras.preprocessing.text import Tokenizersamples = ['The cat sat on the mat.', 'The dog ate my homeword.']# 創(chuàng)建一個(gè)tokenizer,配置為只考慮前1000個(gè)最常用的單詞 tokenizer = Tokenizer(num_words=20)# 構(gòu)建單詞索引 tokenizer.fit_on_texts(samples)# 將字符串轉(zhuǎn)換為整數(shù)索引組成的列表 one_hot_results = tokenizer.texts_to_matrix(samples,mode='binary')# 找回單詞索引 word_index = tokenizer.word_index print('Found %s unique tokens.' % len(word_index)) print(one_hot_results)輸出結(jié)果:
Found 9 unique tokens. [[0. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 1. 0. 0. 0. 0. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]1.6.1.2.3.one-hot散列技巧
如果詞表中唯一標(biāo)記的數(shù)量太大而無(wú)法直接處理,就可以使用這種技巧。
這種方法沒(méi)有為每個(gè)單詞顯式分配一個(gè)索引并將這些索引保存在一個(gè)字典中,而是將單詞散列編碼為固定長(zhǎng)度的向量,通常用一個(gè)非常簡(jiǎn)單的散列函數(shù)來(lái)實(shí)現(xiàn)。
優(yōu)點(diǎn) 它避免了維護(hù)一個(gè)顯式的單詞索引,從而節(jié)省內(nèi)存并允許數(shù)據(jù)的在線(xiàn)編碼
缺點(diǎn) 就是可能會(huì)出現(xiàn)散列沖突(hash collision),即兩個(gè)不同的單詞可能具有相同的散列值。
1.6.1.3.Embedding
1.6.1.3.1.Word2vec
以下轉(zhuǎn)自:https://easyai.tech/ai-definition/word2vec/
Word2vec是Word Embedding方式之一,屬于NLP領(lǐng)域。他是將此轉(zhuǎn)化為”可計(jì)算”、”結(jié)構(gòu)化”的向量的過(guò)程。
這種方式在2018年之前比較主流,但是隨著B(niǎo)ERT、GPT2.0的出現(xiàn),這種方式已經(jīng)不算效果最好的方法了。
1.6.1.3.1.1.什么是Word2vec
?什么是Word Embedding?
在說(shuō)明 Word2vec 之前,需要先解釋一下 Word Embedding。 它就是將”不可計(jì)算” , ”非結(jié)構(gòu)化” 的詞轉(zhuǎn)化為”可計(jì)算”, ”結(jié)構(gòu)化”的向量。
**這一步解決的是”將現(xiàn)實(shí)問(wèn)題轉(zhuǎn)化為數(shù)學(xué)問(wèn)題”,**是人工智能非常關(guān)鍵的一步。
將現(xiàn)實(shí)問(wèn)題轉(zhuǎn)化為數(shù)學(xué)問(wèn)題只是第一步,后面還需要求解這個(gè)數(shù)學(xué)問(wèn)題。所以Word Embedding的模型本身并不重要,重要的是生成出來(lái)的結(jié)果----詞向量。因?yàn)樵诤罄m(xù)的任務(wù)中會(huì)直接用到這個(gè)詞向量。
?什么是Word2vec ?
Word2vec 是 Word Embedding 的方法之一。他是 2013 年由谷歌的 Mikolov 提出了一套新的詞嵌入方法。
Word2vec在整個(gè)NLP里面的位置可以用下圖表示:
在Word2vec 出現(xiàn)之前,已經(jīng)有一些 Word Embedding 的方法,但是之前的方法并不成熟,也沒(méi)有大規(guī)模的得到應(yīng)用。
1.6.1.3.1.2.Word2vec的2中訓(xùn)練模式
CBOW(Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model),是Word2vec 的兩種訓(xùn)練模式。下面簡(jiǎn)單做一下解釋:
?CBOW
通過(guò)上下文來(lái)預(yù)測(cè)當(dāng)前值。相當(dāng)于一句話(huà)中扣掉一個(gè)詞,讓你猜這個(gè)詞是什么。
?Skip-gram
用當(dāng)前詞來(lái)預(yù)測(cè)上下文。相當(dāng)于給你一個(gè)詞,讓你猜前面和后面可能出現(xiàn)什么詞。
?優(yōu)化方法
為了提高速度,Word2Vec經(jīng)常采用2中加速方式:
1.Negative Sample(負(fù)采樣)
2.Hierarchical Softmax
1.6.1.3.1.3.Word2vec的優(yōu)缺點(diǎn)
需要說(shuō)明的是:Word2vec 是上一代的產(chǎn)物(18 年之前),18 年之后想要得到最好的效果,已經(jīng)不使用 Word Embedding 的方法了,所以也不會(huì)用到 Word2vec。
優(yōu)點(diǎn):
1.由于 Word2vec 會(huì)考慮上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
2.比之前的 Embedding方 法維度更少,所以速度更快
3.通用性很強(qiáng),可以用在各種 NLP 任務(wù)中
缺點(diǎn):
1.由于詞和向量是一對(duì)一的關(guān)系,所以多義詞的問(wèn)題無(wú)法解決。
2.Word2vec是一種靜態(tài)的方法,雖然通用性強(qiáng),但是無(wú)法針對(duì)特定任務(wù)做動(dòng)態(tài)優(yōu)化。
1.6.1.3.1.4.百度百科
Word2vec,是一群用來(lái)產(chǎn)生詞向量的相關(guān)模型。這些模型為淺而雙層的神經(jīng)網(wǎng)絡(luò),用來(lái)訓(xùn)練以重新建構(gòu)語(yǔ)言學(xué)之詞文本。網(wǎng)絡(luò)以詞表現(xiàn),并且需猜測(cè)相鄰位置的輸入詞,在word2vec中詞袋模型假設(shè)下,詞的順序是不重要的。訓(xùn)練完成之后,word2vec模型可用來(lái)映射每個(gè)詞到一個(gè)向量,可用來(lái)表示詞對(duì)詞之間的關(guān)系,該向量為神經(jīng)網(wǎng)絡(luò)之隱藏層。
1.6.1.3.2.BERT
此部分來(lái)自:https://easyai.tech/ai-definition/bert/
BERT的全稱(chēng)是Bidirectional Encoder Representation from Transformers,即雙向Transformer的Encoder,因?yàn)閐ecoder是不能獲要預(yù)測(cè)的信息的。模型的主要?jiǎng)?chuàng)新點(diǎn)都在pre-train方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語(yǔ)和句子級(jí)別的representation。
從現(xiàn)在的大趨勢(shì)來(lái)看,使用某種模型預(yù)訓(xùn)練一個(gè)語(yǔ)言模型看起來(lái)是一種比較靠譜的方法。從之前AI2的 ELMo,到 OpenAI的fine-tune transformer,再到Google的這個(gè)BERT,全都是對(duì)預(yù)訓(xùn)練的語(yǔ)言模型的應(yīng)用。BERT這個(gè)模型與其它兩個(gè)不同的是
1.它在訓(xùn)練雙向語(yǔ)言模型時(shí)以減小的概率把少量的詞替成了Mask或者另一個(gè)隨機(jī)的詞。我個(gè)人感覺(jué)這個(gè)目的在于使模型被迫增加對(duì)上下文的記憶。至于這個(gè)概率,我猜是Jacob拍腦袋隨便設(shè)的。
2.增加了一個(gè)預(yù)測(cè)下一句的loss。這個(gè)看起來(lái)就比較新奇了。
BERT模型具有以下兩個(gè)特點(diǎn):
1.是這個(gè)模型非常的深,12層,并不寬(wide),中間層只有1024,而之前的Transformer模型中間層有2048。這似乎又印證了計(jì)算機(jī)圖像處理的一個(gè)觀點(diǎn)——深而窄 比 淺而寬 的模型更好。
2.MLM(Masked Language Model),同時(shí)利用左側(cè)和右側(cè)的詞語(yǔ),這個(gè)在ELMo上已經(jīng)出現(xiàn)了,絕對(duì)不是原創(chuàng)。其次,對(duì)于Mask(遮擋)在語(yǔ)言模型上的應(yīng)用,已經(jīng)被Ziang Xie提出了(我很有幸的也參與到了這篇論文中):[1703.02573] Data Noising as Smoothing in Neural Network Language Models。這也是篇巨星云集的論文:Sida Wang,Jiwei Li(香儂科技的創(chuàng)始人兼CEO兼史上發(fā)文最多的NLP學(xué)者),Andrew Ng,Dan Jurafsky都是Coauthor。但很可惜的是他們沒(méi)有關(guān)注到這篇論文。用這篇論文的方法去做Masking,相信BRET的能力說(shuō)不定還會(huì)有提升。
?擴(kuò)展閱讀
入門(mén)類(lèi)文章
深入淺出解析BERT原理及其表征的內(nèi)容(2019-8)
NLP新秀 : BERT的優(yōu)雅解讀(2019-2-18)
[NLP] Google BERT詳解]
[NLP自然語(yǔ)言處理]谷歌BERT模型深度解析
擴(kuò)展視野類(lèi)文章
BERT王者歸來(lái)!Facebook推出RoBERTa新模型,碾壓XLNet 制霸三大排行榜(2019-7)
Bert 改進(jìn): 如何融入知識(shí)(2019-7)
詳解BERT閱讀理解(2019-7)
XLNet:運(yùn)行機(jī)制及和Bert的異同比較(2019-6)
站在BERT肩膀上的NLP新秀們(PART III)(2019-6)
站在BERT肩膀上的NLP新秀們(PART II)(2019-6)
站在BERT肩膀上的NLP新秀們(PART I)(2019-6)
BERT模型在NLP中目前取得如此好的效果,那下一步NLP該何去何從?(2019-6)
Bert時(shí)代的創(chuàng)新:Bert應(yīng)用模式比較及其它(2019-5)
進(jìn)一步改進(jìn)GPT和BERT:使用Transformer的語(yǔ)言模型(2019-5)
76分鐘訓(xùn)練BERT!谷歌大腦新型優(yōu)化器LAMB加速大批量訓(xùn)練(2019-4-3)
知乎-如何評(píng)價(jià) BERT 模型?
從Word Embedding到Bert模型—自然語(yǔ)言處理中的預(yù)訓(xùn)練技術(shù)發(fā)展史
BERT 論文
深度長(zhǎng)文:NLP的巨人肩膀(上)
NLP 的巨人肩膀(下):從 CoVe 到 BERT
實(shí)踐類(lèi)文章
美團(tuán)BERT的探索和實(shí)踐(2019-11)
加速 BERT 模型有多少種方法?從架構(gòu)優(yōu)化、模型壓縮到模型蒸餾最新進(jìn)展詳解!(2019-10)
BERT, RoBERTa, DistilBERT, XLNet的用法對(duì)比(2019-9)
一大批中文(BERT等)預(yù)訓(xùn)練模型等你認(rèn)領(lǐng)!(2019-6)
[GitHub] BERT模型從訓(xùn)練到部署全流程(2019-6)
Bert時(shí)代的創(chuàng)新:Bert在NLP各領(lǐng)域的應(yīng)用進(jìn)展(2019-6)
BERT fintune 的藝術(shù)(2019-5)
中文語(yǔ)料的 Bert finetune(2019-5)
BERT源碼分析PART III(2019-5)
BERT源碼分析PART II(2019-5)
BERT源碼分析PART I(2019-5)
【干貨】BERT模型的標(biāo)準(zhǔn)調(diào)優(yōu)和花式調(diào)優(yōu)
BERT fine-tune 終極實(shí)踐教程
詳解谷歌最強(qiáng)NLP模型BERT(理論+實(shí)戰(zhàn))
用BRET進(jìn)行多標(biāo)簽文本分類(lèi)(附代碼)
1.6.1.3.3.Glove
轉(zhuǎn)自:http://www.fanyeong.com/2018/02/19/glove-in-detail/
1.6.1.3.3.1.什么是GloVe?
正如論文的標(biāo)題而言,GloVe的全稱(chēng)叫Global Vectors for Word Representation,它是一個(gè)基于全局詞頻統(tǒng)計(jì)(count-based & overall statistics)的詞表征(word representation)工具,它可以把一個(gè)單詞表達(dá)成一個(gè)由實(shí)數(shù)組成的向量,這些向量捕捉到了單詞之間一些語(yǔ)義特性,比如相似性(similarity)、類(lèi)比性(analogy)等。我們通過(guò)對(duì)向量的運(yùn)算,比如歐幾里得距離或者cosine相似度,可以計(jì)算出兩個(gè)單詞之間的語(yǔ)義相似性。
1.6.1.3.3.2.GloVe是如何實(shí)現(xiàn)的?
GloVe的實(shí)現(xiàn)分為以下三步:
1.6.1.3.3.3.GloVe是如何訓(xùn)練的?
這個(gè)圖一共采用了三個(gè)指標(biāo):語(yǔ)義準(zhǔn)確度,語(yǔ)法準(zhǔn)確度以及總體準(zhǔn)確度。那么我們不難發(fā)現(xiàn)Vector Dimension在300時(shí)能達(dá)到最佳,而context Windows size大致在6到10之間。
1.6.1.3.3.4.Glove與LSA、word2vec的比較
LSA(Latent Semantic Analysis)是一種比較早的count-based的詞向量表征工具,它也是基于co-occurance matrix的,只不過(guò)采用了基于奇異值分解(SVD)的矩陣分解技術(shù)對(duì)大矩陣進(jìn)行降維,而我們知道SVD的復(fù)雜度是很高的,所以它的計(jì)算代價(jià)比較大。還有一點(diǎn)是它對(duì)所有單詞的統(tǒng)計(jì)權(quán)重都是一致的。而這些缺點(diǎn)在GloVe中被一一克服了。而word2vec最大的缺點(diǎn)則是沒(méi)有充分利用所有的語(yǔ)料,所以GloVe其實(shí)是把兩者的優(yōu)點(diǎn)結(jié)合了起來(lái)。從這篇論文給出的實(shí)驗(yàn)結(jié)果來(lái)看,GloVe的性能是遠(yuǎn)超LSA和word2vec的,但網(wǎng)上也有人說(shuō)GloVe和word2vec實(shí)際表現(xiàn)其實(shí)差不多。
1.6.1.3.3.5.公式推導(dǎo)
總結(jié)
以上是生活随笔為你收集整理的06_1.Pytorch中如何表示字符串、word embedding、One - hot、Embedding(Word2vec、BERT、Glove)【学习总结】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么人在战争中起决定作用?
- 下一篇: 湖南耒阳市女子征兵有多少名额?