李沂洋,趙浩東,王祖浩,尹寶鑫,劉勁男
(長(zhǎng)春理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),長(zhǎng)春130022)
實(shí)體識(shí)別[1]在自然語(yǔ)言處理方面有很廣泛的應(yīng)用,它指的是識(shí)別一段文本中具有特定意義的實(shí)體,例如地名、人名、組織機(jī)構(gòu)名稱等一些具有實(shí)際含義的實(shí)體。自然語(yǔ)言處理技術(shù)多用于和用戶行為相關(guān)的交互功能方面,例如對(duì)于用戶輸入文本框內(nèi)容的分析就可能會(huì)用到實(shí)體識(shí)別技術(shù),對(duì)于用戶的評(píng)論就可能會(huì)用到情感分析方面的技術(shù)。
目前,有很多種方法可以實(shí)現(xiàn)實(shí)體識(shí)別,但針對(duì)于不同的應(yīng)用場(chǎng)景,不同的算法之間存在一些原理與實(shí)現(xiàn)效果上的差異。其實(shí)很早之前的命名實(shí)體識(shí)別方法是基于規(guī)則原理的,后來(lái)由于基于數(shù)據(jù)規(guī)模龐大的語(yǔ)料庫(kù)的統(tǒng)計(jì)方法廣泛應(yīng)用于自然語(yǔ)言處理,與之相對(duì)應(yīng)的一些機(jī)器學(xué)習(xí)的算法也應(yīng)用于實(shí)體識(shí)別領(lǐng)域。
這些方法包括有監(jiān)督的學(xué)習(xí)方法,例如基于馬爾科夫模型、條件隨機(jī)場(chǎng)等的方法,一些無(wú)監(jiān)督的學(xué)習(xí)算法也有涉及。當(dāng)然最重要的是伴隨著深度學(xué)習(xí)逐漸應(yīng)用于自然語(yǔ)言處理領(lǐng)域,主角BiLSTM(Bi-directional Long Short-Term Memory,雙向長(zhǎng)短時(shí)記憶循環(huán)神經(jīng)網(wǎng)絡(luò))+CRF(Conditional Random Field,條件隨機(jī)場(chǎng))逐漸成為實(shí)現(xiàn)實(shí)體識(shí)別的主流算法。
在推薦系統(tǒng)方面,協(xié)同過(guò)濾推薦算法是誕生最早的,比較著名的推薦算法。它通過(guò)挖掘用戶歷史行為數(shù)據(jù)來(lái)識(shí)別出用戶的偏好。該算法主要分為兩個(gè)分支,分別是基于用戶的協(xié)同過(guò)濾算法(user-based col?laborative filtering)和基于商品的協(xié)同過(guò)濾算法(itembased collaborative filtering)。
既然要模擬實(shí)體識(shí)別,我們先需要設(shè)置實(shí)體識(shí)別的標(biāo)簽(label),事實(shí)上標(biāo)簽的設(shè)置種類(lèi)有很多,這里我們以BIO 標(biāo)注法為例,即此處設(shè)置7 個(gè)標(biāo)簽:“O”表示尋常字,“B-PER”表示人名的開(kāi)頭,“I-PER”表示人名的剩余部分(除去開(kāi)頭字的部分),“B-LOC”表示地名的開(kāi)頭,“I-LOC”表示地名的剩余部分,“B-ORG”表示組織的開(kāi)頭,“I-ORG”表示組織的剩余部分。
這些標(biāo)簽標(biāo)記在我們的語(yǔ)料庫(kù)中,帶有標(biāo)簽的語(yǔ)料庫(kù)就是我們用于訓(xùn)練的樣本,我們通過(guò)語(yǔ)料庫(kù)訓(xùn)練得到詞向量。詞向量本質(zhì)是把一組字用低維稠密矩陣來(lái)表示,每個(gè)字映射對(duì)應(yīng)一個(gè)1*維度的向量,表示把這個(gè)字投射到多維空間中,而含義相近的字之間的距離更近,由此可以表示字與字之間的關(guān)系,這就是詞向量的存在意義。傳統(tǒng)的one-hot 編碼維度太高而且非常稀疏,不合適用來(lái)訓(xùn)練模型。
生成詞向量的方法有很多,從早期的Word2Vec、ELMo 到最近的BERT,可以說(shuō)獲取詞向量的方法越來(lái)越合理,對(duì)于精確率的提升幫助越來(lái)越大。
其實(shí)CRF 的應(yīng)用替代了BiLSTM 中Softmax 的地位,我們本可以用BiLSTM 加上激活函數(shù)Softmax 來(lái)得到一句話中每個(gè)字對(duì)應(yīng)七個(gè)分類(lèi)標(biāo)簽的概率值矩陣,標(biāo)簽序列的概率就是序列中每個(gè)字對(duì)應(yīng)標(biāo)簽概率的乘積。
但是實(shí)體識(shí)別的應(yīng)用環(huán)境是一個(gè)語(yǔ)義連貫性很強(qiáng)的句子,考慮字與字之間的關(guān)系是必不可少的環(huán)節(jié),顯然Softmax 沒(méi)法做到這一點(diǎn)。換句話說(shuō),其實(shí)Softmax無(wú)法體現(xiàn)字與字之間的約束關(guān)系。舉個(gè)例子,之前我們定義標(biāo)簽的時(shí)候說(shuō)過(guò),B-PER 是表示人名的開(kāi)頭,IPER 則是人名的剩余部分,顯然,幾乎不可能出現(xiàn)兩個(gè)B-PER 標(biāo)記的字緊挨著出現(xiàn)的情況,但是Softmax 并沒(méi)有從我們的訓(xùn)練樣本中得到這個(gè)約束信息,從而導(dǎo)致確定最終分類(lèi)標(biāo)簽時(shí)的干擾信息太多。Softmax 的示意圖如圖1 所示。

