跳到主要內容

發表文章

【認證與授權 - Open Policy Agent】關於策略語言Rego

  上一篇我們介紹了「 【認證與授權】Open Policy Agent 授權策略 」, 相信都已經初步了解了OPA(Open Policy Agent)主要在做什麼, OPA簡單來說就是一個授權的政策管理規範, 有點像我們的法律系統, 提供開發者在上面制定法條, 以約束授權對象可以進行什麼樣的操作, 讓各語言各自實作的授權政策有了統一的規範, 並獨立成一個模組區塊, 目的是讓越趨複雜的系統可以專注於功能, 而各類授權政策則獨立開發、測試, 讓職責分明, 問題追朔更加容易。 圖片來源 既然OPA是一種授權的政策管理規範, 就像法律一般也一定會有法條的組成, 而在OPA的世界裡, 組成法條的就是Rego這個語言, 專門用於描述和評估政策規則, 提供了靈活的工具,開發人員可以使用這些工具來編寫、測試和調試政策規則, 這次就來介紹一下Rego這套語言究竟與我們傳統的程式語言有什麼不同吧! 簡介 Rego這個語言的發展主要受到 Datalog 的啟發, Datalog 是一種數據查詢語言, 這種語言有很強的知識推理能力,本質上都是為了解一個邏輯問題, Datalog 已經具有數十年歷史的查詢語言, 但Rego並非完全遵循 Datalog 的語法, 而是以支持JSON格式的方式, 更貼近於現代化的撰寫方式。 為什麼要使用Rego語法? ● 以宣告式寫法精簡程式碼,什麼是宣告式呢? 請參考「 【程式設計基礎知識】宣告式 V.S 指令式 」。 ● 不需要太複雜的邏輯, 只需要制定授權的策略即可。 ● Data的描述以JSON形式表達。 ● OPA根據Rego的表達規則進行索引運算, 提升效能, 詳細的演算法內容請參考: https://blog.openpolicyagent.org/optimizing-opa-rule-indexing-59f03f17caf3。 ● 對於制定的策略可以進行單元測試。 ● 可以進行Benchmark,優化我們的策略判斷。 總而言之,Rego是OPA的政策語言,用於描述和評估政策規則,它提供了一種結構化和可讀性高的方式來定義政策,並與OPA引擎緊密集成,實現細粒度的存取控制和政策管理。 初步認識一下Rego 語法結構 ● 相同的規則檢查名稱, 其中一組符合就通過檢查。 ● 規則檢查區塊中的每一條表達式都是And的關係。...

【自然語言處理 - 概念篇】 來認識一下詞向量(Word Embedding or Word Vector)吧

  詞跟詞之間的距離有多近呢? 圖片來源 如果一個詞在相對的空間內都佔有一席之地的話, 試想, 每個詞都是一個獨立的個體, 就如同我們人類一般, 相同興趣的、相同頻率的就容易被歸納在一起,某些詞可能是相近的意思, 因此我們只需要給每個詞標上一個向量值, 並進行統計,而這些詞在這批資料集之中所佔的位置依照距離都能夠歸納出相似的詞, 而有了這樣的關係之後, 我們就能夠進行語義搜索、情感分析、語言生成、文本分類...等, 原來一個簡單的「詞」可以延伸出這麼多的應用。 那「詞向量」主要就是將「詞」本身的資訊進行數值化, 而後續的NLP進階應用就可以透過這些資訊進行, 以下例子會從如何訓練詞向量逐步介紹到如何利用詞向量模型來找出相似的詞, 並以圖表化進行呈現。 安裝套件 gensim: 文檔相似度計算和詞向量表示等自然語言處理(NLP)任務的Python庫。 jieba: 將中文語句切成最小單位的詞。 matplotlib: 繪製向量圖表。 !p ip install gensim !p ip install jieba !p ip install matplotlib 定義中文語句並進行斷詞 這邊我們就設計個4句的範本進行後續的向量處理。 由於NLP世界中最小的單位是「詞」, 因此我們就要藉由jieba這套斷詞工具幫我們預先進行斷詞。 import jieba sentences = [ list ( jieba . cut ( '我喜歡吃蘋果' )), list ( jieba . cut ( '蘋果很好吃' )), list ( jieba . cut ( '水果是健康的' )), list ( jieba . cut ( '梨子也很好吃' )), list ( jieba . cut ( '我也喜歡吃柳丁' )), list ( jieba . cut ( '蘋果柳丁都是一種水果' )), list ( jieba . cut ( '蘋果是一種又香又甜的水果' )), list ( jieba . cut ( '梨子跟柳丁也是一種又香又甜的水果' ))...