自然語言處理中的詞表示

詞表示是自然語言處理的基礎哆致,一個好的詞向量在很大程度上決定了后續(xù)任務的上限。本文是我最近學習該部分內容的筆記患膛,主要參照的是基于神經網絡的詞和文檔語義向量表示方法研究一文摊阀,穿插了一些個人理解。內容較多踪蹬,錯誤難免驹溃,請拍磚~


分布表示(Distributional Representation)假說:上下文相似的詞,其語義也相似延曙。根據建模方式的不同豌鹤,主要分為三類:基于矩陣的分布表示、基于聚類的分布表示和基于神經網絡的分布表示枝缔。
盡管不同的分布表示方法使用了不同的技術手段獲取詞表示布疙,但由于這些方法均基于分布假說,它們的核心思想也都由兩部分組成:

  1. 選擇一種方式描述上下文
  2. 選擇一種模型刻畫目標詞與其上下文之間的關系愿卸。

基于矩陣的分布表示

基于矩陣的分布表示通常又稱為分布語義模型(distributional semantic models)灵临。這類方法需要構建一個“詞-上下文”矩陣,從矩陣中獲取詞的表示趴荸。在“詞-上下文”矩陣中儒溉,每行對應一個詞,每列表示一種不同的上下文发钝,矩陣中的每個元素對應相關詞和上下文的共現次數顿涣。在這種表示下波闹,矩陣中的一行,就成為了對應詞的表示涛碑,這種表示描述了該詞的上下文的分布精堕。由于分布假說認為上下文相似的詞,其語義也相似蒲障,因此在這種表示下歹篓,兩個詞的語義相似度可以直接轉化為兩個向量的空間距離。這類方法具體可以分為三個步驟:

  1. 選取上下文揉阎。最常見的有三種方法:第一種庄撮,將詞所在的文檔作為上下文,形成“詞-文檔”矩陣(term-document matrix)毙籽;第二種洞斯,將詞附近上下文中的各個詞(如上下文窗口中的5個詞)作為上下文,形成“詞-詞”矩陣惧财;第三種橄登,將詞附近上下文各詞組成的n-gram作為上下文 爷恳。在這三種方法中,“詞-文檔”矩陣非常稀疏,而“詞-詞”矩陣相對較為稠密座菠,效果一般好于前者抖单》ν停“詞-n-gram”相對“詞-詞”矩陣保留了詞序信息柳骄,建模更精確,但由于比前者更稀疏仰迁,實際效果不一定能超越前者甸昏。
  2. 確定矩陣中各元素的值⌒煨恚“詞-上下文”共現矩陣根據其定義施蜜,里面各元素的值應為詞與對應的上下文的共現次數。然而直接使用原始共現次數作為矩陣的值在大多數情況下效果并不好雌隅,因此研究人員提出了多種加權和平滑方法翻默,最常用的有tf-idf、PMI 和直接取log恰起。
  3. 矩陣分解(可選)修械。在原始的“詞-上下文”矩陣中,每個詞表示為一個非常高維(維度是不同上下文的總個數)且非常稀疏的向量检盼,使用降維技術可以將這一高維稀疏向量壓縮成低維稠密向量肯污。降維技術可以減少噪聲帶來的影響,但也可能損失一部分信息。最常用的分解技術包括奇異值分解(SVD)蹦渣、非負矩陣分解(NMF)哄芜、典型關聯分析(Canonical Correlation Analysis,CCA)剂桥、Hellinger PCA(HPCA)忠烛。

著名的 Global Vector模型(GloVe)就是基于矩陣的分布表示

基于聚類的分布表示(分布聚類)

基于聚類的分布表示又稱作分布聚類(distributional clustering)属提,這類方法通過聚類手段構建詞與其上下文之間的關系权逗。其中最經典的方法是布朗聚類(Brown clustering)。布朗聚類是一種層級聚類方法冤议,聚類結果為每個詞的多層類別體系斟薇。因此可以根據兩個詞的公共類別判斷這兩個詞的語義相似度。

這個方法似乎沒有太多主流的應用恕酸,所以我沒有做深入研究

基于神經網絡的分布表示(詞向量)

