開啟一切可能性的鑰匙,8K Text Embedding Model

更新於 2024/10/30閱讀時間約 20 分鐘

前言:

要檢查兩段長篇文字,內容是否雷同,長久以來困擾著大家,沒有好的嵌入模型,會耗費大量人力,需要對長篇文檔進行人工閱讀然後人工分類。本文除了展示如何能完美的解決這個痛點以外,也提供一些延伸應用思路,學習CP值很高。期待你能從本文取得許多新的應用思路與應用潛力!

技術說明:

嵌入模型能藉由計算抽取出一段文字的特徵值向量 [a1,a2,...an],每一個a1~an都相當於是投影在抽取出來的特徵向量上的投影長度,藉由比較兩段文字各自的嵌入特徵值向量,能夠快速得知其內容是否雷同。

本篇介紹的Text Embedding Model基於 Bert 架構,支援 Attention with Linear Biases (ALiBi) 的 symmetric bidirectional variant,允許用較短的序列長度訓練,用更長的序列長度來測試。

使用 512 序列長度進行訓練,可以推斷到 8196序列長度(甚至更長),當需要處理長文檔時,這個模型特別好用。

用途包括長文檔檢索、語義文本相似性、文本重新排名、推薦、RAG 和 LLM 的生成搜索,等等,可以拿來做各種應用!

該模型的Backbone是在 C4 數據集上預先訓練的,然後進一步在 Jina AI 的超過 4 億對正負樣本上進行訓練。這些句子對來自各種領域,通過徹底的清理與精心選擇。模型具有 1.37 億參數的標準大小,可以實現快速推斷,建議使用單個 GPU 進行推斷。

簡單用例嘗試:

測試語意非常相近的例子

預計要得到很高的Cosine Similarity分數

(為了簡化展示篇幅,這邊測試的皆是英文單句,其實可以輸入兩篇長篇文章做比對)

How is the weather today? vs. What is the current weather like today?

這兩句問的都是今天的天氣,得到Cosine相似度分數0.934的高分 (分數介於0~1之間)

順便得到Embedding向量的長度為768

from transformers import AutoModel
from numpy.linalg import norm
import numpy as np

cos_sim = lambda a, b: (a @ b.T) / (norm(a) * norm(b))
model = AutoModel.from_pretrained(
"jinaai/jina-embeddings-v2-base-en", trust_remote_code=True
) # trust_remote_code is needed to use the encode method
embeddings = model.encode(["How is the weather today?",
"What is the current weather like today?"])

print(np.shape(embeddings[0]))
print(cos_sim(embeddings[0], embeddings[1]))

output:

(768,)
0.9341313

測試語意不相干的例子

預計要得到很低的Cosine Similarity分數

(為了簡化展示篇幅,這邊測試的皆是英文單句,其實可以輸入兩篇長篇文章做比對)

I drew a dog. vs. The storm is coming.

這兩句話,表達完全不相干的語意,經過計算得到的分數較低,0.7以下顯示這兩句話相關性非常低。

embeddings = model.encode(["I drew a dog.", 
"The storm is coming."])
print(cos_sim(embeddings[0], embeddings[1]))

output:

0.6212821

打造推薦系統:

範例中的Keras Embedding layer輸入必須是int數字,如果輸入是電影名稱與分類的文字描述細節,則可以用model.encode來做嵌入編碼,把關於電影的描述轉成768維度的特徵值向量,然後和原本的Used_Id Embedding做內積,充分活用以下範例,可以打造商品推薦系統。至於資料集方面,要想辦法蒐集使用者的偏好度,可以藉由發問卷來達成。

model = AutoModel.from_pretrained(
"jinaai/jina-embeddings-v2-base-en", trust_remote_code=True
) # trust_remote_code is needed to use the encode method
embeddings = model.encode(movie_input)
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from tensorflow import keras
from keras.layers import Input, Embedding, Flatten, Dot, Dense
from keras.models import Model
from zipfile import ZipFile
from pathlib import Path

