-
Notifications
You must be signed in to change notification settings - Fork 16
wordVector
ChatGPT
Word vector(詞向量)是一種將自然語言中的詞彙表示成數值型向量的方法。詞向量的概念源於詞語的分佈式表示,也就是認為詞語的意義可以通過其在上下文中出現的分佈方式來表示。詞向量模型通常使用無監督學習算法從大量的文本數據中學習詞彙的分佈式表示,進而生成詞向量。
詞向量模型的主要思想是通過訓練來學習詞語在向量空間中的分佈,使得語義相似的詞語在詞向量空間中也比較接近。詞向量模型可以被用來進行自然語言處理中的各種任務,例如語義分析、情感分析、詞語相似度計算等。
詞向量模型的一個流行算法是 Word2Vec,該算法使用神經網絡模型對文本進行訓練,以生成高效的詞向量。其他的詞向量模型包括 GloVe、FastText 等。
ChatGPT:
學習詞向量通常需要以下步驟:
-
數據準備:收集一個大型的、多樣化的文本數據集,例如維基百科、新聞文章、社交媒體帖子等。
-
前處理:對文本數據進行清理和預處理,例如去除標點符號、停用詞和不需要的字符,並將文本轉化為小寫形式。
-
構建詞表:將文本數據集轉化為詞語序列,並建立詞表,其中每個詞語對應一個獨立的編號。
-
構建詞向量模型:選擇一種詞向量模型(例如 Word2Vec、GloVe 或 FastText)進行訓練。
-
訓練詞向量模型:使用選定的詞向量模型在文本數據上進行訓練,得到每個詞語對應的詞向量。在訓練過程中,模型通過預測詞語的上下文來學習詞向量。
-
詞向量應用:使用學習得到的詞向量進行自然語言處理任務,例如詞語相似度計算、文本分類、情感分析等。
需要注意的是,詞向量模型的訓練需要耗費大量的計算資源和時間,因此在實際應用中,通常使用預訓練的詞向量模型,例如使用已經在大型文本數據集上訓練好的 Word2Vec 或 GloVe 模型,以減少訓練成本。
ChatGPT
Word2Vec 是一種基於神經網絡的詞向量模型,它使用無監督學習算法從大量的文本數據中學習詞彙的分佈式表示。Word2Vec 有兩種不同的模型:Continuous Bag-of-Words(CBOW)和Skip-Gram,這兩種模型的算法都基於神經網絡。
Continuous Bag-of-Words(CBOW)模型
CBOW 模型的目標是根據上下文預測目標詞語。CBOW 模型的輸入是一個詞語的上下文,輸出是這個詞語本身。CBOW 模型的算法流程如下:
- 將文本數據轉換成一個由詞語編號構成的序列。
- 對每個詞語建立一個詞向量,並隨機初始化這些向量。
- 將每個詞語的詞向量作為輸入,使用一個隱藏層的神經網絡預測目標詞語。
- 使用 softmax 函數計算目標詞語在詞表中的概率分佈,使得該概率分佈與實際目標詞語的分佈越接近越好。
- 使用反向傳播算法更新神經網絡的參數,包括詞向量和權重參數,以最小化目標函數(交叉熵損失函數)。
ChatGPT:
使用 gensim 進行詞向量的訓練和使用是非常簡單的。下面是一個簡單的範例,展示如何使用 gensim 訓練詞向量模型並使用它們進行詞向量查詢:
from gensim.models import Word2Vec
# 訓練詞向量模型
sentences = [["this", "is", "a", "sentence"], ["this", "is", "another", "sentence"]]
model = Word2Vec(sentences, size=100, window=5, min_count=1, workers=4)
# 取得 "sentence" 的詞向量
vector = model.wv["sentence"]
print(vector)在這個例子中,我們使用 Word2Vec 類別訓練詞向量模型。我們提供了一個包含兩個句子的列表作為模型的訓練數據。這些句子是由詞語列表組成的,每個詞語都是一個字符串。我們設置了一些參數,包括詞向量的維度 size,窗口大小 window,最小詞頻 min_count,和使用的 CPU 核數量 workers。
在模型訓練完畢後,我們可以使用 wv 屬性獲取模型的詞向量。我們通過提供一個詞語的字符串來獲取它的詞向量,這裡我們獲取了 "sentence" 這個詞的詞向量。最後,我們印出了這個詞向量的值。
使用 gensim 進行詞向量的訓練和使用非常簡單,我們只需要提供一些文本數據,設置一些參數,就可以獲得一個詞向量模型。詞向量模型可以用於計算詞語之間的相似度、執行文本分類和生成等多種自然語言處理任務。
-
https://radimrehurek.com/gensim/auto_examples/tutorials/run_word2vec.html
-
https://machinelearningmastery.com/develop-word-embeddings-python-gensim/
-
Vectors In Transformer Neural Networks
- 影片中提到難以理解為何 Positional Encoding 用加法加入詞向量,而不是獨立用一個額外的 Position 去表達呢?(只為了省空間?) (感覺應該用實驗來驗證哪一種比較好)
- 但是 multi head 則用 concatanation ,花了很多倍的空間。
- ccc: 單一個量+Positional Encoding ,和幾百維的量+Positional Encoding (一起平移) 是不同的,如果有平移不變性的話,意義是不會變太多的。