業(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ǔ)料。。。
成果:

技術(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