<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【機器學(xué)習(xí)】20大風(fēng)控文本分類算法-基于字符級的tfidf+邏輯回歸

          共 4662字,需瀏覽 10分鐘

           ·

          2022-06-28 01:33


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

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

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

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

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

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

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

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

          正常彈幕示例

          新人主播,各位老板多多關(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ù)進行隨機打亂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
          # 對文本進行分字data['text'] = data['text'].apply(lambda x: ' '.join(x))data.head()

          數(shù)據(jù)讀取了,我們就要進行預(yù)處理,很多文本分類的預(yù)處理,上來就直接去除各種特殊字符,但是在風(fēng)控中,我們不能這么操作,因為很多文本的信息,都是包含在特殊字符里面,甚至說特殊字符比正常文本的信息含量還要高。這里暫時不做處理,后續(xù)再提高模型精度的時候我們再進行處。


          將數(shù)據(jù)集進行分割,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 是從一個句子中提取的N 個(或更少)連續(xù)單詞的集合,這一概念中的“單詞”,也可以替換為“字符”,這個概念聽起來比較抽象,下面來看一個簡單的例子,考慮句子“小伍哥最靚”。

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

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


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

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


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

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

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

          2、為什么要用NGram?

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


          分類模型構(gòu)建

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


          # 加載模型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

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


          ···  END  ···

          往期精彩回顧




          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产又白又嫩又爽又黄 | 大鸡巴操小穴高潮视频 | 欧美大操逼 | 日韩一级国产电影 | 欧美天天色 |