丁海蘭
(蘭州交通大學(xué) 文學(xué)與國際漢學(xué)院,甘肅 蘭州 730070)
介于計(jì)算機(jī)只能識別1和0進(jìn)行自然語言處理,那么想讓計(jì)算機(jī)處理文本,就必須把文本轉(zhuǎn)化成計(jì)算機(jī)所能識別的語言,其最直接的方法就是把詞轉(zhuǎn)化成詞向量.詞的向量化是指把詞進(jìn)行數(shù)學(xué)化表示,主要有one-hot representation、Distributed representation和word2vec模型訓(xùn)練詞向量三種表示方式.第一種方式是用一個(gè)很長的向量來表示一個(gè)詞,其分量為1,其余全部為0,1,其缺憾是無法提供語義信息;第二種方式是由Hinton最早提出,他是將詞映射到一個(gè)低維且稠密的100~200大小的實(shí)數(shù)向量空間中,這樣使得詞義越相近的詞距離越近;第三種方式是借鑒Bengio提出的NNLM模型(Neural Network Language Model)以及Hinton的Log-Linear模型、Mikolov模型等,都提出了Word2Vec的語言模型,Word2vec可以高速有效地訓(xùn)練詞向量[1].
詞向量其實(shí)是將詞映射到一個(gè)語義空間,得到的向量.Word2Vec則是借用神經(jīng)網(wǎng)絡(luò)的方式實(shí)現(xiàn)的,考慮文本的上下文關(guān)系,Word2Vec有CBOW 和Skip-gram共兩種模型,這兩種模型在訓(xùn)練的過程中類似.Skip-gram 模型是用一個(gè)詞語作為輸入,來預(yù)測它周圍的上下文,CBOW模型是拿一個(gè)詞語的上下文作為輸入,來預(yù)測這個(gè)詞語本身.
2.1.1 Skip-gram訓(xùn)練模型
如果是用一個(gè)詞語作為輸入,來預(yù)測它周圍的上下文,那這個(gè)模型叫做Skip-gram 模型.首先確定窗口大小Window,對每個(gè)詞生成2*window個(gè)訓(xùn)練樣本,(i,i-window),(i,i-window+1),…,(i,i+window-1),(i,i+window).緊接著確定batch_size,注意batch_size的大小必須是2*window的整數(shù)倍,這確保每個(gè)batch包含了一個(gè)詞匯對應(yīng)的所有樣本.訓(xùn)練算法有兩種:層次Softmax和 Negative Sampling[2].最后將神經(jīng)網(wǎng)絡(luò)迭代訓(xùn)練一定次數(shù),得到輸入層到隱藏層的參數(shù)矩陣,矩陣中每一行的轉(zhuǎn)置即是對應(yīng)詞的詞向量,具體模型如圖1.
圖1 Skip-gram模型
2.1.2 CBOW訓(xùn)練模型
CBOW(Bag-of-words model)模型是拿一個(gè)詞語的上下文作為輸入,來預(yù)測這個(gè)詞語本身.首先,確定窗口大小window,對每個(gè)詞生成2*window個(gè)訓(xùn)練樣本,(i-window,i),(i-window+1,i),…,(i+window-1,i),(i+window,i).其次,確定batch_size,注意batch_size的大小必須是2*window的整數(shù)倍,這能確保每個(gè)batch包含了一個(gè)詞匯對應(yīng)的所有樣本,訓(xùn)練算法有兩種:層次Softmax和 Negative Sampling.最后是將神經(jīng)網(wǎng)絡(luò)迭代訓(xùn)練一定次數(shù),得到輸入層到隱藏層的參數(shù)矩陣,矩陣中每一行的轉(zhuǎn)置即是對應(yīng)詞的詞向量,具體模型如圖2.
圖2 CBOW模型
Word2Vec的Skip-gram和CBOW兩種訓(xùn)練模型中,訓(xùn)練的語料較多時(shí)建議使用Skip-gram訓(xùn)練模型去訓(xùn)練,而語料相對較少時(shí)建議用CBOW訓(xùn)練模型去訓(xùn)練.總體來說,Word2Vec就可以利用訓(xùn)練好的詞向量模型,通過輸入詞轉(zhuǎn)化成詞向量再經(jīng)過模型訓(xùn)練,最后輸出按照距離遠(yuǎn)近的詞類,將這些單詞變成了近義詞集.
終端搭建好環(huán)境變量后在Anaconda3的spyder開發(fā)環(huán)境中,使用python程序設(shè)計(jì)語言編寫詞向量測試代碼.調(diào)用Gensim工具包中的Word2Vec的CBOW模型算法去訓(xùn)練,訓(xùn)練的詞向量大小(size)為50,訓(xùn)練窗口(window)為5,最小詞頻為5.首先,計(jì)算兩個(gè)詞的相似度,再計(jì)算一條詞的相關(guān)詞,最后再輸出與兩個(gè)詞在語義上距離最接近的詞集.使用python程序設(shè)計(jì)語言編寫的詞向量測試的核心代碼如下:
# genism modules
from genism.models import Word2Vec
from genism.models.word2vec import Text8Corpus
import os.path
import sys
import numpy as np
訓(xùn)練的語料是經(jīng)過分詞核對后,批處理為每行一句,共有33244句,接著去除語料中的所有詞性標(biāo)注并以空格代替詞性標(biāo)注,每句保留藏文句子中的終結(jié)符號即單垂符作為句子的單位.最終,得到一篇文本的特征列表.在詞袋模型(CBOW)中,文檔的特征就是其包含的詞(word).具體步驟如圖3所示.
圖3 Word2Vec實(shí)驗(yàn)步驟
表1 文本《賢者喜宴》高頻詞匯表
以10組高頻詞匯作為訓(xùn)練目標(biāo)輸入Word2Vec model進(jìn)行訓(xùn)練,得出的訓(xùn)練結(jié)果見表2~表5.
表2 Word2Vec模型訓(xùn)練兩條詞的相關(guān)詞表
表3 Word2Vec模型訓(xùn)練兩條詞的相關(guān)詞表
表4 Word2Vec模型訓(xùn)練兩條詞的相關(guān)詞表
表5 Word2Vec模型訓(xùn)練兩條詞的相關(guān)詞表
本文用GOOGLE下開源的Word2Vec工具把藏文文本作為語料進(jìn)行輸入,將文本中的詞利用詞匯的上下文信息轉(zhuǎn)變?yōu)樵~向量,通過用Word2Vec中的CBOW模型算法模型訓(xùn)練得到許多語言規(guī)律,從而得出詞與詞之間的距離即相似度.進(jìn)一步通過高頻詞匯作為輸入,通過訓(xùn)練即可輸出與高頻詞匯距離最近的詞匯,以高頻詞和與其相近的詞匯作為重要信息去預(yù)測文本的語義.此方法為快速掌握長篇語料中的主旨語義起到了快速且便捷的作用,同時(shí)通過訓(xùn)練可以發(fā)現(xiàn)許多有趣的語言規(guī)律,避免了人工翻譯持續(xù)時(shí)間長和主觀判斷的問題.但是,在訓(xùn)練中發(fā)現(xiàn)許多詞匯并未在語境中顯現(xiàn),這給語義預(yù)測帶來了些許誤差.總體來說,基于Word2Vec工具可以有效地預(yù)測文本語義.