一起學習大模型 - 從底層了解Token Embeddings的原理(2)

文章目錄

  • 前言
  • 4. Token Embeddings綜合運用演示
    • 4.1 Token Embeddings處理
    • 4.2 偽代碼示例
    • 4.3 計算cat和dog兩個詞的相近程序
      • 4.3.1 計算方法
      • 4.3.2 例子
      • 4.3.3 輸出結果


前言

上一篇文章了解了Token Embeddings的原理,這一篇,我們一起來綜合運用學到的知識來深入了解Token Embeddings

4. Token Embeddings綜合運用演示

4.1 Token Embeddings處理

假設我們有一個詞匯表包含以下單詞:['cat', 'dog', 'car', 'apple']。如果使用詞袋模型,每個單詞用一個獨立的維度表示,我們會得到如下表示:

cat   -> [1, 0, 0, 0]
dog   -> [0, 1, 0, 0]
car   -> [0, 0, 1, 0]
apple -> [0, 0, 0, 1]

在這種表示中,單詞之間的相似性無法體現出來。相反,如果我們使用詞嵌入(例如,使用預訓練的詞向量模型),每個單詞將被映射到一個高維向量空間:

cat   -> [0.2, 0.1, 0.5, 0.3]
dog   -> [0.3, 0.1, 0.6, 0.4]
car   -> [0.7, 0.8, 0.2, 0.1]
apple -> [0.5, 0.4, 0.9, 0.3]

在這個高維向量空間中,‘cat’ 和 ‘dog’ 由于具有相似的語義,因此它們的向量表示也相對接近。而 ‘car’ 和 ‘apple’ 的向量表示則與它們相距較遠。

4.2 偽代碼示例

下面是一個使用預訓練詞向量的簡單示例,展示如何將單詞映射到高維向量空間:

import numpy as np# 預訓練的詞嵌入示例
pretrained_embeddings = {'cat': [0.2, 0.1, 0.5, 0.3],'dog': [0.3, 0.1, 0.6, 0.4],'car': [0.7, 0.8, 0.2, 0.1],'apple': [0.5, 0.4, 0.9, 0.3]
}# 輸入單詞列表
words = ['cat', 'dog', 'car', 'apple']# 將單詞映射到嵌入向量
word_embeddings = np.array([pretrained_embeddings[word] for word in words])print("Word Embeddings:")
print(word_embeddings)

4.3 計算cat和dog兩個詞的相近程序

4.3.1 計算方法

判斷兩個詞的詞向量是否相近,通常使用向量相似度度量,而不是簡單的差值平方根算法。常見的相似度度量方法有以下幾種:
1) 余弦相似度(Cosine Similarity)

余弦相似度(Cosine Similarity)是一種計算兩個向量之間的相似度的方法,常用于文本相似度的計算。余弦相似度公式可以表示為:

cosine similarity = (A ? B) / (||A|| * ||B||)

其中,A 和 B 分別是兩個向量,A ? B 表示兩個向量的點積(內積),||A|| 和 ||B|| 分別表示兩個向量的范數(長度)。

具體步驟如下:

第1步:計算向量 A 和向量 B 的點積(內積),即 A ? B。
第2步:計算向量 A 的范數,即 ||A||,可以使用歐幾里得范數或其他范數。
第3步:計算向量 B 的范數,即 ||B||。
第4步:將步驟 1 得到的點積除以步驟 2 和步驟 3 得到的范數,即得到余弦相似度。

余弦相似度的取值范圍為 [-1, 1],值越接近 1 表示兩個向量越相似,值越接近 -1 表示兩個向量越不相似,值為 0 表示兩個向量正交(不相關)。

2) 歐氏距離(Euclidean Distance)

歐氏距離,也稱為歐幾里得距離,是一種用于測量兩個點之間的直線距離的度量方法。在二維或多維空間中,歐氏距離可以通過計算兩個點之間的坐標差的平方和的平方根來計算。

歐氏距離的公式為:
d = √((x2 - x1)^2 + (y2 - y1)^2 + … + (xn - x1)^2)

其中,(x1, y1, …, xn) 和 (x2, y2, …, xn) 是兩個點的坐標。歐氏距離可以用來衡量點之間的相似性或差異性。較小的歐氏距離表示點之間更接近,而較大的歐氏距離表示點之間更遠。

歐氏距離在機器學習和數據挖掘中被廣泛應用,特別是在聚類算法、分類算法和回歸算法中。它可以用于計算兩個樣本的相似性,并在模式識別和圖像處理等領域中用于比較特征向量之間的差異。歐氏距離,也稱為歐幾里得距離,是一種用于測量兩個點之間的直線距離的度量方法。在二維或多維空間中,歐氏距離可以通過計算兩個點之間的坐標差的平方和的平方根來計算。

