用神經網絡訓練詞向量的邏輯是,讓網絡去預測單詞(目標詞/上下文)這樣的任務,句向量也是同樣,咱們給定從句子裏的一些上下文,讓網絡去預測下一個單詞。在句(Paragraph)向量模型中,每個句子都被映射成一個獨立的向量,這個句向量做爲矩陣 D 的一列;同時,每個詞也被映射成一個獨立的向量,這個詞向量做爲矩陣 W 的一列。對這個句向量和這些詞向量求平均或者首尾相連,用來預測文本中的下一個詞。這裏,咱們選用首尾相連來組合這些矩陣。算法
嚴格的說,與 Word2vec 的公式相比,惟一的不一樣點在於這裏從 W 和D 兩個矩陣中構造 h。句子的標識(Token)被當作另一個「詞」看待。它扮演一個「Memory」的角色,用來記憶當前文本或文章主題中漏掉了什麼。所以,這個模型被稱爲「句向量的分佈記憶模型」(PV-DM: Distributed Memory Model of Paragraph Vectors)。網絡
上下文是固定長度的,從句子的一個滑動窗口中取樣。句向量被這這個句子產生的全部上下文共享,但不超越句子。可是詞向量矩陣 W 是超越句子,全局共享的。好比說,」powerful」的詞向量也對全部的句子有效。機器學習
經過隨機梯度降低法來訓練這些句向量和詞向量,在此過程當中經過反向傳播得到梯度。在隨機梯度降低的每一步,均可以從一個隨機的句子中抽取一個定長的上下文,從網絡中計算出梯度偏差,而後更新模型的參數。學習
在預測階段,須要執行一個「推斷(inference)」步驟計算新句子的句向量。也是經過梯度上升來獲取。在這個階段,其他的模型參數、詞向量矩陣 W 和 softmax 權重是固定的。繼承
假設語料庫中有 N 個句子,字典裏有 M 個詞彙;咱們試圖將每個句子映射到 p 維空間,每個詞映射到 q 維空間,因而這個模型就有總共 N×p+M×q 個參數(包括softmax參數)。即便句子的數量會隨着 N 的增大而增大,訓練中的更新仍是稀疏且高效。ip
通過訓練,這些句向量就能夠當作句子的特徵使用。咱們能夠把這些特徵直接用於傳統的機器學習技術,好比邏輯迴歸、支持向量機或者 K-means 聚類。
總而言之,這個算法有兩個關鍵階段:io
句向量有兩個顯著的優勢:效率
上面的方法討論了在一個文本窗口內,經過句向量和詞向量的首尾相接來預測下一個詞。另外一種方法不把上下文中的詞做爲輸入,而是強制這個模型在輸出中從句子中隨機抽取詞彙來進行預測。實際上,其意義在於在每個隨機梯度降低的迭代中,咱們抽取一個文本窗口,而後從這個文本窗口中抽取一個詞,而後經過一個分類任務獲得句向量。這項技術如圖所示。咱們把這個版本稱爲句向量的分佈詞袋(PV-DBOW): Distributed Bag of Words version of Paragraph Vector)。基礎
句向量被訓練出來,用來預測在一個小窗口中的詞彙。神經網絡
除了在概念上簡單之外,這個模型只須要存儲少許的數據。相比於上一個模型須要存儲 softmax 權重和詞向量,這個模型只須要存儲 softmax 權重。一樣的,這個模型也近似於 Skip-gram 模型。
能夠把每個句向量看成兩個向量的組合:一個經過 PV-DM 訓練,另外一個經過 PV-DBOW 訓練。PV-DM 可以很好地執行多種任務,可是它結合 PV-DBOW 後,經常可以更加出色完成任務。