小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

讓計算機理解人類語言:詞向量的構建與應用

 西北望msm66g9f 2025-01-28

近兩年大預言模型很火,大預言模型可以視為是自然語言處理領域的一大應用。自然語言處理(Natural Language Processing, NLP)其核心目標是使計算機能夠理解、生成和處理人類語言。語言的基礎是詞語,那么如何讓機器來理解詞語呢?這就關系到詞的表示,也就是詞向量。

在NLP中,詞向量(word vector)是非常重要的概念,它通過將詞語表示為多維向量來捕捉詞語的語義信息。構造詞向量的的方法有很多,比如通過神經(jīng)網(wǎng)絡進行構建,不過本文將介紹一種直觀的構建詞向量的方法,并通過數(shù)學模型和具體案例進行分析和說明。

詞向量的基本概念

詞向量是用于表示詞語在語義空間中位置的向量。通過將詞語轉換為向量,我們可以在數(shù)學上處理詞語的相似性和關系。詞向量的核心思想是“可以通過它周圍的詞語了解一個單詞” ('You shall know a word by the company it keeps'),也就是說一個詞的意義可以通過它在文本中與其他詞的共現(xiàn)關系來捕捉。

數(shù)學模型

下面我介紹的構建詞向量的過程主要是基于詞語間的共現(xiàn)關系,分為以下幾個步驟:

  1. 語料庫準備:首先需要一個大規(guī)模的文本語料庫,用于統(tǒng)計詞語的共現(xiàn)關系。
  2. 上下文窗口:選擇一個合適的上下文窗口大?。ㄍǔ?到10個詞),用于確定哪些詞語是目標詞的上下文詞。
  3. 共現(xiàn)矩陣:構建一個共現(xiàn)矩陣,矩陣的每一行代表一個目標詞,每一列代表一個上下文詞,矩陣中的值表示目標詞與上下文詞在文本中共現(xiàn)的頻率。
  4. 降維處理:使用降維算法(如SVD、PCA等)將高維的共現(xiàn)矩陣轉換為低維的詞向量表示。

假設我們有一個包含 個詞語的詞匯表 ,我們可以構建一個 的共現(xiàn)矩陣 ,其中 表示詞語 在上下文窗口中的共現(xiàn)頻率。

然后我們通過降維算法將共現(xiàn)矩陣 轉換為詞向量矩陣 ,其中每一行 表示詞語 的向量表示。常用的降維算法包括奇異值分解(SVD)和主成分分析(PCA)等。

案例分析

我們通過一個具體的例子來說明構建詞向量的過程。

  1. 語料庫準備:假設我們的語料庫是以下簡短的文本:

    I love machine learning. 
    Machine learning is fun. 
    I love coding.

    我們的詞匯表 包含以下詞語:I, love, machine, learning, is, fun, coding。

  2. 上下文窗口:選擇上下文窗口大小為2,即考慮目標詞前后各2個詞。

  3. 共現(xiàn)矩陣:統(tǒng)計詞語在上下文窗口中的共現(xiàn)頻率,得到以下共現(xiàn)矩陣

  4. 降維處理:使用奇異值分解(SVD)對共現(xiàn)矩陣 進行降維處理。SVD將矩陣 分解為三個矩陣的乘積:,其中 是正交矩陣, 是對角矩陣。通過截取前 個奇異值,可以得到低維詞向量矩陣

    如果設定降維后的維度為2,我們可以得到以下詞向量:

圖片

為了驗證我們構建的詞向量的有效性,我們可以計算詞語之間的余弦相似度。余弦相似度用于衡量兩個向量之間的相似性,計算公式為:

其中, 表示向量 的點積, 分別表示向量 的模。

我們計算以下詞語對之間的余弦相似度:

  1. lovecoding
  2. machinelearning
  3. isfun
import numpy as np

# 定義降維后的詞向量矩陣
word_vectors = np.array([
    [1.51499668-1.4173672],
    [1.876989461.68604424],
    [1.668657890.19649234],
    [1.49526816-0.93713897],
    [1.085383040.17374271],
    [0.720992040.30320536],
    [0.52440038-0.66966223]
])

# 詞匯表
words = ['I''love''machine''learning''is''fun''coding']

# 計算余弦相似度的函數(shù)
def cosine_similarity(vec1, vec2):
    dot_product = np.dot(vec1, vec2)
    norm_vec1 = np.linalg.norm(vec1)
    norm_vec2 = np.linalg.norm(vec2)
    return dot_product / (norm_vec1 * norm_vec2)

# 計算特定詞語對之間的余弦相似度
pairs = [('love''coding'), ('machine''learning'), ('is''fun')]
for pair in pairs:
    idx1 = words.index(pair[0])
    idx2 = words.index(pair[1])
    similarity = cosine_similarity(word_vectors[idx1], word_vectors[idx2])
    print(f''{pair[0]}' 和 '{pair[1]}' 之間的余弦相似度: {similarity:.4f}')

運行結果:

'love' 和 'coding' 之間的余弦相似度: -0.0675
'machine' 和 'learning' 之間的余弦相似度: 0.7794
'is' 和 'fun' 之間的余弦相似度: 0.9715

從結果可以看出,machinelearning 以及 isfun 的相似度較高,而 lovecoding 的相似度相對較低。當然因為我們現(xiàn)在的文本(語料庫)比較小,這里的相似關系或許不那么明顯。我們可以進行大語料庫的試驗。

來看看與我們對這些詞語在語義上的預期是否是一致的,進而驗證我們構建的詞向量能否在一定程度上捕捉到了詞語之間的語義關系。

如果大家想要了解更多關于詞向量的內(nèi)容,可以進一步學習以下概念和方法:了解基于神經(jīng)網(wǎng)絡的Word2Vec模型和斯坦福大學提出的GloVe模型,這兩者都是經(jīng)典的詞向量構建方法。還有Facebook AI研究團隊開發(fā)的FastText模型,它通過子詞生成向量表示。Google的BERT模型和Transformer架構,這些是現(xiàn)代NLP的重要進展。

學習如何使用t-SNE或PCA對詞向量進行降維和可視化。研究上下文嵌入(如ELMo、BERT、GPT),它們根據(jù)上下文動態(tài)生成詞語的向量表示。這些方法和工具可以幫助大家更全面地理解和應用詞向量技術。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多