歐氏距離的公式為:
d = √((Y1 - X1)^2 + (Y2 - X2)^2 + … + (Yn - Xn)^2)

其中,(X1, X2, …, Xn) 和 (Y1, Y2, …, Yn) 是兩個點的坐標。歐氏距離可以用來衡量點之間的相似性或差異性。較小的歐氏距離表示點之間更接近,而較大的歐氏距離表示點之間更遠。

歐氏距離在機器學習和數據挖掘中被廣泛應用,特別是在聚類算法、分類算法和回歸算法中。它可以用于計算兩個樣本的相似性,并在模式識別和圖像處理等領域中用于比較特征向量之間的差異。

3) 曼哈頓距離(Manhattan Distance)

曼哈頓距離,也稱為城市塊距離(City Block Distance)或L1距離,是計算兩點之間的距離的一種方法。它是通過計算兩個點在坐標系中每個維度上坐標差的絕對值之和來確定的。在二維平面上,曼哈頓距離可以理解為通過直角路徑從一個點移動到另一個點所需的最小步數。在三維空間中,曼哈頓距離可以理解為通過在x、y、z軸上移動的最小步數。

曼哈頓距離的計算公式為:
d = |x1 - x2| + |y1 - y2|

其中,(x1,y1)和(x2,y2)是兩點的坐標。

曼哈頓距離的特點是,它只考慮了兩點在各個維度上的坐標差,而沒有考慮它們之間的直線距離。因此,曼哈頓距離在描述城市交通路徑、電路板布線等問題時更為合適,因為它更符合實際情況。

在機器學習中,曼哈頓距離常用于聚類算法(如K均值聚類)中,用于度量樣本之間的相似度或距離。它也可以用于特征選擇、異常檢測等任務中。

總結來說,曼哈頓距離是通過計算兩個點在各個維度上坐標差的絕對值之和來度量它們之間的距離。它在城市交通路徑、聚類算法等應用中具有重要意義。

4) 其他相似度度量

還有一些其他相似度度量方法,如杰卡德相似度(Jaccard Similarity)、漢明距離(Hamming Distance)等,具體選擇取決于應用場景和需求。

4.3.2 例子

以下是使用余弦相似度和歐氏距離衡量兩個詞向量相似度的示例代碼:

import numpy as np
from numpy.linalg import norm# 示例詞向量
embedding_cat = np.array([0.2, 0.1, 0.5, 0.3])
embedding_dog = np.array([0.3, 0.1, 0.6, 0.4])# 計算余弦相似度
cosine_similarity = np.dot(embedding_cat, embedding_dog) / (norm(embedding_cat) * norm(embedding_dog))
print(f"Cosine Similarity between 'cat' and 'dog': {cosine_similarity}")# 計算歐氏距離
euclidean_distance = np.linalg.norm(embedding_cat - embedding_dog)
print(f"Euclidean Distance between 'cat' and 'dog': {euclidean_distance}")# 計算曼哈頓距離
manhattan_distance = np.sum(np.abs(embedding_cat - embedding_dog))
print(f"Manhattan Distance between 'cat' and 'dog': {manhattan_distance}")

4.3.3 輸出結果

上述代碼的輸出如下:

Cosine Similarity between 'cat' and 'dog': 0.992
Euclidean Distance between 'cat' and 'dog': 0.141
Manhattan Distance between 'cat' and 'dog': 0.3
  • 余弦相似度:值接近 1,表明 ‘cat’ 和 ‘dog’ 的向量非常相似。
  • 歐氏距離:值較小,表明 ‘cat’ 和 ‘dog’ 的向量距離很近。
  • 曼哈頓距離:值也較小,同樣表明 ‘cat’ 和 ‘dog’ 的向量距離較近。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15826.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15826.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

純干貨分享 機器學習7大方面,30個硬核數據集

在剛剛開始學習算法的時候,大家有沒有過這種感覺,最最重要的那必須是算法本身! 其實在一定程度上忽略了數據的重要性。 而事實上一定是,質量高的數據集可能是最重要的! 數據集在機器學習算法項目中具有非常關鍵的重…

文章解讀與仿真程序復現思路——電力系統保護與控制EI\CSCD\北大核心《計及溫控厭氧發酵和階梯碳交易的農村綜合能源低碳經濟調度》

本專欄欄目提供文章與程序復現思路,具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

網絡域名是什么意思

網絡域名,顧名思義,就是網絡上的名字,類似于現實中的地址或姓名一樣,用來標識網絡上的一個或一組計算機或服務器的位置,以及它們的相應服務資源。網絡域名是互聯網上最基礎的基礎設施之一,是網絡通信的“標…

【mysql】更新操作是如何執行的

