# Google Cloud OnAIR 研討會
[攜手 Google Gemini 開創 AI 世代新佈局](https://cloudonair.withgoogle.com/events/taiwan-cloud-onair-magic-of-google-gemini-2024?utm_content=feb_newsletter&utm_medium=email&utm_source=cloud_sfdc&utm_campaign=FY23-Q4-apac-ASPA758-onlineevent-er-TWCloudOnAirMagicofGoogleGemini_MC&utm_term=-&mkt_tok=ODA4LUdKVy0zMTQAAAGRh0TOq6mcn8yNUkMQUBxzpHQXKgNW40rSmGhTxZBAGhD26XHLaYdqILx799UwcbzUJu6Ktx3FOCiGKoLiceh1wsbf6om47wimhUQUwnBurFpsWgkr3co)
:::info
這是Google 2024/1/31辦的線上中文研討會, 內容主推當然是他們的Gemini相關的應用
不過這場會議並非完全一股腦地介紹他們的產品, 在RAG上面的概念還是蠻值得聽的
:::
## GenAI技術全面解析
[GOOGLE CLOUD ONAIR 線上研討會系列 | 攜手 Google Gemini 開創 AI 世代新佈局|Gemini 面面觀:多模態 Gemini 及 Gen AI 技術全面解析](https://www.youtube.com/watch?v=lxSLLWhVWv4&t=1s)
:::info
下面這張圖, Google解釋了目前的AI的進展, Level5代表AI能力全面屌打人類
分為兩個部分**Narrow AI** and **General AI**
**Narrow AI**代表了AI在部分領域上面的能力, 像是車牌辨識, 下棋, 目前Narrow AI大部分可以做到Level2, 少數領域被這些大公司做爛的情況下可以屌打人類(像是AlhpaZero)
**General AI**目前還停在Level1, 可以贏過沒有具備專業能力的人類
影片14:50提到, 當通用型model遇到行業專業問題勢必要做修正
:::

**Google Gemini工商時間**
- Gemini Ultra : 希望之後能夠推出
- Gemini Pro : Bard
- Gemini Nano : 可以運行在Pixel 8上面(雜訊去除, 亮點消除)
- Gemini的設計目標
-- Natively Multimodal.
-- Sophisticated Resoning.
-- Advanced Coding
4x less 輸入成本.
2x less 輸出成本.
**Gemini Software Fullstack**

- Duet AI : AI assistant for Developers, 類似Copilot但是是針對Google cloud的, 支援20種code, 支援測試code, 解釋code, 甚至會教學怎麼deploy在Google Cloud
- AI Studio/Vertex AI : 希望no code也能幫助企業產生出AI 應用
- Gemini Models : 模型
- AI Optimized Infrastructure.
:::info
可以看出, 要有一個AI產品出來, 需要的條件是
1. application (以後傾向都用AI協助產生)
2. models
3. infrastructure
:::
**Google model產品**.
- Gemini Pro
- Gemini Ultra
- imgen2 : 文生圖
- MedLM : 醫療的model.
- DITO : 影像分割. (Google做的)
- Mistral. (Unicorn)
- imageBind (Meta的multimodal), 不只文字, 影像, 背景音就可以讓AI對這張圖片做連結
**Google產品finetune**

包含了這幾個features
- Discover : 選用哪個model
- Tune : 提供了Prompt, Supervised, RLHF, Distillation Step by Step
- Augment : RAG
- Deploy : 如何驗證 (AutoMetrics, Auto SxS.)
**Finetune data quality(是針對不同的finetune情景, 需要的data與model需求)**

- Prompt : 1-10 examples
- finetune : 100 examples
- RLHF : 5K-10K examples
- Distilling : 100~1000 unlabled prompts
:::info
這樣可以大概知道需要準備多少的data可以finetune模型
:::
**Google 現在有support 130個model**
**Automatic Side by Side**.

---
**Google工商時間 again**
**imagen2**.
- 可以產生更高品質的圖片
- 可以指定把字放的圖片中的哪個地方
**SynthID**.
透過GenAI會產生一個浮水印, 也是一個Copyright.
**Indemnification**
透過Google產生的東西, Google可以提供一部分的擔保.
**NotebookLM(類似Chatpdf)**
A platform can search anything, (Only in US now)
**Segment Anything Model(SAM)**.
Google有TPUv4, TPUv5e
TPUv5p有開放架構
**Google GenAI Resources**

---
## 打造實體的RAG
[當大型語言模型遇上企業資料集:打造你的檢索增強生成式 AI (RAG, Retrieval-Augmented Generation)](https://cloudonair.withgoogle.com/events/taiwan-cloud-onair-magic-of-google-gemini-2024/watch?talk=se2)
**多模態應用**.
- 直接拍照計算價格.
- 拍照後的故障排除.
- 影像生成文字描述.
**因為語言模型都是網路上拿到的資料,所以不會貼近企業所想要的資料**
**缺乏Grounding的問題 (稱為幻覺)**
**與資料互動**

**不同的tuning方法與成本**

**Retrieval簡易架構**

**何時使用finetune, 何時使用RAG**

:::info
**Better retrieval == Better result (所以Retrieval model也是需要訓練的)**
:::
### RAG面臨的挑戰
**與品質相關的挑戰**
- 涉及多個步驟導致結果不精確
- 需要品質評估工具 : 衡量各個工作流程跟組件的品質(**Ragas**)
- 檢索效果不佳
-- 低精度 : 檢索不到相關的文件
-- 低Recall : 所有相關的文件不一定被找到
- 錯誤的回應生成, 存在幻覺
**與品質無關的挑戰**
- 處理不準確性, 定期更新資料
- 治理 : 控制權限
- 額外成本 : 向量儲存, inference. (但還是比LLM訓練便宜)
- 延遲增加 : 多種資料處理步驟
- 監控工具需求 : 需要監控各個組件
- 人力需求 : 需要運維整個RAG
### 工程面

**Chunking & Organizing Data(需要調整的部分)**
- 理解文件決定Chunk長度(文章/是否有列表), 這邊要try and error
- 使用Embedding model. (適合的chunk長度)
- 使用者查詢類型. (使用者想查詢的範圍有多大)

**固定大小chunking**.
(目前langchain已經有support)

**根據上下文的chuncking**.

**特殊的格式(table), 理解的方式不同**.
**Specialized Chunking**.

### Choosing Embedding Model.


BigQuery現在支援客製化的tensorflow的model
### Vector Store是重要的一環.

**向量相似度**.
**使用ANN(Approximate Nearest Neighbor)**
因為如果資料庫有百萬等級, 搜尋會太耗時.

1s or few 100 ms 就要完成搜尋.
階層式搜尋.
### Summary
- Embedding : English or non-English
- VectorDB : pgvector
- LLM for text : model
- Prompt = query + relevant documents
Vertex AI Search : 不用開發任何東西, Google已經幫忙做好了
### RAG 建議作法

## RAG:改變知識搜尋與問答的方式
[RAG:改變知識搜尋與問答的方式](https://cloudonair.withgoogle.com/events/taiwan-cloud-onair-magic-of-google-gemini-2024/watch?talk=se3)
Documents -> Embedding -> VectorStore
User ask question -> Embedding -> Find adjecent vectors
把question and 找到的content一起送到prompt

### 新的搜尋方式
希望搜尋以後, 請語言模型讀完以後summary起來回覆我們最後想要的結果
Functional Requirements
- Fetch most relevant documents
- Answer the question based on retrieved documents
- Recommendation based on historical data (根據先前人都點甚麼連結作為推薦的可能性)
- Feedback Loop

- 針對不同的部分做轉換(Title, Issue, Comment)
- Full content也會做embedding
- 然後把full content給LLM model先做一個summary
- 最後把上面三樣東西送到PGVector

task_type不同, 應該要定義成不同的embedding

Summary希望先做下面的部分


使用者互動與feedback loop
Google是使用Google analytic

### Design Consideration
一開始儲存dataset的時候就做summary了(針對需要及時拿到結果的)
- 比較快
- 但是index time會變長
- summary document但是不會根據問題
另一種方式是爬資料回來的時候不做summary, 只有當被找出來再做summary(針對批次性的)
- high query response time
- low index time
- summarization based on user's query
### Chunked-Summarization vs Full Content Summarization
Chunked-Summarization
- 可以處理更大的文件
- 可以根據不同的結構(章節)做處理
- 複雜的data processing
- may lost context during processing chunks
Full Content Summarization
- Input tokens limitation
- Simple data processing
- Always reference to the full content
- during data processing
### 值得繼續Study的項目
- MMLU : Massive Multitask Language Understanding** : Multimodal的benchmark
- Gemini white paper
- Multimodal怎麼訓練
- Google的imgen2
- MedLM
- DITO
- Mistral
- imageBind
- 驗證模型的方式 : AutoMetrics, Automatic Side by Side
- Ragas(驗證RAG的方式)
:::danger
## Summary of this topic
### RAG 實做
1. 針對data的不同部份做轉換 (Title, Issue, Comment, Reference...)
-- PDF文件有Camelot(表格提取), Unstructured, PyPDF2, PDFPluimber, LLM Sherpa
3. 會把Full content也做embedding
4. 把full content給LLM model先做一個summary
5. 把上面三樣東西送到PGVector存起來
6. 看完文章以後先生幾個問題問這篇文章
8. 把question跟找到的content一起送到prompt : [{question:""}, {content:""}]然後給LLM去回答
9. 後面的LLM必須針對前面的prompt回答最相關的回答是甚麼
10. metadata可以增加先前的人都停留在哪邊
11. feedback loop持續改進
### RAG 可以改進的方式
1. Chunk的決定 : 使用者的檔案/文章類型, 使用的embedding model, 使用者欲查詢的答案範圍
2. 混合搜尋 (關鍵字+向量搜尋)
3. 透過Metadata (前人搜尋結果)
4. Query rewriting (有一個model幫忙重新寫query的語句 : Prompt)
5. Reranking : 還沒有很仔細看, 但看起來是使用
6. Recursive :
7. Embedded Tables :
8. Parent Document : 參考其他文件
9. Finetune : Embedding, LLM, Reranking
:::