跳至主內容

字元前綴條件化

作者: Jacob Jackson 屬於 產品

這是一系列問題的第一題,帶你一窺我們在 Cursor 的工作。

設定

使用語言模型進行程式碼補全時,我們通常希望模型產生的補全能以使用者已輸入的內容開頭。

然而,現代語言模型運作於權杖(token)序列而非字元;若直接將使用者輸入進行權杖化並送入模型,當使用者的游標不在權杖邊界上時,可能會產生錯誤結果。

因此,我們需要一個演算法,能在給定字元前綴的條件下取樣一段權杖序列,而不是較常見的「權杖前綴」條件取樣。

我們稱此為字元前綴條件化,一種在字元前綴條件下取樣權杖序列的演算法。

我們希望從自迴歸模型所指定的分佈 p(s) 中取樣一段權杖序列 s=t1,t2,…,tn,其定義為

p(s)=p(t1,t2,,tn)=k=1np(tkt1,,tk1)p(s) = p(t_1, t_2, \ldots, t_n) = \prod_{k=1}^n p(t_k | t_1, \ldots, t_{k-1})

並需滿足以下限制:s 以字元前綴 P 開頭,也就是 P 是 repr(t1)+repr(t2)+⋯+repr(tn) 的前綴,其中 + 表示字串連接,而 repr 會將權杖映射為其代表的字元。

我們定義 q(s)=p(s∣s starts with P)。只要能找到一種自迴歸地從 q(s) 取樣的方法即可,也就是對每個 k,從 q(tk∣t1,…,tk−1) 取樣。

問題

你能否設計一個有效率的演算法,從 q(tk∣t1,…,tk−1) 取樣,同時將對原始語言模型的呼叫次數降至最低?提供演算法描述即可;若有實作更佳。

歡迎將你的解答寄到 problems@cursor.com

歸類於: 產品

作者: Jacob Jackson