# Download the actual data from http://files.grouplens.org/datasets/movielens/ml-latest-small.zip"
# 使用 ratings.csv 檔案
movielens_data_file_url = (
"http://files.grouplens.org/datasets/movielens/ml-latest-small.zip"
)
movielens_zipped_file = keras.utils.get_file(
"ml-latest-small.zip", movielens_data_file_url, extract=False
)
keras_datasets_path = Path(movielens_zipped_file).parents[0]
movielens_dir = keras_datasets_path / "ml-latest-small"

# 只有在沒有DATA的時候才會進行下載
if not movielens_dir.exists():
with ZipFile(movielens_zipped_file, "r") as zip:
# 解壓縮
print("Extracting all the files now...")
zip.extractall(path=keras_datasets_path)
print("Done!")

ratings_file = movielens_dir / "ratings.csv"

# 取得電影評分數據
data = pd.read_csv(ratings_file)
print("Columns of data: ", data.columns)

# 創建用户和電影的索引
user_ids = data["userId"].unique()
movie_ids = data["movieId"].unique()

user_id_map = {user_id: i for i, user_id in enumerate(user_ids)}
movie_id_map = {movie_id: i for i, movie_id in enumerate(movie_ids)}

data["user"] = data["userId"].map(user_id_map)
data["movie"] = data["movieId"].map(movie_id_map)

# 劃分訓練還有測試集
train, test = train_test_split(data, test_size=0.2, random_state=42)

# 創建模型
EMBEDDING_SIZE = 768
user_input = Input(shape=(1,))
user_embedding = Embedding(len(user_ids), EMBEDDING_SIZE)(user_input)
user_embedding = Flatten()(user_embedding)

movie_input = Input(shape=(1,))
movie_embedding = Embedding(len(movie_ids), EMBEDDING_SIZE)(movie_input)
movie_embedding = Flatten()(movie_embedding)

dot_product = Dot(axes=1)([user_embedding, movie_embedding])
model = Model(inputs=[user_input, movie_input], outputs=dot_product)

model.compile(optimizer="adam", loss="mean_squared_error")

# 訓練模型
model.fit(
[train["user"], train["movie"]],
train["rating"],
epochs=5,
batch_size=64,
validation_data=([test["user"], test["movie"]], test["rating"]),
)

# 進行電影推薦
user_id = 1 # 推薦給誰,用用戶ID來區別

movies_watched = data[data["user"] == user_id]["movie"].unique()
unwatched_movies = data[~data["movie"].isin(movies_watched)]["movie"].unique()

user_ids = [user_id] * len(unwatched_movies)

user_ids_tensor = np.array(user_ids)
unwatched_movies_tensor = np.array(unwatched_movies)

predictions = model([user_ids_tensor, unwatched_movies_tensor])

movie_recommendations = pd.DataFrame(
{"movieId": unwatched_movies, "predicted_rating": np.ravel(predictions)}
)
movie_recommendations = movie_recommendations.sort_values(
by="predicted_rating", ascending=False
)
top_10_recommendations = movie_recommendations.head(10)

print(top_10_recommendations)

利用強化學習:

使機器聽得懂人話,聽到特定概念,轉成嵌入向量以後,當成輸入,經過強化學習,就會開始執行相對應的動作。例如對阿斯拉說,打開推進器,或是讓我們一起進入零的領域,阿斯拉就會根據環境數據,智慧的幫忙準備執行指令的配套,讓主角風見隼人可以放心地推動推進器。

state: 環境數據 / 風見隼人的聲音指令輸入,聲音轉文字,文字轉Embedding (打開推進器)
action: 執行打開推進器​,與其它和環境配套的措施
reward: 瞬時速度高,而且沒有撞到護欄,高速過彎
​state: 環境數據 / 風見隼人的聲音指令輸入,聲音轉文字,文字轉Embedding (風扇騰空過彎)
action: 執行風扇騰空過彎,與其它和環境配套的措施
reward: 瞬時速度高,而且沒有撞到護欄,高速過彎

能夠使用這項技術的論文(不限於這些):

反思的過程有一個反思標籤是檢查相關性,可以用上這裡的嵌入模型
Dall-E3裡面可以對文字升取樣前後計算Cosine distance,收斂表示已經加入足夠多對圖片的描述
同上,蒸餾監督微調步驟可以使用嵌入模型來判別是否可以停止蒸餾迴圈

其他嵌入模型:

