技術(shù)支持業(yè)務(wù)的機(jī)器學(xué)習(xí)算法實(shí)踐

業(yè)務(wù)背景:

? ? 隨著技術(shù)業(yè)務(wù)的產(chǎn)品化,用戶對(duì)技術(shù)產(chǎn)品的使用過(guò)程中存在很多疑問(wèn),我們組織應(yīng)運(yùn)而生,主要負(fù)責(zé)技術(shù)產(chǎn)品日常過(guò)程中的答疑;在答疑過(guò)程中會(huì)遇到很多對(duì)產(chǎn)品有抱怨的用戶,這些用戶比較大的特征是在會(huì)話語(yǔ)料、咨詢頻次、滿意度方面;其他數(shù)據(jù)層還好,在語(yǔ)料層機(jī)器比較難識(shí)別,在我所處的案例過(guò)程中,我一開(kāi)始用的是開(kāi)源的NLP包,snownlp,但是snownlp的切詞不夠強(qiáng)大,而我們業(yè)務(wù)過(guò)程中又會(huì)存在很多的專有名詞,僅憑市場(chǎng)上的詞典無(wú)法很好的做切詞處理,需要自己建立詞典,所以我這邊整合了jieba的切詞,和snownlp所用到的貝葉斯分類(lèi)器對(duì)文本進(jìn)行分類(lèi)。


數(shù)據(jù)鏈路:

? ? 文本切詞 -> 去stop word -> 用bag of word模型映射成為詞向量 -> 基于樸素貝葉斯的句子分類(lèi)計(jì)算


原理似乎很簡(jiǎn)單。。。但是在此之前我干了啥。。。因?yàn)槲沂抢鋱?chǎng)王,發(fā)起語(yǔ)料收集之后沒(méi)人鳥(niǎo)我。。。

????1.不斷地從語(yǔ)料里找專有名詞

????2.不斷地在語(yǔ)料里找各個(gè)分類(lèi)的句子,直到形成每個(gè)庫(kù)都有上千行的語(yǔ)料。。。


成果:

有點(diǎn)小成績(jī),之前沒(méi)白干,耶~(以防你們認(rèn)為我不開(kāi)心)


技術(shù)點(diǎn):

? ? · 切詞 ---- 一個(gè)反復(fù)而又繁瑣的過(guò)程

? ? 這個(gè)基本是調(diào)用jieba的接口就ok,jieba庫(kù)支持自己定制詞語(yǔ),然后程序啟動(dòng)的時(shí)候load進(jìn)來(lái)就好。

? ? 詞典有三列,自己定義的名詞,權(quán)重,詞性

? ? 然后調(diào)用jieba的cut方法即可

mvn 100 n

git 100 n


? ? · 訓(xùn)練貝葉斯分類(lèi)器

? ? ? ? 這個(gè)訓(xùn)練過(guò)程干了什么事情:1.生成詞語(yǔ)圖譜向量 2.把切好的詞映射成詞向量 3.生成分類(lèi)向量和各個(gè)大類(lèi)的概率 p0V, p1V, pAb(這三個(gè)東西組成了分類(lèi)器的核心)

? ? 解釋一下這三個(gè)變量背后所代表的意義:

? ? ????p1V、p0V(詞典里的每個(gè)詞屬于某個(gè)類(lèi)的概率向量)

? ? ????pAb(詞典里某個(gè)類(lèi)出現(xiàn)的概率)? ? ? ??

? ? · 樸素貝葉斯分類(lèi)預(yù)測(cè)

? ? ? ? 有了各個(gè)分類(lèi)向量和分類(lèi)概率,在加上詞典,就可以進(jìn)行分類(lèi)預(yù)測(cè)了嘿嘿

? ? ? ? 基于貝葉斯條件概率,加上樸素假設(shè)(每個(gè)詞都是獨(dú)立變量,這個(gè)是簡(jiǎn)化計(jì)算)

def classifyNB(self, vec2Classify):

????if sum(vec2Classify) < 2: # 這里我基于業(yè)務(wù)做了過(guò)濾,因?yàn)橛脩羧绻徽f(shuō)了一句話,一般不足以構(gòu)成abusive,當(dāng)然也會(huì)出現(xiàn)用戶爆粗的時(shí)候只說(shuō)了一句話,這樣的話他前后也會(huì)提供了一些abusive的詞,所以也不影響預(yù)測(cè),這個(gè)只是經(jīng)驗(yàn)處理

????????return 0

# 這兩行就是基于條件概率的預(yù)測(cè),取log是對(duì)概率預(yù)測(cè)做了平滑處理,以防概率為0和概率太小導(dǎo)致的算法預(yù)測(cè)失效的情況

????p1 = sum(vec2Classify * self.p1Vec) + log(self.pClass1)

????p0 = sum(vec2Classify * self.p0Vec) + log(1.0 - self.pClass1)

????if p1 > p0:

????????return 1

????else:

????????return 0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容