AI - 自然語言處理(NLP) - part 2 - 詞向量 - 教程
目錄
NLP(Natural Language Processing,自然語言處理)
自然語言處理是人工智能的一個子領域,關注計算機如何理解、解釋和生成人類語言。
人類與計算機溝通的橋梁。就是NLP的核心任務就是為人類的語言編碼并解碼,
在上一篇文章中總體回顧了NLP的演進過程,接下來深入了解一下每一個階段產生了哪些具體的工藝。
首先來看NLP的基石:詞向量
Word Vector/Word Embedding(詞向量/詞嵌入)
詞向量的出現是現代NLP騰飛的基石,它徹底改變了計算機處理自然語言的方式。
詞向量(Word Vector)通常也叫詞嵌入(Word Embedding),是一種尋找詞和詞之間相似性的NLP技術,它把詞匯各個維度上的特征用數值向量進行表示,利用這些維度上特征的相似程度,就可以判斷出哪些詞和哪些詞語義更接近。
什么是詞?
“Gram”這個詞來源于希臘語的詞根,意為“字母”或“寫作”。在N-Gram模型中,它表示文本中的一個元素,“N-Gram”指長度為N的連續元素序列。
這里的“元素”在英文中能夠指單詞,也行指字符,有時還行指“子詞”(Subword);而在中文中,可以指詞或者短語,也可以指字。
例如中文語句“我愛學習”可以拆分為“我”,“愛”,“學習”
如何分詞?
那么在實際應用中,到底應該把語料庫拆分成什么元素呢?是字還是詞?
通過如何分詞需要具體情況具體分析。在自然語言處理中,一個很關鍵的預處理環節就是按照要求對語料庫,也就是自然語言數據集中的句子進行分詞,分詞之后,文本序列就形成了能夠輸入語言模型的一個個“元素”(或者稱為“單元”),這個元素的英文名叫作“Token”。
Token翻譯成中文,常常詞不達意。有人叫它“令牌”,有人叫它“子詞”或者“分詞”。總而言之,當你看到Token,就應該知道,我們已經通過分詞工具,把語料,也就是一個個句子,切成了能夠被語言模型讀取并處理的一個個元素。
語料庫
語料庫是一個按照特定標準收集和組織的、電子形式的、海量文本或語音數據的集合。您可以把它想象成一個為語言研究或模型訓練而專門建立的 “語言數據庫” 或 “語言素材倉庫”。
語料庫的關鍵特征
- 電子化:必須是計算機可讀的格式(如 .txt, .jsonl, .xml 等),便于機器處理。
- 代表性:語料庫的構建通常有明確目的,其內容需要代表某一特定語言、領域或文體(如新聞語料庫、學術論文語料庫、口語對話語料庫)。
- 規模性:通常容量巨大,從數百萬到數千億甚至萬億個詞匯,為大語言模型提供充足的學習素材。
- 基礎。高質量的語料庫通常具備元資料 和標注,使其更具價值。就是結構化:原始的純文本只
- 元數據:描述素材本身的數據,如文本來源、作者、出版日期、語言、領域等。
- 標注:對文本內容進行的額外加工,如詞性標注、語法結構分析、實體識別等。
語料庫的來源與類型
類型 描述 示例 網頁內容 最大的來源,通過爬蟲獲取,內容多樣但質量參差不齊。 Common Crawl(一個公開的網頁爬蟲數據集) 書籍與期刊 質量高,語言規范,邏輯性強,是深層次知識的關鍵來源。 Google Books, 學術論文庫 百科全書 事實準確,結構化程度高。 維基百科 代碼倉庫 用于訓練模型的代碼理解和生成能力。 GitHub 上的公開代碼 對話與社交數據 援助模型學習日常、口語化的表達方式。 Reddit, 論壇帖子,客服對話記錄(需脫敏) 新聞文章 語言規范,時效性強。 各大新聞網站的存檔 語料庫是大語言模型的 “教科書” 和 “訓練食糧”。沒有海量、高質量的語料庫,就不可能訓練出強大的大語言模型。
語料庫 是現代自然語言處理和人工智能的基石。它不僅是大語言模型學習和獲取知識的唯一源泉,其規模、質量和多樣性也直接決定了模型能力的天花板。大家與AI的每一次對話,背后都是它對浩瀚語料庫中學習到的模式和知識的綜合運用。
向量
在最簡單的層面上,一個向量就是一個既有大小又有方向的量。
幾何表示
在幾何中,我們用一個有向線段來表示向量。
長度:表示向量的大小(模)。
箭頭:表示向量的方向。
我們通常用一個小寫字母加上箭頭來表示,如a ? \vec{a}a。
坐標表示(代數表示)
- 在二維平面:
v ? = ( v x , v y ) \vec{v} = (v_x, v_y)v=(vx?,vy?)- 在三維空間:
v ? = ( v x , v y , v z ) \vec{v} = (v_x, v_y, v_z)v=(vx?,vy?,vz?)- 在n維空間:
v ? = ( v 1 , v 2 , … , v n ) \vec{v} = (v_1, v_2, \dots, v_n)v=(v1?,v2?,…,vn?)
向量的核心要素
- 模(長度)
向量 v ? = ( v 1 , v 2 , … , v n ) \vec{v} = (v_1, v_2, \dots, v_n)v=(v1?,v2?,…,vn?) 的模:
∥ v ? ∥ = x 2 + y 2 \|\vec{v}\| = \sqrt{x^2 + y^2}∥v∥=x2+y2?- 方向
對于二維向量v ? = ( v x , v y ) \vec{v} = (v_x, v_y)v=(vx?,vy?),其方向角 θ \thetaθ 滿足:
tan ? θ = v y v x \tan\theta = \frac{v_y}{v_x}tanθ=vx?vy??
什么是詞向量?
核心思想:將人類語言中的詞,映射到計算機能夠理解的稠密向量上。
- 傳統途徑(如One-Hot Encoding):
- 一個獨立的、極其冗長的二進制向量。就是每個詞
- 例如:國王 = [1, 0, 0, 0, …],王后 = [0, 1, 0, 0, …],男人 = [0, 0, 1, 0, …]。
- 缺點:
- 維度災難:詞匯表有多大,向量就有多長,計算效率極低。
- 詞匯鴻溝:所有向量兩兩正交,無法表達任何詞與詞之間的語義關系。計算機認為“國王”和“王后”的距離,與“國王”和“西瓜”的距離是一樣的。
詞向量途徑(如Word2Vec):
- 每個詞是一個相對短小的稠密向量(例如50維、300維)。
- 例如:國王 ≈ [0.15, -0.82, …, 0.47],王后 ≈ [0.16, -0.81, …, 0.48],男人 ≈ [0.08, -0.71, …, 0.32]。
- 優點:
- 語義編碼:向量中蘊含了詞的語義和語法信息。
- 通過可計算的關系:詞與詞之間的關系能夠通過向量的算術運算來體現。
詞向量的核心特性:語義關系
詞向量最神奇的地方在于它捕捉到了語言的規律。
經典的“國王 - 男人 + 女人 ≈ 王后”例子:
該例子說明,詞向量空間不僅是一個詞表,更是一張語義地圖,其中方向和距離都具有實際意義。
Word embedding(詞向量)
通過一種用來表示單詞語義的數學表達方式。通俗地說,它能夠將每個單詞映射到一個多維空間中的一個向量,使得相似意義的單詞在這個向量空間中距離較近,而不相關的單詞距離較遠。就是詞向量
基于Word2Vec算法。這種算法通過分析大量文本數據中的上下文關系來學習得到詞向量。具體來說,它根據單詞在其上下文中出現的頻率和位置來確定單詞的向量表示,使得在具有相似上下文的單詞之間存在相似的向量關系。就是詞向量的生成方式有很多種,其中比較常用的方法
通過使用詞向量可能帶來很多好處。首先,它可以將單詞從離散的符號表示轉換為連續的向量表示,方便計算機進行處理和理解。其次,詞向量能夠捕捉到單詞的語義信息,使得計算機能夠更好地理解單詞之間的關系和含義。這對于自然語言處理任務如文本分類、信息檢索和機器翻譯等都非常有幫助。
總的來說,詞向量是一種用來表示單詞語義的數學模型,通過將單詞映射到一個多維向量空間中,使得相似意義的單詞在向量空間中距離較近。這種表示方式可以提高自然語言處理任務的效果,并且在實際應用中得到廣泛應用。
詞向量和詞嵌入
詞向量這個術語通常用于描述具體的向量表示,即一個詞對應的實際數值向量。例如,大家可以說“'cat’這個詞的詞向量是一個300維的向量”。
把詞轉化為向量,從而捕捉詞與詞之間的語義和句法關系,使得具有相似含義或相關性的詞語在向量空間中距離較近。就是詞向量的內涵詞嵌入這個術語通常用于描述將詞映射到向量空間的過程或表示方式。它通常包括訓練算法和生成的詞向量空間。例如,我們可以說“我們使用Word2Vec算法來生成詞嵌入”。
詞向量技術演進
- Bag-of-Words
- Distributed Representation
- Word2Vec (2013, Google)
- 核心思想:一個詞的含義可以由它周圍經常出現的詞(上下文)來定義。
- 兩種訓練方式:
- CBOW:借助上下文詞來預測中心詞。
- Skip-gram:利用中心詞來預測上下文詞。
- GloVe (2014, Stanford)
核心思想:結合了全局統計信息(整個語料庫的詞共現矩陣)和局部上下文窗口的優點。 - FastText (2016, Facebook)
- 核心思想:將詞表示為子詞(n-gram)的集合。例如,“apple”由 “app”, “ppl”, “ple” 等表示。
- 巨大優勢:允許生成未登錄詞的向量,對于形態豐富的語言(如德語、土耳其語)和拼寫錯誤非常有效。
Bag-of-Words(詞袋)
詞袋模型是一種簡單的文本表示方法,它將文本中的詞看做一個個獨立的個體,不考慮他們在句子中的順序,只關心每個詞出現的頻次。
Bag-of-Words則是一種用于文本表示的技術,它將文本看作由單詞構成的無序集合,依據統計單詞在文本中出現的頻次來表示文本。因此,Bag-of-Words主要用于文本分類、情感分析、信息檢索等自然語言處理任務中。
- 基于詞頻將文本表示為一個向量,其中每個維度對應詞匯表中的一個單詞,其值為該單詞在文本中出現的次數。就是Bag-of-Words
- Bag-of-Words忽略了文本中的詞序信息,只關注詞頻。這使得詞袋模型在某些任務中表現出色,如主題建模和文本分類,但在需要捕捉詞序信息的任務中表現較差,如機器翻譯和命名實體識別。
- Bag-of-Words可能會導致高維稀疏表示,因為文本向量的長度取決于詞匯表的大小。為解決這個問題,可以使用降維技術,如主成分分析(Principal Component Analysis,PCA)或潛在語義分析(Latent Semantic Analysis,LSA)。
Bag-of-Words模型的構建過程如下:
- 構建語料庫
例如有下數據集:[“我愛學習”,“我討厭學習”,“我非常非常愛學習”] - 給句子分詞
例如“我愛學習”,分詞結果為[“我”,“愛”,“學習”] - 創建詞匯表
家所有語句的分詞結果合并為一個詞匯表:{“我”:3,“愛”:2,“學習”:3,“討厭”:1,“非常”:2},數字為詞頻 - 生成詞袋表示
為語料庫中的每一個語句生成一個向量表示:
[[1,1,1,0,0],
[1,0,1,1,0],
[1,1,1,0,2]]
數字表示詞頻 - 計算余弦相似度
計算余弦相似度(Cosine Similarity),衡量兩個文本向量的相似性。
余弦相似度可用來衡量兩個向量的相似程度。
它的值在-1到1之間,值越接近1,表示兩個向量越相似;值越接近-1,表示兩個向量越不相似;當值接近0時,表示兩個向量之間沒有明顯的相似性。
余弦相似度的計算公式如下:
c o s i n e _ s i m i l a r i t y ( A , B ) = A ? B ∥ A ∥ ∥ B ∥ cosine\_similarity(A, B) = \frac{A \cdot B}{\|A\| \|B\|}cosine_similarity(A,B)=∥A∥∥B∥A?B?
其中,A ? B A \cdot BA?B表示向量A和向量B的點積,∥ A ∥ \|A\|∥A∥ 和 ∥ B ∥ \|B\|∥B∥分別表示向量A和向量B的范數(長度)。在文本處理中,大家通常使用余弦相似度來衡量兩個文本在語義上的相似程度。對于詞袋表示的文本向量,應用余弦相似度計算文本之間的相似程度可以減少句子長度差異帶來的影響。
點積
向量點積,也稱為數量積或內積,是向量運算中一種十分重要的運算。它的結果是一個標量(一個數字),而不是一個向量。
點積有兩種核心的定義方式:代數定義和幾何定義 。它們是等價的,但分別從不同角度幫助我們理解點積。
代數定義
對于兩個n維向量,它們的點積是各對應分量乘積之和。
二維向量:
a ? ? b ? = a 1 b 1 + a 2 b 2 \vec{a} \cdot \vec{b} = a_1 b_1 + a_2 b_2a?b=a1?b1?+a2?b2?
三維向量:
a ? ? b ? = a 1 b 1 + a 2 b 2 + a 3 b 3 \vec{a} \cdot \vec{b} = a_1 b_1 + a_2 b_2 + a_3 b_3a?b=a1?b1?+a2?b2?+a3?b3?
n維向量
a ? ? b ? = ∑ i = 1 n a i b i = a 1 b 1 + a 2 b 2 + ? + a n b n \vec{a} \cdot \vec{b} = \sum_{i=1}^{n} a_i b_i = a_1 b_1 + a_2 b_2 + \cdots + a_n b_na?b=∑i=1n?ai?bi?=a1?b1?+a2?b2?+?+an?bn?
幾何定義
從幾何角度看,點積描述了兩個向量在方向上的相似程度。
給定兩個向量a ? \vec{a}a 和 b ? \vec{b}b,它們的夾角為 θ,則點積定義為:
a ? ? b ? = ∣ a ? ∣ ∣ b ? ∣ cos ? θ \vec{a} \cdot \vec{b} = |\vec{a}| |\vec{b}| \cos\thetaa?b=∣a∣∣b∣cosθ
Word2Vec(Word to Vector, W2V)
,會將這個詞和它周圍的一些詞語一起學習,這就使得具有相似語義的詞在向量空間中靠得更近。這樣,我們就可以經過向量之間的距離來度量詞之間的相似性了。就是最著名的詞向量學習算法叫作Word2Vec(Word to Vector, W2V),它的核心思想是在將詞映射到向量空間
Word2Vec采用了一種高效的方法來學習詞匯的連續向量表示,這種辦法將詞匯表中的每個詞都表示成固定長度的向量,從而使在大規模數據集上進行訓練變得可行。
稀疏向量
在稀疏向量中,大部分元素的值為零,只有少數元素的值非零。稀疏向量通常用于表示高維資料,其中許多維度的值為零,詞袋模型就是一種稀疏向量表示。在詞袋模型中,每個文檔用一個向量表示的長度等于詞匯表中的詞數量,向量的每個元素表示相應問在又檔中出現的次物流的由于大部分單詞可能不會出現在給定文檔中,因此詞袋模型中的回重通常是稀的而我們常用的One-Hot編碼,當然更是稀疏了,每一個One-Hot編碼中,有大量的0,而只有一個1。
稠密向量
稠密向量中的元素大部分為非零值。稠密向量通常具有較低的維度,同時能夠捕捉到更豐富的信息。Word2Vec就是一種典型的稠密向量表示。稠密向量能夠捕捉詞與詞之間的語義和語法關系,使得具有相似含義或相關性的詞在向量空間中距離較近。
具體來說,Word2Vec有兩種主要建立方式
- CBOW(Continuous Bag of Words,有時翻譯為“連續詞袋”)模型
- Skip-Gram(有時翻譯為“跳字”)模型。
CBOW模型通過給定上下文詞(也叫“周圍詞”)來預測目標詞(也叫“中心詞”);而Skip-Gram模型則相反,通過給定目標詞來預測上下文詞。這兩個模型都是依據訓練神經網絡來學習詞向量的。在訓練過程中,我們通過最小化預測詞和實際詞之間的損失來學習詞向量。當訓練達成后,詞向量可以從神經網絡的權重中提取出來。
| 模型 | 訓練目標 | 結構 | 性能 |
|---|---|---|---|
| Skip-Gram模型 | 給定一個目標詞,預測上下文詞。因此,它的訓練目標是在給定目標詞的情況下,使上下文詞出現的條件概率最大化 | 模型首先將目標詞映射到嵌入向量空間,然后從嵌入向量空間映射回詞匯表空間以預測上下文詞的概率分布 | 由于其目標是預測多個上下文詞,其在捕捉稀有詞和更復雜的詞語關系方面表現得更好 |
| CBOW 模型 | 給定上下文詞,預測目標詞。因此,它的訓練目標是在給定上下文詞的情況下,使目標詞出現的條件概率最大化 | 模型首先將上下文詞映射到嵌入向量空間,然后從嵌入向量空間映射回詞匯表空間以預測目標詞的概率分布 | 由于其目標是預測一個目標詞,其在訓練速度和捕捉高頻詞語關系方面表現得更好 |
一種容易的分布式表示方法,它將文本表示為單詞計數或權重的向量。這種表示方法捕獲了文本中單詞的頻率信息,但忽略了單詞的順序和上下文關系。就是Bag-of-Words
因此,Bag-of-Words的表達能力較弱,特有是不太善于捕獲單詞之間的語義關系。
一種更先進的分布式表示方法,它通過學習單詞在上下文中的共現關系來生成低維、密集的詞向量。此種表示方法能夠捕獲單詞之間的語義和語法關系,并在向量空間中體現這些關系。與Bag-of-Words相比,Word2Vec的表達能力更強,計算效率更高。就是Word2Vec
| 特點 | Bag-of-Words | Word2Vec |
|---|---|---|
| 稀疏性 vs 密集性 | 高維稀疏向量,計算效率低 | 低維密集向量,計算效率更高 |
| 上下文無關vs上下文敏感 | 忽略上下文信息 | 能夠捕獲單詞之間的上下文關系 |
| 語義關系 | 無法捕捉單詞之間的語義關系 | 能捕獲單詞之間的語義和語法關系 |
| 參數共享 | 每個單詞的向量表示都是唯一的 | 參數共享,能夠減少參數數量,提高泛化能力 |
大家可以將Bag-of-Words和Word2Vec看作分布式表示的演進過程中的兩個重要階段,其中Word2Vec科技更先進,表達能力更強。從詞袋模型到詞向量的發展,表明自然語言處理領域在表示單詞和處理語義方面取得了要緊進展。
因為Word2Vec生成的詞向量能夠捕捉到單詞之間的語義和語法關系。就是Word2Vec對整個自然語言處理領域產生了巨大的影響。后來的許多詞嵌入辦法,如GloVe和fastText這兩種被廣泛應用的詞向量,都受到了Word2Vec的啟發。如今,Word2Vec已經成為詞嵌入領域的基石。它的出現使得更復雜的NLP任務,如文本分類、情感分析、命名實體識別、機器翻譯等,處理起來更輕松。這主要
Word2Vec的局限性。
固定的。Word2Vec此種“在全部語料上一次習得,然后反復使用”的詞向量被稱為靜態詞向量。它為每個單詞生成一個固定大小的向量,這限制了模型捕捉詞義多樣性的能力。在自然語言中,許多里問具有多種含義,Word2Vec無法為這些不同的含義生成多個向量表示。就是詞向量的大小
通過無法處理未知詞匯。Word2Vec只能為訓練過程中出現過的單詞生成詞向趣對于未知或低頻詞匯,Word2Vec無法生成合適的向量表示。即使能夠依據拼接詞的等方法來克服這個問題,但這并非Word2Vec本身的效果。
值得注意的是,Word2Vec本身并不是一個完善的語言模型,源于語言模型的目標是根據上下文預測單詞,而Word2Vec主導關注生成有意義的詞向量。盡管CBOW和Skip-Gram 模型在訓練過程中學習了單詞之間的關系,但它們并未直接對整個句子的概率分布進行建模。而后來的模型,如基于循環神經網絡、長短期記憶網絡和Transformer的模型,則依據對上下文進行建模,更好地捕捉到了語言結構,從而成為更為強大的語言模型。

浙公網安備 33010602011771號