基于神經網絡的分布表示一般稱為詞向量堪滨、詞嵌入(word embedding)或分布式表示(distributed representation)。神經網絡詞向量表示技術通過神經網絡技術對上下文蕊温,以及上下文與目標詞之間的關系進行建模袱箱。由于神經網絡較為靈活,這類方法的最大優(yōu)勢在于可以表示復雜的上下文义矛。在前面基于矩陣的分布表示方法中发笔,最常用的上下文是詞。如果使用包含詞序信息的n-gram作為上下文凉翻,當n增加時了讨,n-gram的總數會呈指數級增長,此時會遇到維數災難問題制轰。而神經網絡在表示n-gram時前计,可以通過一些組合方式對n個詞進行組合,參數個數僅以線性速度增長垃杖。有了這一優(yōu)勢男杈,神經網絡模型可以對更復雜的上下文進行建模,在詞向量中包含更豐富的語義信息调俘。
神經網絡詞向量模型與其它分布表示方法一樣伶棒,均基于分布假說,核心依然是上下文的表示以及上下文與目標詞之間的關系的建模脉漏。構建上下文與目標詞之間的關系苞冯,最自然的一種思路就是使用語言模型。

語言模型

語言模型可以對一段文本的概率進行估計侧巨,對信息檢索舅锄、機器翻譯、語音識別等任務有著重要的作用。形式化講皇忿,統計語言模型的作用是為一個長度為m的字符串確定一個概率分布P(w_1,w_2, ...,w_m)畴蹭,表示其存在的可能性,其中w_1w_m依次表示這段文本中的各個詞鳍烁。一般在實際求解過程中叨襟,通常采用下式計算其概率值:
\begin{array} { r l } { P \left( w _ { 1 } , w _ { 2 } , \ldots , w _ { m } \right) = } & { P \left( w _ { 1 } \right) P \left( w _ { 2 } | w _ { 1 } \right) P \left( w _ { 3 } | w _ { 1 } , w _ { 2 } \right) } \\ { } & { \dots P \left( w _ { i } | w _ { 1 } , w _ { 2 } , \ldots , w _ { i - 1 } \right) \ldots P \left( w _ { m } | w _ { 1 } , w _ { 2 } , \ldots , w _ { m - 1 } \right) } \end{array}
在實踐中,如果文本的長度較長幔荒,上述公式右部P \left( w _ { i } | w _ { 1 } , w _ { 2 } , \dots , w _ { i - 1 } \right)的估算會非常困難糊闽。因此,研究者們提出使用一個簡化模型:n元模型(n-gram model)爹梁。在n元模型中估算條件概率時右犹,距離大于等于n的上文詞會被忽略,也就是對上述條件概率做了以下近似:
P \left( w _ { i } | w _ { 1 } , w _ { 2 } , \ldots , w _ { i - 1 } \right) \approx P \left( w _ { i } | w _ { i - ( n - 1 ) } , \ldots , w _ { i - 1 } \right)
n元模型中姚垃,傳統的方法一般采用頻率計數的比例來估算n元條件概率:
P \left( w _ { i } | w _ { i - ( n - 1 ) } , \ldots , w _ { i - 1 } \right) = \frac { \operatorname { count } \left( w _ { i - ( n - 1 ) } , \ldots , w _ { i - 1 } , w _ { i } \right) } { \operatorname { count } \left( w _ { i - ( n - 1 ) } , \ldots , w _ { i - 1 } \right) }
其中念链,\operatorname { count } \left( w _ { i - ( n - 1 ) } , \ldots , w _ { i - 1 } \right)表示文本序列w _ { i - ( n - 1 ) } , \ldots , w _ { i - 1 }在語料中出現的次數。
為了更好地保留詞序信息积糯,構建更有效的語言模型掂墓,我們希望在n元模型中選用更大的n。但是看成,當n較大時君编,長度為n序列出現的次數就會非常少,在按照上述公式估計n元條件概率時绍昂,就會遇到數據稀疏問題啦粹,導致估算結果不準確。因此窘游,一般在百萬詞級別的語料中唠椭,三元模型是比較常用的選擇,同時也需要配合相應的平滑算法忍饰,進一步降低數據稀疏帶來的影響贪嫂。
為了更好地解決n元模型估算概率時遇到的數據稀疏問題,神經網絡語言模型應運而生艾蓝。

神經網絡語言模型(NNLM)

神經網絡語言模型(Neural Network Language Model 力崇,NNLM)在學習語言模型的同時,也能得到詞向量赢织。
NNLM 同樣也是對n 元語言模型進行建模亮靴,估算P \left( w _ { i } | w _ { i - ( n - 1 ) } , \dots , w _ { i - 1 } \right)的值。但與傳統方法不同的是于置,NNLM 不通過計數的方法對n元條件概率進行估計茧吊,而是直接通過一個神經網絡結構,對其進行建模求解。下圖展示了NNLM 的基本結構搓侄。

