1. 20大風(fēng)控文本分類算法-基于字符級的tfidf+邏輯回歸

        共 4953字,需瀏覽 10分鐘

         ·

        2022-06-24 12:58


        大家好,我是小伍哥,文本數(shù)據(jù)的處理,對于一個(gè)風(fēng)控策略或者算法,我覺得是必須要掌握的技能,有人說,我的風(fēng)控并不涉及到文本?我覺得這片面了,在非內(nèi)容風(fēng)控領(lǐng)域,文本知識也是非常有用的。

        用戶昵稱、地址啥的,這種絕大部分風(fēng)控場景都能遇到

        關(guān)系網(wǎng)絡(luò)的節(jié)點(diǎn)向量化,基本也是文本處理的思路

        行為序列,也能用文本的知識去處理,能捕捉非常有趣模式

        在這里開個(gè)系20大風(fēng)控文本分類算法,之前已經(jīng)寫的差不多了,慢慢更新,今天是第一講。本系列主要介紹了風(fēng)控場景下文本分類的基本方法,對抗文本變異,包括傳統(tǒng)的詞袋模型、循環(huán)神經(jīng)網(wǎng)絡(luò),也有常用于計(jì)算機(jī)視覺任務(wù)的卷積神經(jīng)網(wǎng)絡(luò),以及 RNN + CNN,試驗(yàn)完一遍,基本能搞定大部分的文本分類以及文本變異對抗問題。算是個(gè)保姆級的入門教程。

        數(shù)據(jù)集和預(yù)處理

        本文用一個(gè)風(fēng)險(xiǎn)彈幕數(shù)據(jù)集做實(shí)驗(yàn),該數(shù)據(jù)集包含19670條明細(xì)數(shù)據(jù),每一行都用 1(垃圾文本)和 0(正常文本)進(jìn)行了標(biāo)記。需要數(shù)據(jù)集的關(guān)注:小伍哥聊風(fēng)控,后臺回復(fù)【彈幕】獲取

        目標(biāo):針對直播間中存在的大量涉黃涉暴彈幕,進(jìn)行垃圾分類,將彈幕中不合法的內(nèi)容進(jìn)行識別并屏蔽。

        正常彈幕示例

        新人主播,各位老板多多關(guān)注???    0

        50077你賣我    0

        看看五雷咒的威力    0

        垃圾彈幕示例

        網(wǎng)站++沜買的私聊我    1

        安 KMD555 買-P-微    1

        摳逼加薇2928046748摳逼加薇2928046748摳逼。   1



        數(shù)據(jù)讀取和查看

        import os import pandas as pdpath  = '/Users/wuzhengxiang/Documents/DataSets/TextCnn'os.chdir(path)data = pd.read_csv('text_all.csv')
        #對數(shù)據(jù)進(jìn)行隨機(jī)打亂data = data.sample(frac=1, random_state=42)print(data.shape)(19670, 2)
        #查看0-1的比例,可以看出來,數(shù)據(jù)集基本上平衡data['label'].value_counts()1 98820 9788
        #查看前10行的數(shù)據(jù)data.head(10)text label17036 鄭 29526 Q 77544 15426 葩葩葩l 014173 網(wǎng)站盤需要買的私聊我. 114582 買家秀和賣家秀?01730 1776看v 01444 我又沒送你謝我干啥? 010439 7645 55562筘 02448 伽韋 sx111505 珂視頻箹 Ku 110423 影薇 w2753636 111782 胸還沒有寒磊的 大? 還奶子疼!0
        # 對文本進(jìn)行分字data['text'] = data['text'].apply(lambda x: ' '.join(x))data.head()

        數(shù)據(jù)讀取了,我們就要進(jìn)行預(yù)處理,很多文本分類的預(yù)處理,上來就直接去除各種特殊字符,但是在風(fēng)控中,我們不能這么操作,因?yàn)楹芏辔谋镜男畔ⅲ际前谔厥庾址锩?,甚至說特殊字符比正常文本的信息含量還要高。這里暫時(shí)不做處理,后續(xù)再提高模型精度的時(shí)候我們再進(jìn)行處。


        將數(shù)據(jù)集進(jìn)行分割,80%用于訓(xùn)練,20%用于測試:

        from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = \          train_test_split(data['text'],                                             data['label'],                                             test_size=0.2,                                             random_state=42                ) print(x_train.shape, x_test.shape, y_train.shape, y_test.shape) (15736,) (3934,) (15736,) (3934,)

        字符級的tfidf+邏輯回歸

        1、什么是N-Gram?

        n-gram 是從一個(gè)句子中提取的N 個(gè)(或更少)連續(xù)單詞的集合,這一概念中的“單詞”,也可以替換為“字符”,這個(gè)概念聽起來比較抽象,下面來看一個(gè)簡單的例子,考慮句子“小伍哥最靚”。

        它可以被分解為以下二元語法(2-grams)的集合。

        {'小 ; 伍 ; 哥 ; 最 ; 靚 ; 小伍 ; 伍哥 ; 哥最 ; 最靚'}


        也可以被分解為以下三元語法(3-grams)的集合。

        {小 ; 伍 ; 哥 ; 最 ; 靚 ; 小伍 ; 伍哥 ; 哥最 ; 最靚 ; 小伍哥 ; 伍哥最 ; 哥最靚'}


        這樣的集合分別叫作二元語法袋(bag-of-2-grams)及三元語法袋(bag-of-3-grams)。這里袋(bag)這一術(shù)語指的是,我們處理的是標(biāo)記組成的集合,而不是一個(gè)列表或序列,即標(biāo)記沒有特定的順序,這一系列分詞方法叫作詞袋(bag-of-words)。

        上面是漢語的文本級的,當(dāng)然對于英語或者漢語拼音,我們可以做成字符級的,下面以cold這個(gè)單詞為例,得到如下的詞袋組合

        那么,什么是 n-gram 呢?我們拿下面????這句話舉例。

        2、為什么要用NGram?

        能夠捕捉順序關(guān)系數(shù)據(jù),對于單個(gè)文本【小,伍,哥】和【哥,伍,小】是等價(jià)的,而N-Gram則是不等價(jià)的,而很多場景或者文本,順序是至關(guān)重要。能夠捕捉片段信息,每個(gè)連續(xù)的片段都進(jìn)行評估,更有利于發(fā)現(xiàn)更多可遷移的策略,類似于CNN的平移不變性,或者數(shù)TextCNN 的滑窗效果。分字或者分詞后進(jìn)行關(guān)聯(lián)規(guī)則挖掘,并不能獲得這種比較長的片段信息。


        分類模型構(gòu)建

        這里比較關(guān)鍵的參數(shù)ngram_range=(1, 5) ,直接就得到了5元的n-gram,,非常強(qiáng)大,token_pattern=r"(?u)\b\w+\b"這個(gè)參數(shù)解決中文的分詞問題,如果不加,默認(rèn)的得不到一元的詞。外國佬寫的包,對中文不大友好。


        # 加載模型from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, auc, roc_auc_score import joblib 
        #tf-idf訓(xùn)練vectorizer_word = TfidfVectorizer( max_features=800000, token_pattern=r"(?u)\b\w+\b", min_df=1,       #max_df=0.1,                                      analyzer='word',                                      ngram_range=(15     )     vectorizer_word.fit(x_train) tfidf_train = vectorizer_word.transform(x_train) tfidf_test = vectorizer_word.transform(x_test) #查看詞典的大小 vectorizer_word.vocabulary_ len(vectorizer_word.vocabulary_)
        邏輯回歸模型的訓(xùn)練lr_word = LogisticRegression( solver='sag', verbose=2) lr_word.fit(tfidf_train, y_train) # 保存模型,下次可以直接使用 joblib.dump(lr_word, 'lr_word_ngram.pkl')
        #模型讀取 model = joblib.load(filename="lr_word_ngram.pkl") y_pred_word = lr_word.predict(tfidf_test) print(accuracy_score(y_test, y_pred_word)) 0.9405185561769192

        第一個(gè)模型就得到了0.9405185561769192的準(zhǔn)確率,這個(gè)開局還是不錯(cuò)的,可以看到,一個(gè)簡單的邏輯回歸模型,威力還是非常巨大的,為什么能夠這么厲害,主要是特征提取的方法,捕獲了大量的信息片段,和CNN的掃描邏輯基本一致,但是計(jì)算復(fù)雜度缺要小很多,因此,邏輯回歸+tfidf是文本分類非常好的基模型,有利于快速的上線。


        ···  END  ···

        往期精彩:
        萬萬沒想到,TF-IDF是這么計(jì)算的!
        消失的網(wǎng)絡(luò)-基于圖流的異常檢測算法SpotLight
        基于深度學(xué)習(xí)Autoencoder的信用卡欺詐異常檢測,效果非常牛逼
        第七屆信也科技杯圖算法大賽—欺詐用戶風(fēng)險(xiǎn)識別,獎(jiǎng)金31w
        信用卡欺詐孤立森林實(shí)戰(zhàn)案例分析,最佳參數(shù)選擇、可視化等
        孤立森林,一個(gè)通過XJB亂分進(jìn)行異常檢測的算法
        上市公司地址相似度計(jì)算&構(gòu)建關(guān)系圖譜
        從大量文本中挖掘'典型意見'-基于DBSCAN的文本聚類實(shí)戰(zhàn)
        情侶、基友、渣男和狗-基于時(shí)空關(guān)聯(lián)規(guī)則的影子賬戶挖掘
        風(fēng)控策略的自動(dòng)化生成-利用決策樹分分鐘生成上千條策略
        SynchroTrap-基于松散行為相似度的欺詐賬戶檢測算法
        社區(qū)發(fā)現(xiàn)之標(biāo)簽傳播算法(LPA)

        長按關(guān)注本號                長按加我好友

                 

        瀏覽 40
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 欧美精品电影在线观看 | 骚穴在线 | 又粗又孟又色又爽视频在线观看 | 女厕蹲坑偷拍嘘嘘高清精品 | 午夜寂寞少妇aa**毛片 |