RAGAS——Metric重寫篇

在上一篇踩坑記中郊闯,基于我對(duì)編程框架的理解肌幽,直覺上認(rèn)為,RAGAS 中的 Metric 作為最終執(zhí)行層糯耍,理論上為了更好地拓展性扔字,都是可以重寫里的執(zhí)行代碼,這樣面對(duì)各種獨(dú)特的檢測(cè)需求時(shí)温技,會(huì)非常的靈活啦租。

最近終于有時(shí)間去檢驗(yàn)這個(gè)想法。

這次重寫的內(nèi)容是 RAGAS 自帶的 faithfullness(答案忠誠(chéng)度)荒揣。

faithfullness

還是推薦各位不太理解概念的篷角,先讀一下這篇文章高級(jí)RAG(四):RAGAs評(píng)估-CSDN博客

答案忠誠(chéng)度系任,是指程序給出的答案恳蹲,是否可以在背景知識(shí)中找到虐块,能找到多少,找到的越多嘉蕾,分?jǐn)?shù)越高贺奠,最高1分,最低0分错忱。

源碼很長(zhǎng)儡率,就不單獨(dú)上了,想要深入了解的可以自己去 GitHub 查看以清。

在源碼中可以看到儿普,FaithFullness 類是繼承自 MetricWithLLM 類的,里面只是將 _score_batch 方法進(jìn)行了重寫掷倔,而重寫的內(nèi)容也非常簡(jiǎn)單眉孩,就是將答案分成了幾個(gè)部分,然后分別針對(duì)這些內(nèi)容去判斷是否是上下文中包含的內(nèi)容勒葱,如果是則算1分浪汪,不是算0分,然后算平均值凛虽,就得到了這一條數(shù)據(jù)的忠誠(chéng)度死遭。

邏輯很簡(jiǎn)單,只是這個(gè)分?jǐn)?shù)都是通過(guò) GPT 的答案來(lái)的凯旋,也算是某種意義上的自適應(yīng)了呀潭。

而要改寫的話也很簡(jiǎn)單,因?yàn)橛?jì)算邏輯很簡(jiǎn)單瓦阐,也很有效蜗侈,我們肯定就不需要再去改了。只需要修改 Prompt 中的內(nèi)容睡蟋,讓得到的結(jié)果更符合我們需要的踏幻。

所以接下來(lái)要去了解一下 Faithfullness 的 Prompt 中都寫了什么。

Prompt

這里的 Prompt 分成了兩部分戳杀。

第一部分是將你的問題和回答傳入该面,GPT 將答案解構(gòu)成多個(gè)部分。

question: Who was  Albert Einstein and what is he best known for?
answer: He was a German-born theoretical physicist, widely acknowledged to be one of the greatest and most influential physicists of all time. He was best known for developing the theory of relativity, he also made important contributions to the development of the theory of quantum mechanics.
statements in json:
{{
    "statements": [
        "Albert Einstein was born in Germany.",
        "Albert Einstein was best known for his theory of relativity."
    ]
}}

然后是第二部分信卡,將你解構(gòu)后的內(nèi)容與上下文對(duì)比隔缀,讓 GPT 來(lái)判斷,這部分的答案是否符合上下文的含義傍菇。

Context:
Photosynthesis is a process used by plants, algae, and certain bacteria to convert light energy into chemical energy.
statement_1: Albert Einstein was a genius.
Answer:
[
     {{
        "statement_1": "Albert Einstein was a genius.",
        "reason": "The context and statement are unrelated"
        "verdict": "No"
    }}
]

符合的話猾瘸,verdict 就是 Yes,否則就是No

從 Prompt 示例中可以看到牵触,舉得例子都是偏問答類淮悼、解釋類的,核心面向的場(chǎng)景就是問答揽思。

但是我們自己的產(chǎn)品或功能袜腥,如果直接套用這個(gè)示例的話,很可能會(huì)變得不倫不類钉汗,得不到想要的回答羹令。

重寫

比如,我們公司有一個(gè)功能损痰,是想要利用 GPT 來(lái)給用戶反饋進(jìn)行分類和打標(biāo)簽福侈,大致的內(nèi)容可能類似如下:

問題:可以幫我將下面的內(nèi)容打上符合的標(biāo)簽或者確認(rèn)所屬模塊嗎?

用戶反饋:簡(jiǎn)書的關(guān)注列表是按我最近關(guān)注的來(lái)排序的徐钠,經(jīng)常讓我錯(cuò)失一些非常棒的更新癌刽。

返回的標(biāo)簽或模塊:["關(guān)注列表", "功能優(yōu)化", "BUG"]

我想利用原生的 faithfullness 去生成第一部分(即役首,將答案解構(gòu)成多個(gè)描述)會(huì)得到如下結(jié)果:

{
    "statements": [
        "將下面的內(nèi)容打上符合的標(biāo)簽",
        "確認(rèn)所屬模塊"
    ]
}

emmm尝丐,看得出來(lái),這是把我的問題給梳理成了多段了衡奥,并沒有把我的答案梳理成多段爹袁。可見矮固,在這個(gè)場(chǎng)景下失息,使用原生的 faithfullness 并不能得到我們想要的結(jié)果。

而出現(xiàn)這個(gè)問題的原因用很簡(jiǎn)單——Prompt中的示例在作怪档址。

第一部分的示例很明顯是將問題+答案整合在一起盹兢,產(chǎn)生了一個(gè)返回結(jié)果,而我們只需要修改這個(gè)示例守伸,讓示例中的解構(gòu)內(nèi)容符合我們的期望绎秒,就可以避開這個(gè)問題。