圖1[4] Softmax示意圖
相比而言CRF 則可以做到這一點(diǎn),它著重的考慮了上下文關(guān)系對(duì)于結(jié)果的影響,我們?cè)谙旅鏁?huì)介紹這個(gè)約束條件具體在CRF 的哪個(gè)環(huán)節(jié)得以體現(xiàn),CRF 示意圖如圖2 所示。

圖2[4] CRF示意圖
其實(shí)我們知道,BiLSTM 最終輸出的是每個(gè)字對(duì)應(yīng)的標(biāo)簽得分情況,由BiLSTM 得到的標(biāo)簽得分稱為發(fā)射得分,假設(shè)用戶輸入的句子包含10 個(gè)字,以1,2,3,4,5,6,7,8,9,10 為索引。然后為分類(lèi)標(biāo)簽添加索引如表1 所示。

表1 分類(lèi)標(biāo)簽索引表
因?yàn)橛?0 個(gè)字,對(duì)應(yīng)7 個(gè)標(biāo)簽,所以該語(yǔ)句的發(fā)射矩陣X為10×7 的矩陣,xij表示第i個(gè)字對(duì)應(yīng)第j個(gè)標(biāo)簽的概率。
CRF 中的轉(zhuǎn)移得分是關(guān)鍵所在,我們用T來(lái)表示轉(zhuǎn)移矩陣,tij則表示由第i個(gè)標(biāo)簽轉(zhuǎn)移到第j個(gè)標(biāo)簽的概率,i向j轉(zhuǎn)移的意思是當(dāng)前字的標(biāo)簽是i標(biāo)簽,那么其后一個(gè)字的標(biāo)簽是j標(biāo)簽這種情況。那么很明顯,我們一共有7 個(gè)標(biāo)簽,所以轉(zhuǎn)移矩陣是7×7 的矩陣。轉(zhuǎn)移矩陣的關(guān)鍵之處在于,它體現(xiàn)出了我們之前提到的約束關(guān)系,例如,t25表示B-PER 標(biāo)簽對(duì)應(yīng)的某個(gè)字的后面一個(gè)字的標(biāo)簽是I-LOC 的概率,顯然我們知道,訓(xùn)練數(shù)據(jù)中幾乎不可能出現(xiàn)這種情況,試想一下,一個(gè)人名的開(kāi)頭字后面緊鄰的字的標(biāo)簽是一個(gè)地名的中間字。這幾乎是不可能出現(xiàn)的情況。所以說(shuō),可想而知,轉(zhuǎn)移矩陣中t25的數(shù)值應(yīng)該接近于0,這個(gè)就很好的體現(xiàn)出了約束關(guān)系,Softmax 無(wú)法做到這一點(diǎn)。
上面都是對(duì)于CRF 所涉及到的一些概念的描述,其實(shí)它真正巧妙的地方在于它的算法理念,即尋找一條概率最大的路徑。例如我們上面舉例一句話有10個(gè)字,每個(gè)字有7 個(gè)標(biāo)簽,每個(gè)字有7 種可能,那么這句話總共有7 的10 次方種標(biāo)簽分類(lèi)組合,每一種成為一條路徑。在這里也可以看出Softmax 和CRF 的區(qū)別,前者并沒(méi)有考慮前后,所以在前者眼里,不過(guò)是10組7 分類(lèi)問(wèn)題,而CRF 是考慮前后關(guān)系的,在后者眼里,上面這個(gè)問(wèn)題是1 組710分類(lèi)問(wèn)題。
在BiLSTM-CRF 訓(xùn)練過(guò)程中,模型會(huì)不斷更新,從而使得最優(yōu)路徑得分占比變大,即損失函數(shù)計(jì)算的是得分最高的路徑的得分占所有路徑得分之和的百分比,是用交叉熵來(lái)計(jì)算的,其形式為:

