Mining Precision Interface From Query Logs -- 学习笔记(二)
4 交互mining
?????? 前面說(shuō)到解決最終問(wèn)題的步驟之一:分析日志以識(shí)別有意義的結(jié)構(gòu)更改,因?yàn)槿绻麊渭冇贸蓪?duì)AST之間的差異表 會(huì)導(dǎo)致不相關(guān)的差異,所以并不是所有從logs中分析出的差異對(duì)生成精確界面都是有意義的。
本節(jié)作者提出的 語(yǔ)句以及編寫 語(yǔ)句的工具:就是一種可以指定 有意義的結(jié)構(gòu)改變的特定于域的語(yǔ)言。
Q1:為什么不使用 來(lái)分析所有 中的差異?
答:有三個(gè)方面:
(1)出現(xiàn)不想關(guān)的結(jié)構(gòu)改變:像函數(shù)重命名,更改project clause的別名,重排 子句中的表,對(duì)查詢語(yǔ)義沒(méi)有任何的影響,而這些差異在 表中也是有記載的。
(2)誤導(dǎo)性差異,舉個(gè)栗子:
① SELECT a FROM T WHERE 1=1
② SELECT a FROM T GROUPBY a
上面這兩個(gè)查詢語(yǔ)句,樹(shù)對(duì)齊算法分析出的可能是在①中用GROUPBY子句替換WHERE子句形成了②。但事實(shí)上這并不是有意義的能夠映射到小部件的變化。有可能①②是通過(guò)將 WHERE子句和GROUPBY子句添加到一個(gè)基礎(chǔ)的查詢語(yǔ)句 SELECT a FROM T上的。
(3)有特殊情況,再舉個(gè)栗子:
① SELECT b FROM T WHERE a>5 AND a<10
② SELECT b FROM T WHERE c>5 AND a=10
第一個(gè)查詢通過(guò)整數(shù)來(lái)過(guò)濾值,我們很自然的就能想到它可以用范圍滑塊來(lái)映射。但是范圍滑塊卻不能用于第二個(gè)查詢,為了區(qū)別這兩個(gè)語(yǔ)句,精確界面需要額外的語(yǔ)義來(lái)說(shuō)明更改的常量是共享相同屬性的不等表達(dá)式的一部分。
基于上面的原因,應(yīng)該根據(jù)應(yīng)用程序和開(kāi)發(fā)人員的需求,篩選有意義的查詢結(jié)構(gòu)變化
Q2: 語(yǔ)句?
1、 語(yǔ)句是一種特定于域的語(yǔ)言,基于此語(yǔ)言,用戶可以指定查詢結(jié)構(gòu)變化的位置和方式,一個(gè) 語(yǔ)句通過(guò)一對(duì)查詢 進(jìn)行計(jì)算,返回一個(gè)輸出表,如果不匹配則返回一個(gè)?。等價(jià)于通過(guò) 對(duì) 進(jìn)行過(guò)濾,并對(duì)子樹(shù) 進(jìn)行轉(zhuǎn)換
2、 子句的結(jié)構(gòu)組成:
?FROM子句:用來(lái)定義精確界面在搜索時(shí) 結(jié)構(gòu)變化的范圍,并對(duì) 中的 子樹(shù) 進(jìn)行轉(zhuǎn)換。 < path expression > 由 能確定祖先孩子關(guān)系的運(yùn)算符 組成。path 總是和 匹配,它還指定要返回的祖先子樹(shù);FROM子句返回與路徑匹配,并包含子樹(shù)的最深子樹(shù)。路徑 //* 表示不對(duì) 中的子樹(shù)進(jìn)行轉(zhuǎn)換。
總之,FROM子句就相當(dāng)于把范圍變量綁定到下面的語(yǔ)句:
SELECT id, pid1, pid2, extract(,path),ancestor( ,path),ancestor( ,path)
FROM
WHERE matches( , path)
WHERE子句:是對(duì)FROM子句中定義的范圍變量的布爾表達(dá)式;可以用路徑操作符來(lái)操作子樹(shù)
MATCH子句:match子句用來(lái)給 語(yǔ)句命名,這樣就可以用成功的匹配標(biāo)記交互圖中的邊。
Q3:怎么執(zhí)行和寫語(yǔ)句?
被轉(zhuǎn)換成SQL查詢,并在一對(duì)由 定義的 分區(qū)上執(zhí)行,執(zhí)行的結(jié)果集中到一個(gè)叫做? 的表中。是為開(kāi)發(fā)者設(shè)計(jì)的,沒(méi)有 一定處理抽象語(yǔ)法樹(shù)的基礎(chǔ)的用戶使用起來(lái)有點(diǎn)困難。針對(duì)這個(gè)問(wèn)題,作者開(kāi)發(fā)了一個(gè)簡(jiǎn)化書寫 語(yǔ)句的工具:這個(gè)工具可以檢測(cè)成對(duì)樹(shù)中最普遍的差異,然后讓用戶來(lái)選擇他們認(rèn)為重要的差異。具體操作過(guò)程:(1) 用戶指定一些可能的成對(duì)差異或者一些可能會(huì)不同的結(jié)點(diǎn)(2)工具從日志中提取樣本,比較樣本中所有成對(duì)樹(shù),并且指出滿足指定條件的樹(shù)(通過(guò)還原語(yǔ)法樹(shù),高亮那些變化的子句,這樣使無(wú)基礎(chǔ)用戶更易懂)。
這個(gè)工具對(duì)任何的查詢轉(zhuǎn)換都能生成 語(yǔ)句,為了幫助用戶優(yōu)化搜索,工具還可以把與現(xiàn)有 語(yǔ)句匹配的差異從要搜索的后序集合中排除,減小搜索范圍。
?
?
?5 交互映射
前面交互mining輸出一個(gè) 表,表示日志中成對(duì)查詢所表示子樹(shù)之間有意義的差異。把這個(gè)? 表映射到一個(gè)交互圖 ,圖中每個(gè)頂點(diǎn)代表一個(gè)查詢,每個(gè)記錄都是一條用交互描述的有向邊 。圖是一個(gè)稠密圖,因?yàn)槊繉?duì)查詢之間可能會(huì)被多條轉(zhuǎn)換邊連接。目標(biāo)是生成一個(gè)可以表達(dá)交互圖中所有查詢的一個(gè)界面集合 .
要實(shí)現(xiàn)這個(gè)目標(biāo),有三個(gè)挑戰(zhàn):
(1)要為圖中每條邊選擇合適的部件來(lái)表達(dá)交互(也就是查詢語(yǔ)句的變化)
(2)提取域和模板函數(shù)來(lái)具體化這些部件
(3)在界面上映射交互圖
下面的部分則是作者針對(duì)這些問(wèn)題,提出的解決方案:
Q1:對(duì)交互圖進(jìn)行預(yù)處理
前面說(shuō)過(guò)一個(gè)部件 是由一個(gè)域? ,一個(gè)交互 ,一個(gè)模板函數(shù) 確定。如何從 ? 中提取模板函數(shù)和域呢?方法是從 的子樹(shù)中提取參數(shù)化的模板樹(shù),然后利用參數(shù)來(lái)構(gòu)造域,還使用這些結(jié)果來(lái)標(biāo)記交互圖中的邊。具體操作:
對(duì)于模板函數(shù):
用 個(gè)參數(shù)代替子樹(shù) 中 原來(lái)的 個(gè)值,構(gòu)建參數(shù)化的模板樹(shù) ;表? 用參數(shù)化的樹(shù)模型 和 參數(shù)值 確定。然后通過(guò)這些模板把樹(shù)進(jìn)行分組,對(duì)每個(gè)組 ,收集組內(nèi)所有樹(shù)的參數(shù)值,然后找到一個(gè)參數(shù)至少變化了一次的下標(biāo)集合 ,然后生成每個(gè)組的表 ,這個(gè)表代表了在相同的參數(shù)化子樹(shù)中變化的參數(shù)值。
每個(gè)部件 都有一個(gè)k維的域。如果表 中的屬性和 域的維度之間一一映射,則參數(shù)化子樹(shù)可以被映射到部件 ,從而使每個(gè)映射都在 范圍內(nèi)。這樣的話,那模板函數(shù) 只是小部件原狀態(tài)到值表中的屬性的一一映射,然后這些屬性綁定到了模板子樹(shù)的參數(shù)。
對(duì)標(biāo)記邊:
交互圖中每條邊 都代表 表中的一條記錄 。我們用 路徑和模板子樹(shù) 標(biāo)記邊 ,還有其參數(shù)值 .
一個(gè)邊可以被映射到界面的多個(gè)部件,把這個(gè)候選部件集叫做 .
Q2:部件映射
下一步生成可以 表示 log 中所有查詢的界面集合 .
(1)首先,定義界面閉包集合 ,根據(jù)交互圖確定它的代價(jià) ,從集合覆蓋問(wèn)題出發(fā),通過(guò)松弛,證明了界面生成問(wèn)題是個(gè)NP問(wèn)題。作者提出了一個(gè)帶優(yōu)化的圖松弛啟發(fā)式算法來(lái)加快這個(gè)過(guò)程。作者假定每條邊都有一個(gè)候選部件,每個(gè)轉(zhuǎn)換都是標(biāo)準(zhǔn)的,并且每個(gè) 語(yǔ)句在任何成對(duì)查詢之間最多生成一條邊。然后對(duì)這些約束進(jìn)行松弛。
(2)一個(gè)界面 包括一個(gè)初始的查詢 和一個(gè)部件集合。定義這個(gè)界面的閉包為一個(gè)可達(dá)查詢的集合。
(可達(dá):存在一些從初始查詢 到 的路徑,這些路徑可以由 中的部件表達(dá))
(邊 可以用部件 表示:邊 的路徑和模板子樹(shù) 和部件的相同,則可以表示)
(3)部件 的域定義為在 中它表示的邊的值的集合。這個(gè)域用來(lái)計(jì)算它的代價(jià) 以及后續(xù)的界面集合 的代價(jià)。
Q3:解決NP-Hardness
從集合覆蓋到界面生成描述松弛方法:
給定一個(gè)總體 和 一個(gè)能覆蓋 的 包含 m 個(gè)子集合的集合 。集合覆蓋識(shí)別子集中的最小子集 ,那么 .(我的理解是最小不重疊的子集)
可以構(gòu)造一個(gè)交互圖 , 每個(gè)子集 形成一個(gè)最大子圖? (我理解的是這個(gè)子集中的查詢結(jié)構(gòu)差異是相似的),這個(gè)圖的邊由子集的id 標(biāo)識(shí)。最大子圖中的邊由一個(gè)唯一的候選組件 表示(也就是說(shuō)這個(gè)子集中的界面是可以用一個(gè)候選部件表示的),若其域?yàn)榭談t代價(jià)為0,否則為1。往一個(gè)界面中添加組件 就把子集 中的所有元素添加到閉包中,最終界面集的部件集一起構(gòu)成最終界面的候選部件集。
Q4:啟發(fā)式算法
作者之前提出一種貪心啟發(fā)式算法解決界面生成問(wèn)題。通過(guò)為查詢集中每個(gè)查詢 分配一個(gè)界面 初始化 最終界面集合集 ,然后使用貪心法合并界面,直到這些界面的總代價(jià)不再減少為止。
如果存在0個(gè)或更多的邊 連接查詢 ? 和 則可以合并 界面 ,用邊 合并界面。
最終合并的界面 使用 的初始查詢,把來(lái)自兩個(gè)界面的部件和邊 的部件結(jié)合起來(lái)構(gòu)成部件集 .
可以通過(guò)合并 表示相同轉(zhuǎn)化的部件 來(lái)減少 。(表示相同轉(zhuǎn)化的部件定義:兩個(gè)有相同路徑和特征函數(shù)的部件 可以合并成一個(gè)部件 ,其域值為 ).
針對(duì)每次迭代k,作者發(fā)現(xiàn)合并界面可以減少總代價(jià):
?Q4:針對(duì)多個(gè)候選部件,怎么選擇合適的?
在實(shí)際操作過(guò)程中,一個(gè)給定的邊 e 有多種候選組件 .
作者選擇用啟發(fā)式算法(合并界面)處理候選部件而不是在初始界面集就將邊綁定到特定的組件上。為了完成這個(gè)任務(wù),需要定義兩個(gè)部件如何進(jìn)行合并,以及他們的代價(jià)應(yīng)該怎樣估計(jì)。一旦完成對(duì)界面的合并,就可以從每個(gè)候選集選擇代價(jià)最小的界面。
合并候選集 和 要合并兩個(gè)集合 ,執(zhí)行上述過(guò)程的域合并的過(guò)程。候選部件集的代價(jià)通過(guò)集合中代價(jià)最小的部件確定,即? .
Q5:對(duì)交互圖中兩個(gè)頂點(diǎn)間的多條邊的處理:
表中包括 至少一個(gè)記錄,每個(gè)都代表圖中成對(duì)查詢之間的一條路徑,為了能完全將查詢 轉(zhuǎn)換到 ,將 邊 建模為一個(gè)超級(jí)邊 “super—edge” ,它的候選部件集是 每條邊的候選部件集的叉乘積 .
Q6:基于集合的交互:
大多語(yǔ)言支持集合表達(dá)。前述的模型沒(méi)有考慮集合操作的交互建模。例如,一個(gè)查找數(shù)字差異的語(yǔ)句輸出了一個(gè)成對(duì)差異的集合。多數(shù)情況下,把這些成對(duì)差異映射到一個(gè)多選擇的部件。
為了自動(dòng)的將 這種 表轉(zhuǎn)換成基于集合的交互,作者使用一種類似于提取模板函數(shù)的方法:
(1)首先收集 里所有的子樹(shù)
(2)針對(duì)每棵子樹(shù),尋找 它最近的祖先結(jié)點(diǎn)(祖先結(jié)點(diǎn)是list類型)為根的子樹(shù) .
(3)如果不存在這樣的子樹(shù),就停止。否則,用一個(gè)參數(shù)變量代替 中的 ? 生成一個(gè)模板祖先子樹(shù)
(4)若所有的模板祖先都相同,就將這些子樹(shù)作為一個(gè)集合,然后將這個(gè) 映射到一個(gè)集合邊,這條邊的候選部件是集合部件。
Q7:界面生成:
一旦確定了最優(yōu)的界面集集合 ,就從候選集合中根據(jù)每個(gè)部件的域 選出代價(jià)最低的部件。這時(shí)就可以運(yùn)行標(biāo)準(zhǔn)界面布局算法,然后為每個(gè)界面在web應(yīng)用程序中呈現(xiàn)一個(gè)選項(xiàng)卡。
?
?
小結(jié):
對(duì)整篇文章來(lái)說(shuō),最重要的部分就是 第 3/4/5 部分,這三部分重點(diǎn)講了作者對(duì)提出問(wèn)題的解決方案,通過(guò)建模,運(yùn)用合適的算法進(jìn)行解決。
這部分的內(nèi)容是最晦澀難懂的,因?yàn)樯婕昂芏鄶?shù)學(xué)專業(yè)名詞和計(jì)算機(jī)專業(yè)名詞,還有很多數(shù)學(xué)建模的過(guò)程。第二遍看,看了接近兩天,還是有一部分意思理解的不太準(zhǔn)確!可能需要多讀幾遍文章才能真的理解吧!
?
印象比較深的應(yīng)該是把部件映射問(wèn)題建模成集合覆蓋問(wèn)題來(lái)求解了,數(shù)學(xué)真的博大精深,任何現(xiàn)實(shí)問(wèn)題都可以用數(shù)學(xué)思維解決,學(xué)好數(shù)學(xué)真的太重要啦!
?
2019.8.18
綠色為今日閱讀新的認(rèn)識(shí)
總結(jié)
以上是生活随笔為你收集整理的Mining Precision Interface From Query Logs -- 学习笔记(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Apache Spark概述
- 下一篇: Mining Precision Int