# Word Embedding
## Week 19
----
## Introduction
+ Embed 為嵌入的意思
+ 將文字嵌入(映射)到一個高維度空間的向量
+ 轉成向量後才能夠拿來計算
+ 並且要維持文字原本的語義
+ Word Embedding 一般而言與**上下文無關**
----
## Sentence Embedding
將多組 Word Embedding 加在一起
就變成有上下文關聯的 Sentence Embedding 了
----
## Sentence Encoder
+ 來自 Google 的 [Sentence Encoder](https://tfhub.dev/google/collections/universal-sentence-encoder/1)
+ 使用 Transformers 架構做 Encoding
----
## Sentence Encoder Demo
```python=
import numpy as np
import tensorflow_hub as hub
import tensorflow_text
model = hub.load("USEML")
keys = ["Nekopara", "能幹貓", "忠犬小八", "天竺鼠", "耗子"]
queries = ["貓", "狗", "鼠"]
key_emb: np.ndarray = model(keys)
query_emb: np.ndarray = model(queries)
```
----
## Vector Similarity
因為文字都被轉成向量了
所以透過「一個」矩陣乘法
就能算出 Query 與所有 Key 的相似度
例如內積、餘弦相似度或歐式距離之類的
----
## Vector Database
當向量的數量很多的時候
可以使用向量資料庫進行操作
例如 Python 上的 Faiss 套件
----
## FAISS
Facebook AI Similarity Search
專門對大規模向量相似度運算優化的套件
[[GitHub]](https://github.com/facebookresearch/faiss) | [[Docs]](https://faiss.ai/)
----
## Faiss Demo
```python=
import faiss
index = faiss.IndexFlatL2(key_emb.shape[1])
index.add(key_emb)
n_best = 5
distance, result_index = index.search(query_emb, n_best)
print(distance) # 向量間的距離
print(result_index) # N-Best 向量索引值
faiss.write_index(index, "index.faiss") # 寫入
index = faiss.read_index("index.faiss") # 讀取
```
----
## Search Engine
以此概念,我們可以構築出一個簡單的搜尋引擎
---
# 軼聞趣事
----
二月初 Meta 發表 LLaMA
但因為模型授權無法商用
所以網路上有人開始在訓練可商用的 LLaMA
----
當時主要有兩種開源 LLaMA
一個是 [s-JoL](https://github.com/s-JoL)
一個是來自柏克萊大學的研究團隊
----
當時 s-JoL 微調 LLaMA 架構
公開發表了模型權重,並以 OpenLLaMA 的名字
率先發了 [PR](https://github.com/huggingface/transformers/pull/22795) 到 HuggingFace Transformers
但這兩份專案其實都把自己命名為 OpenLLaMA
----
## 不料!
有一天 s-JoL 突然把整個專案都砍了
權重也撤掉,所有連結都 404
----
原因是有個人抄襲 s-JoL 整份專案(不是 Fork)
甚至連註解裡面的作者名都沒清掉
s-JoL 一氣之下就把東西都撤掉
開 [Issue](https://github.com/chenfeng357/open-Chinese-ChatLLaMA/issues/1) 大罵抄襲者(Issue 連結也失效了)
----
這時柏克萊大學陸續釋出多個模型權重
引起廣大研究單位關注 OpenLLaMA 這個專案
----
大家在調用模型的過程發現 ...
#### **這個 OpenLLaMA 居然不是用 OpenLLaMA 架構!**
因為柏克萊是沿用原本的 LLaMA 架構
而 OpenLLaMA 是 s-JoL 微調過的架構
----
因此這位抄襲者的白目行為搞出了一小片混亂
最後雙方也都把專案撤掉,造就兩敗俱傷的局面
開源界也因此少了一部分的資源
----
### 後記
有人發 PR 提議將 OpenLLaMA 的相關頁面移除
但 HuggingFace 基於前後相容性的關係拒絕了
只能將之放入 Deprecation List 裡面
{"title":"Week 19 - Word Embedding","showTitle":"true","showTags":"true","lang":"zh-TW","slideOptions":"{\"transition\":\"slide\"}","description":"地獄貓旅行團第 25 週心得分享","contributors":"[{\"id\":\"c7cbb212-2c41-4dfa-8d85-f8e7fa769bf1\",\"add\":3228,\"del\":888}]"}