V2 (Based on JinaBert, 8K Seq)

引用:

@article{DBLP:journals/corr/abs-2108-12409,
author = {Ofir Press and
Noah A. Smith and
Mike Lewis},
title = {Train Short, Test Long: Attention with Linear Biases Enables Input
Length Extrapolation},
journal = {CoRR},
volume = {abs/2108.12409},
year = {2021},
url = {https://arxiv.org/abs/2108.12409},
eprinttype = {arXiv},
eprint = {2108.12409},
timestamp = {Thu, 02 Sep 2021 14:42:29 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2108-12409.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}


如果你對 AI 充滿熱情,學習上又不想浪費時間,我能夠以過來人的經驗給你不少想法,歡迎在Facebook群裡面留言。

如果想要用Zoom直接交談,為你直接解惑的,也可以點以下連結預約時間 (1小時)

 https://calendly.com/universe_ai/free_appointment

avatar-img
96會員
128內容數
帶你用上帝視角,針對市面上具有高度價值的影片/論文/書籍,用東方取象,與西方邏輯辯證的角度同時出發,跟著我一起來探討宇宙萬事萬物的本質,隨時隨地都可以來一場說走就走的思維旅行。作者在台積電 / 聯發科等科技產業有累計10年的資歷,近期對於人工智慧,東方易經,西方辯證邏輯,還有佛法向內求有深度興趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
為了使小模型取得大模型的回答水平 這篇論文提出了三招,"大幅度"提升Mistral 7B模型的回答準確率 如果有想要把LLM微調好的人,一定不能錯過這篇
為了提高文字生成影像的品質,openAI 團隊用了三招: 第一招,利用模型將文字"升取樣",產生出許多描述細節 第二招,用CLIP ViT產生Embeddings,計算Cosine similarities 第三招: 使用GPT4,對生成結果進行評比。
作者提出一新框架SELF-RAG,強調了大型語言模型(LMMs)的質量和事實性改進,依據需求自動檢索段落,以反思標記生成和評估內容。SELF-RAG讓LMMs自主決定檢索時機和內容,並使其能評估自身生成。實驗表明SELF-RAG改寫LMMs規則,為自主學習和多任務適應的未來鋪平道路。
為了避免GPT模型對人類社會造成危害,要有一個指標來評量個語言模型的資訊透明度。當有關於模型的公開訊息越多,無論是訓練資料的取得來源與資料搜集方法,還是模型細節的接露,與產生結果的限制用途與目標客群等等,都是這篇論文關心且要衡量的指標,藉由評分防止發行人工智慧的大科技公司可能造成的社會危害
訓練一個專屬於自己的守護神有其重要性,可以幫你個性化的解決問題,例如,如果上班常常解讀每個公司的資產負債表,則你可以利用文中的Fuyu-8b model專門的去學習如何看資產負債表,把你手邊有的案例都讓他學習一遍,這樣未來可以解放雙手,輕鬆上班完成任務。
每天有這麼多的金融數據在變化著,做為一個非全職投資人,要如何同時間掌握這麼多經濟數據與新聞報導,替投資理財做下相對正確的判斷,這時候你會需要自己的投資守護神語言模型,藉由新聞與訊息的整理爬蟲,導入自行訓練的守護神語言模型,讓他每天定時產生社論與投資建議,藉由Email 送出來給您參考,省去你不少時間
為了使小模型取得大模型的回答水平 這篇論文提出了三招,"大幅度"提升Mistral 7B模型的回答準確率 如果有想要把LLM微調好的人,一定不能錯過這篇
為了提高文字生成影像的品質,openAI 團隊用了三招: 第一招,利用模型將文字"升取樣",產生出許多描述細節 第二招,用CLIP ViT產生Embeddings,計算Cosine similarities 第三招: 使用GPT4,對生成結果進行評比。
作者提出一新框架SELF-RAG,強調了大型語言模型(LMMs)的質量和事實性改進,依據需求自動檢索段落,以反思標記生成和評估內容。SELF-RAG讓LMMs自主決定檢索時機和內容,並使其能評估自身生成。實驗表明SELF-RAG改寫LMMs規則,為自主學習和多任務適應的未來鋪平道路。
為了避免GPT模型對人類社會造成危害,要有一個指標來評量個語言模型的資訊透明度。當有關於模型的公開訊息越多,無論是訓練資料的取得來源與資料搜集方法,還是模型細節的接露,與產生結果的限制用途與目標客群等等,都是這篇論文關心且要衡量的指標,藉由評分防止發行人工智慧的大科技公司可能造成的社會危害
訓練一個專屬於自己的守護神有其重要性,可以幫你個性化的解決問題,例如,如果上班常常解讀每個公司的資產負債表,則你可以利用文中的Fuyu-8b model專門的去學習如何看資產負債表,把你手邊有的案例都讓他學習一遍,這樣未來可以解放雙手,輕鬆上班完成任務。
每天有這麼多的金融數據在變化著,做為一個非全職投資人,要如何同時間掌握這麼多經濟數據與新聞報導,替投資理財做下相對正確的判斷,這時候你會需要自己的投資守護神語言模型,藉由新聞與訊息的整理爬蟲,導入自行訓練的守護神語言模型,讓他每天定時產生社論與投資建議,藉由Email 送出來給您參考,省去你不少時間
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
大航海時代不止是地理新發現,也創造了文化的交流與科學的管理,關於航海,你不能浪漫到只問今天大海是什麼顏色,乘風萬里需要精確數字管理 航海是科學、智慧及勇氣~還有對信仰的堅持,當然你可以賭運氣,那是人對海最初的感覺,但不是「我門」,看得清楚背後的「道」嗎!~本蛙學的是數學,只願我求我道,不會歧途迷惑
Thumbnail
股市消息的「本身」從來都不重要,重要的是市場對消息的「反應」 美國聯準會於美東時間18日下午2時宣布降息 2 碼,基準利率來到4.75~5.0%,這是Fed四年來首次降息 Fed積極啟動降息周期,以捍衛經濟。扣除在新冠疫情期間的緊急降息,FOMC上次一口氣降息2碼是2008年「全球金融海嘯期間」
Thumbnail
守著舊事物不放,有點像是在對宇宙說 :「不用啦,我用這個舊舊的/不好用/不合適…的東西就好(=我喜歡這樣),不用給我更好的沒關係。」
Thumbnail
要檢查兩段長篇文字,內容是否雷同,長久以來困擾著大家,沒有好的嵌入模型,會耗費大量人力,需要對長篇文檔進行人工閱讀然後人工分類。本文除了展示如何能完美的解決這個痛點以外,也提供一些延伸應用思路,學習CP值很高。期待你能從本文取得許多新的應用思路與應用潛力!
Thumbnail
再度遇上,幻化同性的雙生靈魂與雙人共舞,已能量合一的彼此和諧、協調狀態。即便這樣的合諧,仍想回歸三維頭腦認知的理想生活,恐懼成為代言人此事,因一部推薦影片,發現木已成舟,無法再逃避,2022/12/22正式決定臣服一切,開啟靈性版圖。也接露「高我」意義真相與真面目。
Thumbnail
有一天,普丁曾經表示,蘇聯解體是「上個世紀最慘烈的地緣政治災難」。從1999年以來,克里姆林宮的強人普丁矢志克服這個「災難」,並讓俄羅斯重拾強國威勢。蘇聯和美國並處冷戰時期的超級強權,是俄羅斯的前身;俄羅斯則是擁有核子武器的國家之一,並在聯合國安全理事會(UNSC)擁有永久席次。
Thumbnail
這個她曾以為能交付未來的男人,充份地展現著「愛自己」,對於過去不敢愛自己的小霖來說,或許是個很好的學習對象!當小霖也充份地愛著自己的時候,再回頭看看現在的自己,一定會覺得自己幹嘛這麼委屈、做著那麼多以為別人會開心而自己也不開心的舉動。
Thumbnail
為何女孩會打從一開始就斷定自己和男孩沒有結果呢?(若沒看過前面的故事的可以先去看{同一副鑰匙,開啟了故事也結了一切}的上下篇喔) 這要從女孩對男孩的第一印象說起… 沒有接觸過彼此前,女孩眼中的男孩還算是個長相帥氣、穿著時尚、很懂得打扮自己的男生,感覺是校園裡的風雲人物之一。可惜總是板著一張臉,看起來
Thumbnail
剩下的故事 男孩和女孩不再見面後,其實也距離大考沒多久了。女孩說不上太難過,似乎甚麼事都沒發生一樣,他只是很努力告訴自己,保持冷靜、在大考前好好的最後衝刺,其他的事等大考完再說了...雖然她偶爾還是會讀書讀到一半,打開筆袋看著男孩和嬉鬧時留下來的紙條… 女孩在大考前的幾天依舊會去以前和男孩一起讀書的
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
大航海時代不止是地理新發現,也創造了文化的交流與科學的管理,關於航海,你不能浪漫到只問今天大海是什麼顏色,乘風萬里需要精確數字管理 航海是科學、智慧及勇氣~還有對信仰的堅持,當然你可以賭運氣,那是人對海最初的感覺,但不是「我門」,看得清楚背後的「道」嗎!~本蛙學的是數學,只願我求我道,不會歧途迷惑
Thumbnail
股市消息的「本身」從來都不重要,重要的是市場對消息的「反應」 美國聯準會於美東時間18日下午2時宣布降息 2 碼,基準利率來到4.75~5.0%,這是Fed四年來首次降息 Fed積極啟動降息周期,以捍衛經濟。扣除在新冠疫情期間的緊急降息,FOMC上次一口氣降息2碼是2008年「全球金融海嘯期間」
Thumbnail
守著舊事物不放,有點像是在對宇宙說 :「不用啦,我用這個舊舊的/不好用/不合適…的東西就好(=我喜歡這樣),不用給我更好的沒關係。」
Thumbnail
要檢查兩段長篇文字,內容是否雷同,長久以來困擾著大家,沒有好的嵌入模型,會耗費大量人力,需要對長篇文檔進行人工閱讀然後人工分類。本文除了展示如何能完美的解決這個痛點以外,也提供一些延伸應用思路,學習CP值很高。期待你能從本文取得許多新的應用思路與應用潛力!
Thumbnail
再度遇上,幻化同性的雙生靈魂與雙人共舞,已能量合一的彼此和諧、協調狀態。即便這樣的合諧,仍想回歸三維頭腦認知的理想生活,恐懼成為代言人此事,因一部推薦影片,發現木已成舟,無法再逃避,2022/12/22正式決定臣服一切,開啟靈性版圖。也接露「高我」意義真相與真面目。
Thumbnail
有一天,普丁曾經表示,蘇聯解體是「上個世紀最慘烈的地緣政治災難」。從1999年以來,克里姆林宮的強人普丁矢志克服這個「災難」,並讓俄羅斯重拾強國威勢。蘇聯和美國並處冷戰時期的超級強權,是俄羅斯的前身;俄羅斯則是擁有核子武器的國家之一,並在聯合國安全理事會(UNSC)擁有永久席次。
Thumbnail
這個她曾以為能交付未來的男人,充份地展現著「愛自己」,對於過去不敢愛自己的小霖來說,或許是個很好的學習對象!當小霖也充份地愛著自己的時候,再回頭看看現在的自己,一定會覺得自己幹嘛這麼委屈、做著那麼多以為別人會開心而自己也不開心的舉動。
Thumbnail
為何女孩會打從一開始就斷定自己和男孩沒有結果呢?(若沒看過前面的故事的可以先去看{同一副鑰匙,開啟了故事也結了一切}的上下篇喔) 這要從女孩對男孩的第一印象說起… 沒有接觸過彼此前,女孩眼中的男孩還算是個長相帥氣、穿著時尚、很懂得打扮自己的男生,感覺是校園裡的風雲人物之一。可惜總是板著一張臉,看起來
Thumbnail
剩下的故事 男孩和女孩不再見面後,其實也距離大考沒多久了。女孩說不上太難過,似乎甚麼事都沒發生一樣,他只是很努力告訴自己,保持冷靜、在大考前好好的最後衝刺,其他的事等大考完再說了...雖然她偶爾還是會讀書讀到一半,打開筆袋看著男孩和嬉鬧時留下來的紙條… 女孩在大考前的幾天依舊會去以前和男孩一起讀書的