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

更新 發佈閱讀 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年的資歷,近期對於人工智慧,東方易經,西方辯證邏輯,還有佛法向內求有深度興趣。
2024/01/15
三分鐘內實作取得您專屬的人工智慧西洋占星助理,隨時掌握自己完整的星座運勢,隨時都能來占卜一下,知道自己完整的運勢以後,也比較好提前規劃該如何面對,本範例使用專業的西洋占星術,提供逆行,特別是水膩的相關資訊,齊帶大家都能趨吉避凶,從中找到快樂。
Thumbnail
2024/01/15
三分鐘內實作取得您專屬的人工智慧西洋占星助理,隨時掌握自己完整的星座運勢,隨時都能來占卜一下,知道自己完整的運勢以後,也比較好提前規劃該如何面對,本範例使用專業的西洋占星術,提供逆行,特別是水膩的相關資訊,齊帶大家都能趨吉避凶,從中找到快樂。
Thumbnail
2023/11/21
本文帶你三分鐘內跑通"文字生圖片"的網頁APP,使用最頂尖生成技術,LCM-Lora-SDXL模型,能夠在短時間內生成符合文字描述的高解析圖片。屬於免費開源模型(License Link),請不要產生有害內容,進行合理的使用。
Thumbnail
2023/11/21
本文帶你三分鐘內跑通"文字生圖片"的網頁APP,使用最頂尖生成技術,LCM-Lora-SDXL模型,能夠在短時間內生成符合文字描述的高解析圖片。屬於免費開源模型(License Link),請不要產生有害內容,進行合理的使用。
Thumbnail
2023/11/14
本文帶你在3分鐘內跑通基本範例,用llamaIndex 串接Excel,經過爬蟲與Mistral 7B整理的資料,讓GPT4成為國際政治經濟大師,每天為您自動產生經濟分析報告。
Thumbnail
2023/11/14
本文帶你在3分鐘內跑通基本範例,用llamaIndex 串接Excel,經過爬蟲與Mistral 7B整理的資料,讓GPT4成為國際政治經濟大師,每天為您自動產生經濟分析報告。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
要做會議記錄或課程筆記,想做逐字稿卻苦於打字速度不夠快嗎?錄音再慢慢回放浪費時間又容易恍神?這篇文章包你滿意,不用再浪費時間爬文了,你需要的逐字稿神器在這裡,保母級教學!
Thumbnail
要做會議記錄或課程筆記,想做逐字稿卻苦於打字速度不夠快嗎?錄音再慢慢回放浪費時間又容易恍神?這篇文章包你滿意,不用再浪費時間爬文了,你需要的逐字稿神器在這裡,保母級教學!
Thumbnail
AnyText是一款先進的圖像AI工具,利用深度學習技術,根據你輸入的文字描述生成圖像,更棒的是,它能生成繁體中文,而且能指定文字生成的位置。
Thumbnail
AnyText是一款先進的圖像AI工具,利用深度學習技術,根據你輸入的文字描述生成圖像,更棒的是,它能生成繁體中文,而且能指定文字生成的位置。
Thumbnail
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在當今數字化時代,需求日益增長。本文詳細介紹了幾種常用的PDF轉Word方法,並討論了它們的侷限性。接下來,我們將向您介紹pdftopdf.ai,一款具有先進的OCR和LLM技術,提供高效且保持原始文件格式和質量的解決方案。
Thumbnail
在當今數字化時代,需求日益增長。本文詳細介紹了幾種常用的PDF轉Word方法,並討論了它們的侷限性。接下來,我們將向您介紹pdftopdf.ai,一款具有先進的OCR和LLM技術,提供高效且保持原始文件格式和質量的解決方案。
Thumbnail
這是一個簡單的工作流,可以對輸入的圖片進行3D重建
Thumbnail
這是一個簡單的工作流,可以對輸入的圖片進行3D重建
Thumbnail
文字生成圖片的擴散生成模型,實際應用上並沒有想像中好用,原因在於,文字能夠乘載的訊息量太少,要產生好的生成結果一定程度仰賴特定的Prompt描述方法,如DALL-E3使用GPT4不斷增加描述的細節,讓文生圖的結果更好,有沒有更有效率的方式呢?
Thumbnail
文字生成圖片的擴散生成模型,實際應用上並沒有想像中好用,原因在於,文字能夠乘載的訊息量太少,要產生好的生成結果一定程度仰賴特定的Prompt描述方法,如DALL-E3使用GPT4不斷增加描述的細節,讓文生圖的結果更好,有沒有更有效率的方式呢?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News