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