NNLM模型

具體而言瞄桨,對語料中一段長度為n的序列w _ { i - ( n - 1 ) } , \dots , w _ { i - 1 } , w _ { i }n元語言模型需要最大化以下概率:
P \left( w _ { i } | w _ { i - ( n - 1 ) } , \dots , w _ { i - 1 } \right)
其中讶踪,w_i 為需要通過語言模型預測的詞(目標詞)芯侥。對于整個模型而言,輸入為條件部分的整個詞序列:w _ { i - ( n - 1 ) } , \dots , w _ { i - 1 }乳讥,輸出為目標詞的分布柱查。而神經網絡的目標就是要讓輸出中,w _ { i }(目標詞)的概率最大雏婶。
神經網絡語言模型采用普通的三層前饋神經網絡結構物赶,其中第一層為輸入層白指。Bengio提出使用各詞的詞向量作為輸入以解決數據稀疏問題留晚,因此輸入層為詞w _ { i - ( n - 1 ) } , \dots , w _ { i - 1 }的詞向量的順序拼接:
\boldsymbol { x } = \left[ \boldsymbol { e } \left( w _ { i - ( n - 1 ) } \right) ; \ldots ; \boldsymbol { e } \left( w _ { i - 2 } \right) ; \boldsymbol { e } \left( w _ { i - 1 } \right) \right]
當輸入層完成對上文的表示x之后,模型將其送入剩下兩層神經網絡告嘲,依次得到隱藏層h和輸出層y:

\boldsymbol { h } = \tanh \left( \boldsymbol { b } ^ { ( 1 ) } + H \boldsymbol { x } \right)
\boldsymbol { y } = \boldsymbol { b } ^ { ( 2 ) } + W \boldsymbol { x } + U \boldsymbol { h }
其中H \in \mathbb { R } ^ { | \boldsymbol {h} | \times ( n - 1 ) | e | },U \in \mathbb { R } ^ { | \mathbb { V } | \times | \boldsymbol {h} | }错维。| \mathbb { V } |表示詞匯表的大小,| e |表示詞向量的維度橄唬,|\boldsymbol {h}|是隱層的維度赋焕。矩陣W \in \mathbb { R } ^ { | \mathbb { V } | \times ( n - 1 ) | e | }表示從輸入層到輸出層的直連邊權重矩陣。如果使用該直連邊仰楚,可以減少一半的迭代次數隆判;但如果沒有直連邊,可以生成性能更好的語言模型僧界。因此在后續(xù)工作中侨嘀,很少有使用輸入層到輸出層直連邊的工作。

輸出層一共有| \mathbb { V } |個元素捂襟,咬腕,依次對應下一個詞為詞表中某個詞的可能性。這里使用softmax函數葬荷,將其轉化為對應的概率涨共。

在NNLM模型中,詞向量出現在兩個地方宠漩,一個是輸入層的詞向量e ( w )举反,另一是隱層的權重UU的維度是| \mathbb { V } | \times | \boldsymbol { h } |扒吁,這可以看做是\mathbb{V}|\boldsymbol {h}|維的行向量火鼻,其中的每一個向量,均可以看做某個詞在模型中的另一個詞向量,記為e '( w )凝危。在不考慮W 的情況下波俄,每個詞在模型中有兩套詞向量。通常在實際工作中只是用第一個作為詞向量蛾默。

\boldsymbol{y}展開懦铺,得到:
\begin{aligned} \boldsymbol { y } \left( w _ { i } \right) & = \boldsymbol { b } ^ { ( 2 ) } + \boldsymbol { e } ^ { \prime } \left( w _ { \boldsymbol { i } } \right) ^ { \mathrm { T } } \tanh \left( \boldsymbol { b } ^ { ( 1 ) } + H \left[ \boldsymbol { e } \left( w _ { i - ( n - 1 ) } \right) ; \ldots ; \boldsymbol { e } \left( w _ { i - 1 } \right) \right] \right) \\ & = E \left( w _ { i } ; w _ { i - ( n - 1 ) : i - 1 } \right) \end{aligned}
E \left( w _ { i } ; w _ { k - } ( n - 1 ) : i - 1 \right)被稱為能量函數。

log雙線性語言模型(LBL)