現有一張表,建表語句如下: mysql> create table T(ID int primary key, c int);如果要將 ID2 這一行的a字段值加 1,SQL語句會這么寫: mysql> update T set c c 1 where ID 2;上面這條sql執行時,分析器會通過詞…

Nacos 微服務管理

Nacos 本教程將為您提供Nacos的基本介紹,并帶您完成Nacos的安裝、服務注冊與發現、配置管理等功能。在這個過程中,您將學到如何使用Nacos進行微服務管理。下方是官方文檔: Nacos官方文檔 1. Nacos 簡介 Nacos(Naming and Confi…

操作符詳解(上)(新手向)

操作符詳解(上) 一,算術操作符(雙目操作符)1:‘’,‘-’,‘*’2:‘/’,‘%’ 一,單目操作符1:‘’,‘-’2:‘!’3:‘&’4:‘*’5:…

linux 排查java內存溢出(持續更新中)

場景 tone.jar 啟動后內存溢出,假設pid 為48044 排查 1.確定java程序的pid(進程id) ps 或 jps 都可以 ps -ef | grep tone jps -l 2.查看堆棧信息 jmap -heap 48044 3.查看對象的實例數量顯示前30 jmap -histo:live 48044 | head -n 30 4.查看線程狀態 jstack 48044

Spring 事件監聽

參考:Spring事件監聽流程分析【源碼淺析】_private void processbean(final string beanname, fi-CSDN博客 一、簡介 Spring早期通過實現ApplicationListener接口定義監聽事件,Spring 4.2開始通過EventListener注解實現監聽事件 FunctionalInterface p…

Rustdesk客戶端源碼編譯

1.安裝VCPKG windows平臺vcpkg安裝-CSDN博客 2.使用VCPKG安裝: windows平臺vcpkg安裝-CSDN博客 配置VCPKG_ROOT環境變量: 安裝靜態庫: ./vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static 靜態庫安裝成…

【C語言深度解剖】(15):動態內存管理和柔性數組

🤡博客主頁:醉竺 🥰本文專欄:《C語言深度解剖》 😻歡迎關注:感謝大家的點贊評論關注,祝您學有所成! ??💜💛想要學習更多C語言深度解剖點擊專欄鏈接查看&…

I.MX6ULL的官方 SDK 移植實驗

系列文章目錄 I.MX6ULL的官方 SDK 移植實驗 I.MX6ULL的官方 SDK 移植實驗 系列文章目錄一、前言二、I.MX6ULL 官方 SDK 包簡介三、硬件原理圖四、試驗程序編寫4.1 SDK 文件移植4.2 創建 cc.h 文件4.3 編寫實驗代碼 五、編譯下載驗證5.1編寫 Makefile 和鏈接腳本5.2編譯下載 一、…

列表元素添加的藝術:從單一到批量

新書上架~👇全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目錄 一、引言 二、向列表中添加單一元素 1. append方法 2. insert方法 三、向列表中添加批量…

MySQL 存儲過程(實驗報告)

一、實驗名稱: 存儲過程 二、實驗日期: 2024 年5 月 25 日 三、實驗目的: 掌握MySQL存儲過程的創建及調用; 四、實驗用的儀器和材料: 硬件:PC電腦一臺; 配置:內存&#xff0…

Android 配置本地解決下載 Gradle 慢的問題

步驟1 打開項目下 gradle/wrapper/gradle-wrapper.properties 文件。 步驟2 文件內容如下。 #Sat May 25 16:24:00 CST 2024 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin…

SW焊接路徑不能是閉合的

如果是整個圓,就不能作出焊件

【Docker學習】深入研究命令docker exec

使用docker的過程中,我們會有多重情況需要訪問容器。比如希望直接進入MySql容器執行命令,或是希望查看容器環境,進行某些操作或訪問。這時就會用到這個命令:docker exec。 命令: docker container exec 描述&#x…

ssm275寵物醫院管理系統+vue-手把手調試搭建

ssm275寵物醫院管理系統vue-手把手調試搭建 ssm275寵物醫院管理系統vue-手把手調試搭建

Jmeter預習第1天

Jmeter參數化(重點) 本質:使用參數的方式來替代腳本中的固定為測試數據 實現方式: 定義變量(最基礎) 文件定義的方式(所有測試數據都是固定的情況下[死數據],eg:注冊登錄&#xff0…

Linux -- 進程間通信的五種方式

IPC(InterProcess Communication)的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中Socket和Stream支持不同主機上的兩個進程IPC。 管道(Pipes)&#xff1a…

STM32中斷編程入門

文章目錄 一、 理論部分1.中斷系統2.中斷執行流程3.NVIC的基本結構4.EXTI介紹5.AFIO復用IO口 二、實驗目的:學習stm32中斷原理和開發編程方法。使用標準完成以下任務:(一)實驗一 開關控制LED的亮滅1.代碼部分2.運行結果 &#xff…