Si表示第i條路徑的得分,那么所有路徑的得分就是:

上式中S的計(jì)算主要與之前講的發(fā)射得分和轉(zhuǎn)移得分有關(guān):

即第i條路徑得分等于發(fā)射得分與轉(zhuǎn)移得分之和。這條路徑對(duì)應(yīng)的發(fā)射得分和轉(zhuǎn)移得分可以這么計(jì)算,假如我們這條路徑是這樣的:

上述數(shù)字為對(duì)應(yīng)的標(biāo)簽index,那么對(duì)應(yīng)該路徑的發(fā)射得分和轉(zhuǎn)移得分就是:

知道了如何計(jì)算最優(yōu)路徑,下一步就是想辦法找到最優(yōu)路徑,通常采用維特比算法。它是一種動(dòng)態(tài)規(guī)劃形式的尋找最優(yōu)解的算法,可以這么理解,它每次只走一步,每一步都是最優(yōu)的方案,圖3 是維特比算法的圖解。

圖3 維特比算法圖解
如圖3 所示,W表示當(dāng)前要確定標(biāo)簽的字,t1~t3為標(biāo)簽分類(lèi),假設(shè)有3 類(lèi)。首先從起點(diǎn)到W1 的標(biāo)簽有3 條路,因?yàn)槠瘘c(diǎn)到每個(gè)點(diǎn)都只有1 條路,所以這三條路我們本次不做刪除操作,只有到達(dá)同一個(gè)結(jié)點(diǎn)有很多條路時(shí)我們才刪除,盡管這三條路有長(zhǎng)有短。
然后再看W2,到達(dá)W2 對(duì)應(yīng)的t1 標(biāo)簽有三條路,分別來(lái)自W1 的3 個(gè)標(biāo)簽,我們圖中取了最短的一條,如圖所示是來(lái)自于W1 對(duì)應(yīng)的t2 標(biāo)簽,于是我們刪除另外兩條路。對(duì)W2 對(duì)應(yīng)的t2 和t3 標(biāo)簽做相同處理。這樣我們就得到了從W1到W2 的3 條路,以此類(lèi)推,最終,我們從W3 對(duì)應(yīng)終點(diǎn)的3 條路中選擇最短的一條路,即圖中所示紅色路徑,即為最優(yōu)路徑。
縱觀整個(gè)CRF 的大致流程,我們可以體會(huì)出CRF在實(shí)體識(shí)別方面是優(yōu)于Softmax 的,并不是說(shuō)Softmax算法不好,而是在處理各自適合的問(wèn)題的時(shí)候,都有比較鮮明且優(yōu)越的特點(diǎn)。顯然在實(shí)體識(shí)別方面,CRF 善于結(jié)合前后文的特點(diǎn)使得其成為實(shí)體標(biāo)簽的分類(lèi)利器。
大多搜索引擎使用的是TF-IDF 的優(yōu)化模型——BM25 模型,主要針對(duì)TF-IDF 逆文檔頻率對(duì)于某些特定狀況進(jìn)行了優(yōu)化,如下所示:
doc1=“北京東城三環(huán)外洋人咖啡館”
doc2=“北京東城咖啡館”
例1
當(dāng)我們進(jìn)行意圖識(shí)別時(shí),例如搜索“我想找一家咖啡館”,兩個(gè)document 的匹配度對(duì)于TF-IDF 是一致的,顯然我們不希望內(nèi)容過(guò)于具體,不希望到達(dá)doc1那樣的精確度,而是能夠理解用戶想要找到“北京咖啡館”這樣的目的即可,因?yàn)檫@樣的不必要的限定會(huì)使得搜索精度下降。所以相對(duì)于doc1,選擇doc2 是更加明智的選擇。那么BM25 加入的域長(zhǎng)度懲罰機(jī)制對(duì)于意圖識(shí)別就有著很大的幫助。