2007 年支鸡,Mnih和Hinton在神經網絡語言模型(NNLM)的基礎上提出了log雙線性語言模型(Log-Bilinear Language Model冬念,LBL)。LBL模型的能量函數為:
\ E \left( w _ { i } ; w _ { i - ( n - 1 ) : i - 1 } \right) = \boldsymbol { b } ^ { ( 2 ) } + \boldsymbol { e } \left( w _ { i } \right) ^ { \mathrm { T } } \boldsymbol { b } ^ { ( 1 ) } + \boldsymbol { e } \left( w _ { i } \right) ^ { \mathrm { T } } H \left[ \boldsymbol { e } \left( w _ { i - ( n - 1 ) } \right) ; \ldots ; \boldsymbol { e } \left( w _ { i - 1 } \right) \right]
LBL模型的能量函數與NNLM的能量函數主要有兩個區(qū)別牧挣。一急前、LBL 模型中,沒有非線性的激活函數tanh瀑构,而由于NNLM 是非線性的神經網絡結構裆针,激活函數必不可少;二寺晌、LBL 模型中世吨,只有一份詞向量e,也就是說呻征,無論一個詞是作為上下文耘婚,還是作為目標詞,使用的是同一份詞向量陆赋。其中第二點(只有一份詞向量)沐祷,只在原版的LBL模型中存在,后續(xù)的改進工作均不包含這一特點攒岛。

循環(huán)神經網絡語言模型(RNNLM)

循環(huán)神經網絡語言模型(Recurrent Neural Network based Language Model赖临,RNNLM)則直接對P \left( w _ { i } | w _ { 1 } , w _ { 2 } , \dots , w _ { i - 1 } \right)進行建模(注意不是P \left( w _ { i } | w _ { i - ( n - 1 ) } , \dots , w _ { i - 1 } \right)

該模型就是把NNLM隱層變成RNN,每一個隱層包含此前所有上文信息

RNNLM里面最厲害的就屬ELMo了阵子。該模型利用多層雙向LSTM的加權和來表示詞向量思杯,其中權重可根據具體任務動態(tài)調節(jié)。

C&W模型

與基于語言模型的詞向量生成方法不同挠进,C&W以直接生成詞向量為目標色乾。


C&W模型

C&W模型沒有去求解P \left( w _ { i } | w _ { 1 } , w _ { 2 } , \dots , w _ { i - 1 } \right),而是直接對n元短語打分领突。對于語料中出現過的n元短語暖璧,模型會對其打高分;而對于語料中沒有出現的隨機短語君旦,模型會對其打低分澎办。通過這種方式嘲碱,C&W 模型可以更直接地學習得到符合分布假說的詞向量。
具體而言局蚀,對于整個語料麦锯,C&W模型需要最小化:
\sum _ { ( w , c ) \in \mathbb { D } } \sum _ { w ^ { \prime } \in \mathbb { V } } \max \left( 0,1 - \operatorname { score } ( w , c ) + \operatorname { score } \left( w ^ { \prime } , c \right) \right)
其中,(w,c)為從語料中選出的一個n元短語w _ { i - ( n - 1 ) / 2 } , \dots , w _ { i + ( n - 1 ) / 2 }琅绅,w為序列中的中間詞扶欣,也是目標詞,即w_i千扶;c表示w的上下文料祠;w'為字典中的某一個詞。正樣本(w,c)來自語料澎羞,而負樣本(w',c)則是將正樣本序列中的中間詞替換成其它詞髓绽。
即:
\begin{array} { l } { ( w , c ) = w _ { i - ( n - 1 ) / 2 } , \ldots , w _ { i + ( n - 1 ) / 2 } } \\ { \left( w ^ { \prime } , c \right) = w _ { i - ( n - 1 ) / 2 } , \ldots , w _ { i - 1 } , w ^ { \prime } , w _ { i + 1 } , \ldots , w _ { i + ( n - 1 ) / 2 } } \end{array}
C&W模型與NNLM相比,主要的不同點在于C&W模型將目標詞放到了輸入層妆绞,同時輸出層也從語言模型的|\mathbb {V}|個節(jié)點變?yōu)橐粋€節(jié)點顺呕,這個節(jié)點的數值表示對這組n元短語的打分。這個區(qū)別使得C&W模型成為神經網絡詞向量模型中最為特殊的一個摆碉,其它模型的目標詞均在輸出層塘匣,只有C&W模型的目標詞在輸入層。

CBOW模型

CBOW模型

