文字向量化

2021-08-26 20:31:43 字數 2897 閱讀 4316

table of contents概述

word2vec

nnlm

c&wcbow and skip-gram

doc2vec/str2vec

文字表示是自然語言處理中的基礎工作,文字表示的好壞直接影響到整個自然語言處理系統的效能。文字向量化就是將文字表示成一系列能夠表達文字語義的向量,是文字表示的一種重要方式。目前對文字向量化大部分的研究都是通過詞向量化實現的,也有一部分研究者將句子作為文字處理的基本單元,於是產生了doc2vec和str2vec技術。

詞袋(bag of word)模型是最早的以詞語為基礎處理單元的文字項量化方法。該模型產生的向量與原來文字中單詞出現的順序沒有關係,而是詞典中每個單詞在文字中出現的頻率。該方法雖然簡單易行,但是存在如下三個方面的問題:維度災難,無法保留詞序資訊,存在語義鴻溝。

隨著網際網路技術的發展,大量無標註資料的產生,研究重心轉移到利用無標註資料探勘有價值的資訊上來。詞向量(word2vec)技術就是為了利用神經網路,從大量無標註的文字中提取有用的資訊而產生的。

詞袋模型只是將詞語符號化,所以詞袋模型是不包含任何語義資訊的。如何使「詞表示」包含語義資訊是該領域研究者面臨的問題。分布假設(distributional hypothesis)的提出為解決上述問題提供了理論基礎。該假設的核心思想是:上下文相似的詞,其語義也相似。隨後有學者整理了利用上下文表示詞義的方法,這類方法就是有名的詞空間模型(word space model)。通過語言模型構建上下文與目標詞之間的關係,是一種常見的方法,神經網路詞向量模型就是根據上下文與目標詞之間的關係進行建模。

神經網路語言模型(neural network language model,nnlm)與傳統方法估算的不同在於直接通過乙個神經網路結構對n元條件概率進行估計。由於nnlm模型使用低維緊湊的詞向量對上下文進行表示,解決了詞袋模型帶來的資料稀疏、語義鴻溝等問題。另一方面,在相似的上下文語境中,nnlm模型可以**出相似的目標詞,而傳統模型無法做到這一點。例如,如果在預料中a=「小狗在院子裡趴著」出現1000次,b=「小貓在院子裡趴著」出現1次。a和b的唯一區別就是狗和貓,兩個詞無論在語義還是語法上都相似。根據頻率來估算概率p(a)>>p(b),這顯然不合理。如果採用nnlm計算p(a)~p(b),因為nnlm模型採用低維的向量表示詞語,假定相似的詞其詞向量也相似。

c&w(context&word,上下文和目標詞)主要目的並不在於生成乙份好的詞向量,甚至不想訓練語言模型,而是要用這份詞向量去完成 nlp 裡面的各種任務,比如詞性標註、命名實體識別、短語識別、語義角色標註等等。nnlm模型的目標是構建乙個語言概率模型,而c&w則是以生成詞向量為目標的模型。c&w模型並沒有採用語言模型去求解詞語上下文的條件概率,而是直接對n元短語打分,這就省去了nnlm模型中從隱藏層到輸出層的權重計算,大大降低了運算量。其核心機理是:如果n元短語在語料庫中出現過,那麼模型會給該短語打高分;如果是未出現在語料庫中的短語則會得到較低的評分。

為了更高效地獲取詞向量,研究者在nnlm和c&w模型的基礎上保留其核心部分,得到了cbow(continuous bag of words)模型和skip-gram模型。

cbow模型使用一段文字的中間詞作為目標詞,去掉了隱藏層,大幅度提公升了計算速率。此外,cobw模型還使用上下文各詞的詞向量的平均值替代nnlm模型各個拼接的詞向量。即根據上下文來**當前詞語的概率,且上下文所有詞對當前詞出現概率的影響權重是一樣的。skip-gram模型同樣沒有隱藏層,與cbow模型輸入上下文詞的平均詞向量不同,它時從目標詞w的上下文中選擇乙個詞,將其詞向量組成上下文的表示。即根據當前詞語來**上下文概率。

doc2vec技術存在兩種模型--distributed memory(dm)和distributed bag of words(dbow),分別對應word2vec技術裡的cbow和skip-gram模型。doc2vec 相對於 word2vec 不同之處在於,在輸入層,增添了乙個新句子向量paragraph vector,paragraph vector 可以被看作是另乙個詞向量,它扮演了乙個記憶,詞袋模型中,因為每次訓練只會擷取句子中一小部分詞訓練,而忽略了除了本次訓練詞以外該句子中的其他詞,這樣僅僅訓練出來每個詞的向量表達,句子只是每個詞的向量累加在一起表達的。正如上文所說的詞袋模型的缺點,忽略了文字的詞序問題。而 doc2vec 中的 paragraph vector 則彌補了這方面的不足,它每次訓練也是滑動擷取句子中一小部分詞來訓練,paragraph vector 在同乙個句子的若干次訓練中是共享的,所以同一句話會有多次訓練,每次訓練中輸入都包含 paragraph vector。它可以被看作是句子的主旨,有了它,該句子的主旨每次都會被放入作為輸入的一部分來訓練。這樣每次訓練過程中,不光是訓練了詞,得到了詞向量。同時隨著一句話每次滑動取若干詞訓練的過程中,作為每次訓練的輸入層一部分的共享 paragraph vector,該向量表達的主旨會越來越準確。

dm模型示意圖

dbow模型示意圖

那麼 doc2vec 是怎麼**新的句子 paragraph vector 呢?其實在**新的句子的時候,還是會將該 paragraph vector 隨機初始化,放入模型中再重新根據隨機梯度下降不斷迭代求得最終穩定下來的句子向量。不過在**過程中,模型裡的詞向量還有投影層到輸出層的 softmax weights 引數是不會變的,這樣在不斷迭代中只會更新 paragraph vector,其他引數均已固定,只需很少的時間就能計算出帶**的 paragraph vector。

文字向量化

文字向量化,就是把文字轉化為向量形式。這裡用兩種方式實現本文向量,一種是tf方式,一種是tf idf方式,且這裡向量的長度就是字典的長度。計算兩個向量余弦相似度import math defcount cos similarity vec 1,vec 2 if len vec 1 len vec 2...

文字資訊向量化

from sklearn.feature extraction.text import countvectorizer countvec countvectorizer min df 2 兩個以上文件出現的才保留 文件的詞與詞之間用空格分隔 x countvec.fit transform 我們 都...

文字向量化筆記(二)

神經網路語言模型是經典的三層前饋神經網路結構,其中包括三層 輸入層 隱藏層和輸出層。為解決詞袋模型資料稀疏問題,輸入層的輸入為低維度的 緊密的詞向量,輸入層的操作就是將詞序列中 的每個詞向量按順序拼接,在輸入層得到式 7.2 的x 後,將x 輸入隱藏層得到h 再將h 接人輸出層得到最後的輸出變數y ...