圖4[3] BM25主要組成

表2 參數(shù)
下面為R=0 后二元獨(dú)立模型的簡(jiǎn)化公式:

簡(jiǎn)化后IDF 公式如式(5)。
當(dāng)然在搜索引擎中為了保證評(píng)分為正,會(huì)在對(duì)數(shù)內(nèi)部加1:

而第二部分表征的是查詢?cè)~文檔權(quán)值,是查詢?cè)~針對(duì)于該文檔的權(quán)重。fi表示該詞在文檔中的詞頻,dl為查詢的域的字符串長(zhǎng)度,avdl 為所有預(yù)字符串的平均長(zhǎng)度,主要調(diào)參為k1以及b。b 表征的是命中域長(zhǎng)度對(duì)于整個(gè)評(píng)分的影響程度,當(dāng)dl 超過(guò)平均域長(zhǎng)度時(shí),K值會(huì)大于1,則會(huì)減小總體評(píng)分。這樣的懲罰機(jī)制正好解決了例1 提出的問(wèn)題。

最低評(píng)分閾值判定對(duì)于本模型是必要的,這是衡量搜索引擎能否準(zhǔn)確完成意圖識(shí)別的核心環(huán)節(jié)。由于同時(shí)命中AB 后正確率相比單獨(dú)命中A 或B 要高得多,在這種情況下無(wú)需進(jìn)行后期模型預(yù)測(cè),可以直接從搜索引擎中獲取預(yù)測(cè)結(jié)果;而當(dāng)AB 無(wú)法命中時(shí),此時(shí)意圖識(shí)別的準(zhǔn)確率將無(wú)法保證,甚至多數(shù)出現(xiàn)牽強(qiáng)匹配的現(xiàn)象,因此我們需要對(duì)上面的評(píng)分機(jī)制進(jìn)行優(yōu)化,以達(dá)到明顯分離匹配AB 與未匹配AB 的評(píng)分,從而有效在準(zhǔn)確率與召回率之間進(jìn)行折中。
對(duì)于一個(gè)數(shù)據(jù)量為1000~10W 左右的意圖識(shí)別庫(kù),由于AB 形式的專有名詞受限,對(duì)于意圖識(shí)別庫(kù)來(lái)說(shuō),大部分情況有且僅有一個(gè)名詞嚴(yán)格匹配,所以通過(guò)簡(jiǎn)化BM25 計(jì)算公式可得:(搜索引擎默認(rèn)b=0.75,k1=1.2)