CBOW模型的結構如上圖巷帝,該模型一方面根據C&W模型的經驗,使用一段文本的中間詞作為目標詞扫夜;另一方面楞泼,又以NNLM作為藍本,并在其基礎上做了兩個簡化笤闯。一堕阔、CBOW沒有隱藏層,去掉隱藏層之后颗味,模型從神經網絡結構直接轉化為log線性結構超陆,與Logistic回歸一致。log線性結構比三層神經網絡結構少了一個矩陣運算浦马,大幅度地提升了模型的訓練速度时呀。二、CBOW去除了上下文各詞的詞序信息晶默,使用上下文各詞詞向量的平均值谨娜,代替神經網絡語言模型使用的上文各詞詞向量的拼接。形式化地磺陡,CBOW模型對于一段訓練樣本w _ { i - ( n - 1 ) } , \dots , w _ { i }趴梢,輸入為:
\boldsymbol { x } = \frac { 1 } { n - 1 } \sum _ { w _ { j } \in c } e \left( w _ { j } \right)
由于沒有隱藏層漠畜,CBOW模型的輸入層直接就是上下文的表示。CBOW 模型根據上下文的表示坞靶,直接對目標詞進行預測:
P ( w | c ) = \frac { \exp \left( e ^ { \prime } ( w ) ^ { \mathrm { T } } \boldsymbol { x } \right) } { \sum _ { w ^ { \prime } \in \mathbb { V } } \exp \left( \boldsymbol { e } ^ { \prime } \left( w ^ { \prime } \right) ^ { \mathrm { T } } \boldsymbol { x } \right) }
對于整個語料而言憔狞,與神經網絡語言模型類似,CBOW的優(yōu)化目標為最大化:
\sum _ { ( w , c ) \in \mathbb { D } } \log P ( w | c )

Skip-gram模型

Skip-gram模型

Skip-gram模型的結構如上圖彰阴,與CBOW模型一樣躯喇,Skip-gram模型中也沒有隱藏層。和CBOW模型不同的是硝枉,Skip-gram模型每次從目標詞w的上下文c中選擇一個詞廉丽,將其詞向量作為模型的輸入x,也就是上下文的表示妻味。Skip-gram模型同樣通過上下文預測目標詞正压,對于整個語料的優(yōu)化目標為最大化:
\sum _ { ( w , c ) \in \mathbb { D } } \sum _ { w _ { j } \in c } \log P ( w | w _ { j } )
其中,
P ( w | w _ { j } ) = \frac { \exp \left( \boldsymbol { e } ^ { \prime } ( w ) ^ { \mathrm { T } } \boldsymbol { e } \left( w _ { j } \right) \right) } { \sum _ { w ^ { \prime } \in \mathrm { V } } \exp \left( e ^ { \prime } \left( w ^ { \prime } \right) ^ { \mathrm { T } } \boldsymbol { e } \left( w _ { j } \right) \right) }

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末责球,一起剝皮案震驚了整個濱河市焦履,隨后出現的幾起案子,更是在濱河造成了極大的恐慌雏逾,老刑警劉巖嘉裤,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異栖博,居然都是意外死亡屑宠,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門仇让,熙熙樓的掌柜王于貴愁眉苦臉地迎上來典奉,“玉大人,你說我怎么就攤上這事丧叽∥谰粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵踊淳,是天一觀的道長假瞬。 經常有香客問我,道長迂尝,這世上最難降的妖魔是什么脱茉? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮雹舀,結果婚禮上芦劣,老公的妹妹穿的比我還像新娘。我一直安慰自己说榆,他們只是感情好虚吟,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布寸认。 她就那樣靜靜地躺著,像睡著了一般串慰。 火紅的嫁衣襯著肌膚如雪偏塞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天邦鲫,我揣著相機與錄音灸叼,去河邊找鬼。 笑死庆捺,一個胖子當著我的面吹牛古今,可吹牛的內容都是我干的。 我是一名探鬼主播滔以,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼捉腥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了你画?” 一聲冷哼從身側響起抵碟,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坏匪,沒想到半個月后拟逮,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡适滓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年敦迄,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粒竖。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡颅崩,死狀恐怖,靈堂內的尸體忽然破棺而出蕊苗,到底是詐尸還是另有隱情,我是刑警寧澤沿彭,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布朽砰,位于F島的核電站,受9級特大地震影響喉刘,放射性物質發(fā)生泄漏瞧柔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一睦裳、第九天 我趴在偏房一處隱蔽的房頂上張望造锅。 院中可真熱鬧,春花似錦廉邑、人聲如沸哥蔚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糙箍。三九已至渤愁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間深夯,已是汗流浹背抖格。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咕晋,地道東北人雹拄。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像掌呜,于是被迫代替她去往敵國和親滓玖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容