首頁>Club>
簡訊的日誌資料2000多萬的資料,請問如何對這些資料的簡訊內容做精確的資料分類?
7
回覆列表
  • 1 # elverys

    機器學習按性質來看,可以分為三大類:分類(監督)迴歸(監督)聚類(半監督)垃圾簡訊通常用已標記的簡訊資料,對未知的簡訊進行判斷,其屬於機器學習中的分類性質。在Python中有很多機器學習的模組,比如Sklearn、Tensorflow、Caffe等,可以很方便地呼叫一些機器學習的演算法。垃圾簡訊識別

    從技術方法上可以使用樸素貝葉斯機器學習模型對簡訊進行分類:

    資料集用的常見的80w條帶標籤的中文簡訊,下載連結https://github.com/hrwhisper/SpamMessage/blob/master/data/%E5%B8%A6%E6%A0%87%E7%AD%BE%E7%9F%AD%E4%BF%A1.txt

    1:資料處理先看看資料的樣子:

    import pandas as pd data = pd.read_csv(r"H:\RubbishMessage\data\80w.txt",encoding="utf-8",sep=" ",header=None) data.head()

    最後一列為簡訊的內容,倒數第二列則是簡訊的型別,0表示正常簡訊,1表示垃圾簡訊。然後,我們對簡訊內容按照不同的型別(正常簡訊和垃圾簡訊)進行分割和分詞:

    # 垃圾簡訊

    import jieba

    spam = data[data[1] == 1]

    spam[2] = spam[2].map(lambda x:" ".join(jieba.cut(x)))

    spam.head()

    # 正常簡訊

    normal = data[data[1] == 0]

    normal[2] = normal[2].map(lambda x:" ".join(jieba.cut(x)))

    normal.head()

    分別將不同型別分詞後的簡訊儲存為不同的檔案:

    spam.to_csv("soam.csv",encoding="utf-8",header=False,index=False,columns=[2]) normal.to_csv("normal.csv",encoding="utf-8",header=False,index=False,columns=[2])

    模型選擇和訓練

    在此我們沒有選擇Sklearn或是其他的深度學習庫,而是選用NLTK自然語言處理庫來進行貝葉斯分類。匯入模組:

    import nltk.classify.util from nltk.classify import NaiveBayesClassifier from nltk.corpus import PlaintextCorpusReader import random

    載入剛剛匯出的簡訊檔案:

    載入簡訊語料庫 message_corpus = PlaintextCorpusReader("./",["soam.csv","normal.csv"]) all_message = message_corpus.words()

    定義一個特徵函式,用於生成特徵:

    def massage_feature(word,num_letter=1): return {"feature":word[-num_letter:]}

    對簡訊特徵進行標記提取:

    labels_name = ([(massage,"垃圾") for massage in message_corpus.words("soam.csv")]+[(massage,"正常") for massage in message_corpus.words("normal.csv")]) random.seed(7) random.shuffle(labels_name)

    訓練並預測模型

    from nltk.classify import accuracy as nltk_accuracy featuresets = [(massage_feature(n),massage) for (n,massage) in labels_name] train_set,test_set = featuresets[2000:],featuresets[:2000] classifier = NaiveBayesClassifier.train(train_set)

    最後,咱們看看預測的準確率怎麼樣:

    print("結果準確率:",str(100*nltk_accuracy(classifier,test_set))+str("%"))

    在沒有調整最佳化引數的情況下,有百分之八十幾的準確率,後續調節引數,進行最佳化即可。

    第二個方法你可以使用NLPIR大資料語義智慧分析平臺對簡訊資料的分析挖掘,具體功能如下:

    1. 精準採集:對境內外網際網路海量資訊實時精準採集,有主題採集(按照資訊需求的主題採集)與站點採集兩種模式(給定網址列表的站內定點採集)。可幫助使用者快速獲取海量資訊,尤其是境外資訊與情報的挖掘。

    2.文件轉換:對doc、excel、pdf與ppt等多種主流文件格式,進行文字資訊格式轉換,資訊抽取準確率極高,效率達到大資料處理的要求。

    3. 新詞發現(新詞發現+關鍵詞提取):新詞發現能從文字中挖掘出具有內涵新詞、新概念,使用者可以用於專業詞典的編撰,還可以進一步編輯標註,匯入分詞詞典中,提高分詞系統的準確度,並適應新的語言變化;關鍵詞提取能夠對單篇文章或文章集合,提取出若干個代表文章中心思想的詞彙或短語,可用於精化閱讀、語義查詢和快速匹配等。

    2. 批次分詞:對原始語料進行分詞、自動識別人名地名機構名等未登入詞、新詞標註以及詞性標註。可在分析過程中,匯入使用者定義的詞典。

    5. 語言統計:針對切分標註結果,系統可以自動地進行一元詞頻統計、二元詞語轉移機率統計(統計兩個詞左右連線的頻次即機率)。針對常用的術語,會自動給出相應的英文解釋。

    6. 文字聚類:能夠從大規模資料中自動分析出熱點事件,並提供事件話題的關鍵特徵描述。同時適用於長文字和簡訊、微博等短文字的熱點分析。

    8. 摘要實體(自動摘要+實體抽取):自動摘要能夠對單篇或多篇文章,自動提煉出內容的精華,方便使用者快速瀏覽文字內容。實體提取能夠對單篇或多篇文章,自動提煉出內容摘要,抽取人名、地名、機構名、時間及主題關鍵詞;方便使用者快速瀏覽文字內容。

    9.智慧過濾:對文字內容的語義智慧過濾審查,內建國內最全詞庫,智慧識別多種變種:形變、音變、繁簡等多種變形,語義精準排歧。

    10.情感分析:針對事先指定的分析物件,自動分析海量文件的情感傾向:情感極性及情感值測量,並在原文中給出正負面的得分和句子樣例。

    11. 文件去重:能夠快速準確地判斷檔案集合或資料庫中是否存在相同或相似內容的記錄,同時找出所有的重複記錄。

    12全文檢索:JZSearch全文精準檢索支援文字、數字、日期、字串等各種資料型別,多欄位的高效搜尋,支援AND/OR/NOT以及NEAR鄰近等查詢語法,支援維語、藏語、蒙語、阿拉伯、韓語等多種少數民族語言的檢索。

    13. 編碼轉換:自動識別文件內容的編碼,並進行自動轉換,目前支援Unicode/BIG5/UTF-8等編碼自動轉換為簡體的GBK,同時將繁體BIG5和繁體GBK進行繁簡轉化。

  • 中秋節和大豐收的關聯?
  • 外賣看不清的衛生問題?