但是對(duì)于前項(xiàng)w(A)+w(B)的穩(wěn)定性顯然不足,對(duì)于大多數(shù)情況,ni 的hit 數(shù)不會(huì)超過(guò)N/10,但是隨著ni 的大小變化,W 在ni<100 范圍內(nèi)會(huì)發(fā)生突變(如下圖),并且隨著數(shù)據(jù)規(guī)模N 的增大峰值會(huì)更加明顯,這對(duì)于衡量最低評(píng)分閾值顯然不盡人意。

圖5 W權(quán)重變化圖
因此,對(duì)于此種情況,我們并不是要將整個(gè)IDF 曲線變化完全填平,而是我們?cè)诤饬吭u(píng)分閾值的時(shí)候進(jìn)行“削峰”操作,并且不會(huì)影響整體的變化趨勢(shì),讓權(quán)重變化不會(huì)因?yàn)閚i 的變化發(fā)生突變。因此我們?cè)诠街屑尤胍粋€(gè)IDF 平滑項(xiàng)R(ni),其函數(shù)變化與ni(當(dāng)前分割詞命中數(shù))相關(guān):

在大量數(shù)據(jù)試驗(yàn)下,α=2.2,β=0.1 較為匹配,下面是平滑后的曲線與原始BM25 計(jì)算權(quán)重比對(duì):

圖6 加入平滑引子(N=10w)
明顯發(fā)現(xiàn)通過(guò)加入平滑因子后,整個(gè)函數(shù)曲線的峰值被削減以及平滑,并且R 對(duì)后面的曲線影響并不大,因此我們可以對(duì)優(yōu)化后的曲線進(jìn)行評(píng)分閾值衡量。
現(xiàn)在,對(duì)于特定關(guān)鍵詞N,我們對(duì)于評(píng)分的計(jì)算公式變?yōu)椋?/p>

此時(shí),設(shè)置閾值將會(huì)變得簡(jiǎn)單,此時(shí)我們給出閾值計(jì)算公式:

W'(N)是數(shù)據(jù)規(guī)模為N 時(shí)的無(wú)完全匹配項(xiàng)的權(quán)重,則avg(W'(N))只是其命中項(xiàng)在100 以下的平均值(此值基本保持在[3.0,3.5]區(qū)間內(nèi),默認(rèn)取3.0),再將數(shù)據(jù)規(guī)模帶入公式,即可計(jì)算動(dòng)態(tài)閾值。
通過(guò)以上的相關(guān)優(yōu)化以及創(chuàng)新,我們最終得到了一個(gè)考慮到多方面情況,并且靈活、快速的意圖識(shí)別模型。
數(shù)據(jù)收集選取ELK 作為核心系統(tǒng),輸入數(shù)據(jù)是用戶對(duì)于項(xiàng)目的評(píng)分,系統(tǒng)依據(jù)用戶操作類(lèi)型給予用戶評(píng)分,具體操作類(lèi)型包括收藏、購(gòu)買(mǎi)、評(píng)價(jià)、瀏覽、點(diǎn)贊、分享、評(píng)論。設(shè)定參數(shù)λ,日志用戶操作數(shù)n,用戶操作評(píng)分S,用戶評(píng)分Score,使得當(dāng)前評(píng)分計(jì)算公式為:

評(píng)分采取1-5 分制評(píng)分體系,值越大表明用戶的喜好程度越高,未評(píng)分項(xiàng)目評(píng)分均用0 來(lái)代替。
本系統(tǒng)選用余弦相似度來(lái)作為計(jì)算用戶相似度的一個(gè)判斷標(biāo)準(zhǔn)。其公式如下:

