Keras深度學習——使用fastText構建單詞向量
theme: hydrogen
持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第30天,點選檢視活動詳情
使用fastText構建單詞向量
fastText
是 Facebook
研究團隊提出的演算法模型,用於有效學習單詞表示和句子分類。fastText
與 word2vec
的不同之處在於 word2vec
將每個單詞視為最小單位,學習其向量表示形式,但是 fastText
假定一個單詞由 n-gram
組成。例如,sunny
由 [sun, sunn, sunny]
,[sunny, unny, nny]
等組成,在其中我們看到了大小為 n
的原始單詞的子集,其中 n
的範圍可以從 1
到原始單詞的長度。
使用 fastText
的另一個原因是,可以解決單詞不符合 skip-gram
或 CBOW
模型中的最小頻率截止值的情況。例如,appended
一詞與 append
本質上具有相同的意義。但是,如果 append
頻率較高,但在新句子中使用了 append
這個單詞而不是 append
,那麼我們就無法獲取準確的 appended
向量。在這種情況下,fastText
的 n-gram
就會派上用場了。
實際上,fastText
後續同樣使用 skip-gram/CBOW
模型,但是,它增加了輸入資料集,因此可以將沒有見過的單詞也考慮在內。
fastText 提取單詞向量
我們基於 fastText
提取單詞向量的策略如下:
- 在gensim庫中使用fastText方法
- 預處理輸入資料
- 將每個輸入句子分解單詞列表
- 根據上一步得到的分解結果構建詞彙表
- 使用先前的輸入資料訓練模型
- 計算單詞之間的相似度
使用 Keras 實現 fastText 生成單詞向量
本節中,我們利用 Keras
實現使用 fastText
生成單詞向量。
首先,匯入相關包,並載入資料集:
```python
from gensim.models.fasttext import FastText
import pandas as pd
data = pd.read_csv('archive/Tweets.csv')
print(data.head())
預處理資料集並將其轉換為列表,其中每個元素是每個句子中的列表,此過程與我們在 `word2vec` 模型所進行的預處理和轉換步驟相同:
python
stop = set(stopwords.words('english'))
def preprocess(text):
text=text.lower()
text=re.sub('[^0-9a-zA-Z]+',' ',text)
words = text.split()
words2 = [i for i in words if i not in stop]
words3=' '.join(words2)
return(words3)
data['text'] = data['text'].apply(preprocess)
list_words=[]
for i in range(len(data)):
list_words.append(data['text'][i].split())
定義模型,使用引數 `vector_size` 指定每個單詞的向量維度,並構建詞彙表:
python
ft_model = FastText(vector_size=50)
ft_model.build_vocab(list_words)
訓練模型:
python
ft_model.train(list_words, total_examples=ft_model.corpus_count,epochs=100)
檢查模型詞彙表中不存在的單詞的單詞向量。例如,詞彙中出現了單詞 `first`;但是,詞彙中沒有 `firstly` 這個詞,在這種情況下,我們檢查 `first` 和 `firstly` 的詞向量之間的相似性:
python
print(ft_model.wv.similarity('first','firstly'))
計算的輸出結果為 `0.90`,表明兩個單詞之間的相似度非常高:
shell
0.90227515
``
因此,我們可以看到
fastText` 模型得到的單詞向量可以幫助我們為詞彙表中不存在的單詞生成單詞向量。
我們也可以使用該方法也來糾正資料集內的拼寫錯誤,因為拼寫錯誤的單詞很可能很少出現,而出現頻率較高的最相似的單詞更可能是拼寫錯誤單詞的正確版本。因此,我們可以使用向量演算法執行拼寫校正,如下所示:
python
result = ft_model.wv.most_similar(positive=['exprience', 'prmise'], negative=['experience'], topn=1)
print(result)
在前面的程式碼中,positive
中有單詞拼寫錯誤,而 negative
中沒有拼寫錯誤,程式碼的輸出是 promise
。因此,可以使用此方式糾正拼寫錯誤:
shell
[('promise', 0.6496826410293579)]
此外,還可以使用 most_similar
方法達到相同的效果:
```python
print(ft_model.wv.most_similar('exprience', topn=1))
[('experience',0.9027844071388245)]
``` 但是,需要注意的是,當資料集中拼寫錯誤頻率較高時,該方法並不能得到預期結果。
- OpenCV使用顏色進行膚色檢測
- Keras深度學習——構建電影推薦系統
- PyTorch張量操作詳解
- OpenCV直方圖的比較
- Python 常用字串操作
- 使用 dlib 進行人臉識別
- OpenCV 人臉檢測詳解(僅需2行程式碼學會人臉檢測)
- Keras深度學習——使用fastText構建單詞向量
- Keras深度學習——使用skip-gram和CBOW模型構建單詞向量
- Keras深度學習——從零開始構建單詞向量
- Keras深度學習——生成對抗網路
- Keras深度學習——建立自定義目標檢測資料集
- PyTorch強化學習——基於值迭代的強化學習演算法
- PyTorch強化學習——模擬FrozenLake環境
- PyTorch強化學習——策略評估
- PyTorch強化學習——馬爾科夫決策過程
- Keras深度學習——DeepDream演算法生成影象
- Keras深度學習——使用對抗攻擊生成可欺騙神經網路的影象
- PyTorch強化學習——策略梯度演算法
- Keras深度學習——交通標誌識別