question: Please help me label this sentence or distinguish the modules it belongs to?
answer: "Bugs", "Work List Module"
statements in json:
{{
    "statements": [
        "This sentence seems to be describing a bug.",
        "This sentence seems to belong to the work list module"
    ]
}}

這樣尼摹,再下一次生成解構(gòu)內(nèi)容時(shí)见芹,就會(huì)參考我們示例中的邏輯進(jìn)行拆分。

這里其實(shí)暗含了一個(gè)不好理解的點(diǎn)蠢涝,就是用戶反饋都沒有放進(jìn)去玄呛,就直接放答案,那GPT怎么理解這個(gè)答案是怎么來(lái)的呢和二?

其實(shí)這個(gè)就牽扯到了第二部分了徘铝,第一部分GPT其實(shí)不需要理解上下文,只需要按照我們示例的格式去將內(nèi)容解構(gòu),而上下文是在第二部分發(fā)揮作用惕它。

當(dāng)然场晶,這部分馬上介紹,先貼一下修改后得到的結(jié)果怠缸。(源碼中不止這一個(gè)地方要改诗轻,詳細(xì)內(nèi)容仔細(xì)翻看一下源碼。)

{
    "statements": [
        "這句話似乎描述了一個(gè)關(guān)注列表",
        "這句話似乎屬于功能優(yōu)化模塊",
        "這句話似乎描述了一個(gè)BUG"
    ]
}

OK揭北,非常符合我的預(yù)期扳炬。繼續(xù)。

按照相同的邏輯搔体,只需要修改第二部分的示例為如下內(nèi)容(源碼不止一個(gè)地方)

Context:
It's obviously unreasonable that deleting posts cannot be done in bulk.
statement_1: This sentence seems to be describing a design issue.
statement_2: This sentence seems to belong to the work list module.
Answer:
[
    {{
        "statement_1": "This sentence seems to be describing a design issue.",
        "reason": "The context seems to be complaining about the lack of corresponding functions, so it is a functional design issue",
        "verdict": "Yes"
    }},
    {{
        "statement_2": "This sentence seems to belong to the work list module.",
        "reason": "The context mainly points out the issue of post management, not the work list.",
        "verdict": "No"
    }}
]

再次 Debug 查看第二段 Prompt 返回的內(nèi)容如下:

[
    {
        "statement_1": "這句話似乎描述了一個(gè)關(guān)注列表",
        "reason": "The context is complaining about the sorting of the follow list, so it is related to the follow list module",
        "verdict": "Yes"
    },
    {
        "statement_2": "這句話似乎屬于功能優(yōu)化模塊",
        "reason": "The context is not discussing functional optimization, but rather the issue with the follow list sorting",
        "verdict": "No"
    },
    {
        "statement_3": "這句話似乎描述了一個(gè)BUG",
        "reason": "The context is not explicitly mentioning a bug, but rather a dissatisfaction with the follow list sorting",
        "verdict": "No"
    }
]

誒恨樟,可以看到,已經(jīng)可以返回我們期望的內(nèi)容了疚俱,但是中間還有一個(gè)小問題劝术,就是把功能優(yōu)化識(shí)別成了模塊,所以判定為錯(cuò)了呆奕。針對(duì)這個(gè)我們养晋,我們可以在第一步的時(shí)候給出 Prompt 去告知 GPT 模塊通常只能有一個(gè),就會(huì)大大減少這種情況的出現(xiàn)梁钾,當(dāng)然绳泉,作為文檔,這里就不去糾結(jié)了姆泻。

總之零酪,通過(guò)改寫 faithfullness ,終于可以利用 RAGAS 去正確的判斷打標(biāo)簽這個(gè)功能的效果了拇勃。

后記

雖然自己已經(jīng)比較確定 Metric 是可以自定義的四苇,但是沒想到過(guò)程如此順利,只需要簡(jiǎn)單的修改 Prompt 方咆,保證改寫后的輸出內(nèi)容和此前一致月腋,無(wú)需修改計(jì)算規(guī)則,即可順利的得到結(jié)果峻呛。

而且從 RAGAS 這里罗售,還看到了一些自適應(yīng)的影子,由 GPT 去判斷 GPT 的效果钩述,哈哈寨躁,感覺大家都想到一塊去了。這里面還能做特別多的拓展牙勘,留待后續(xù)慢慢研究了职恳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末所禀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子放钦,更是在濱河造成了極大的恐慌色徘,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件操禀,死亡現(xiàn)場(chǎng)離奇詭異褂策,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颓屑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門斤寂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人揪惦,你說(shuō)我怎么就攤上這事遍搞。” “怎么了器腋?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵溪猿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我纫塌,道長(zhǎng)诊县,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任护戳,我火速辦了婚禮翎冲,結(jié)果婚禮上垂睬,老公的妹妹穿的比我還像新娘媳荒。我一直安慰自己,他們只是感情好驹饺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布钳枕。 她就那樣靜靜地躺著,像睡著了一般赏壹。 火紅的嫁衣襯著肌膚如雪鱼炒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天蝌借,我揣著相機(jī)與錄音昔瞧,去河邊找鬼。 笑死菩佑,一個(gè)胖子當(dāng)著我的面吹牛自晰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稍坯,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼酬荞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搓劫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起混巧,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枪向,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后咧党,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秘蛔,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年傍衡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缠犀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聪舒,死狀恐怖辨液,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箱残,我是刑警寧澤滔迈,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站被辑,受9級(jí)特大地震影響燎悍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盼理,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一谈山、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宏怔,春花似錦奏路、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抓艳,卻和暖如春触机,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玷或。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工儡首, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偏友。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓蔬胯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親约谈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笔宿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容