上式中,N(i)與N(j)分別表示喜歡物品i 和喜歡物品j 的用戶數(shù)。使用該方法的好處是可以避免熱門(mén)物品和很多物品相似的可能性,有利于挖掘長(zhǎng)尾信息。為了進(jìn)一步增加推薦的準(zhǔn)確度,提高推薦的覆蓋率和推薦的多樣性,我們可以進(jìn)一步將相似度矩陣W進(jìn)行歸一化。

ItemCF 通過(guò)如下公式計(jì)算用戶u 對(duì)一個(gè)物品j 的興趣:

N(u)為用戶喜歡的物品集合,S(j,K)為與物品j最相似的K 個(gè)物品的集合,Wij物品j 和i 的相似度,rui用戶u 對(duì)物品i 的興趣。
ItemCF 模型與UserCF 模型實(shí)現(xiàn)過(guò)程相近,不過(guò)考慮到對(duì)于電商平臺(tái)來(lái)說(shuō),用戶數(shù)量要遠(yuǎn)多于商品數(shù)量,但很多用戶相互之間并沒(méi)有對(duì)同樣的物品產(chǎn)生過(guò)行為,所以采用倒查表以及引入稀疏矩陣統(tǒng)計(jì)不同用戶同時(shí)擁有的物品數(shù)量。
(1)計(jì)算用戶之間的相似度。
本系統(tǒng)選用余弦相似度來(lái)作為計(jì)算用戶相似度的一個(gè)判斷標(biāo)準(zhǔn)。其公式如下:

上式中,N(u)與N(v)分別表示有用戶u 操作的商品數(shù)以及用戶v 操作的商品數(shù)。使用該方法的好處是可以活躍和很多其他用戶相似的可能性。為了進(jìn)一步增加推薦的準(zhǔn)確度,降低熱門(mén)物品對(duì)相似度的影響,對(duì)wuv作進(jìn)一步改進(jìn):

其中N(i)表示商品i 的操作人數(shù)。
(2)根據(jù)物品的相似度和用戶的歷史行為給用戶生成推薦列表。
ItemCF 通過(guò)如下公式計(jì)算用戶u 對(duì)一個(gè)物品j 的興趣:

N(i)是對(duì)物品i 有過(guò)行為的用戶集合,S(u,K)為和用戶u 興趣最接近的K 個(gè)用戶,wuv用戶u 和用戶v的興趣相似度,rvi用戶v 對(duì)物品i 的興趣。
在基于鄰域算法的推薦系統(tǒng)[2]中,有一個(gè)重要的參數(shù)K,K 越大則基于鄰域算法推薦結(jié)果就越熱門(mén),K 增加會(huì)降低系統(tǒng)的覆蓋率,對(duì)長(zhǎng)尾或餐品的推薦越來(lái)越少。由于準(zhǔn)確率和召回率與K 值不是單純的正相關(guān)和負(fù)相關(guān),因此我們可以將準(zhǔn)確率和召回率作為模型評(píng)估標(biāo)準(zhǔn),選取合適的K 值。當(dāng)然,推薦結(jié)果的精度對(duì)K也不是特別敏感,只要選在一定的區(qū)域內(nèi),就可以獲得不錯(cuò)的精度。
推薦結(jié)果的準(zhǔn)確率定義為:

其中R(u)是根據(jù)用戶在訓(xùn)練集上的行為給用戶作出的推薦列表,而T(u)是用戶在測(cè)試集上的行為列表。最終針對(duì)不同的K 值,我們可以畫(huà)出準(zhǔn)確率/召回率曲線尋找最佳K 值。
本文介紹了有關(guān)微信小程序在搜索和推薦系統(tǒng)優(yōu)化方面可采用的技術(shù)模型,其實(shí)技術(shù)是不斷發(fā)展的,微信小程序日益發(fā)展,必然將帶動(dòng)一系列技術(shù)層面的革新與探索,本文借鑒了推薦系統(tǒng)領(lǐng)域比較成熟的協(xié)同過(guò)濾算法以及實(shí)體識(shí)別領(lǐng)域的BiLSTM+CRF 模型來(lái)為電商所需要的接口模型提供了假設(shè)與方案。