中文語言的文字分類技術和流程:『
文字預處理
1.選擇處理的文字的範圍
對於分類或聚類任務,往往將整個文件作為處理單位;對於情感分析、文件自動文摘或資訊檢索,段落或章節可能更合適
2.建立分類文字語料庫
目前比較好的中文分類語料庫有復旦大學譚松波中文文字分類語料庫和搜狗新聞分類語料庫
訓練集語料(分好類)&測試集語料(待分類)
3.文字格式轉換
轉換為純文字格式
去除無用資訊(如html標籤)
python例子:使用lxml庫去除html標籤(c語言編寫的,比使用re正則庫的標籤去除方式效能高很多)
(先sudo pip install lxml)
4.檢測句子邊界:標記句子的結束# -*- coding: utf-8 -*-
from lxml import etree,html
# htm檔案路徑,以及讀取檔案
path = "1.htm"
content = open(path,"rb").read()
page = html.document_fromstring(content) # 解析檔案
text = page.text_content() # 去除所有標籤
print text # 輸出去除標籤後解析結果
中文文字通常就是尋找。?!等標點符號作為斷句的依據
中文分詞介紹
英文中單詞以空格作為自然分界符,而中文在詞上沒有乙個形式上的分界符。
中文分詞不僅是中文文字分類的一大問題,也是中文自然語言處理的核心問題之一。
基於概率圖模型的的條件隨機場(crf)
一般情況下,專業化的大型文字分類系統,為了提高精度,常常定製開發自己的分詞系統,一般演算法都使用crf,語料資源各不相同。
jieba分詞,專門使用python語言開發的分詞系統,占用資源較小,常識類文件的分詞精度較高,對於非專業文件綽綽有餘。
jieba有三種分詞模式:
python例子:jieba分詞
輸出結果:# -*- coding: utf-8 -*-
import jieba
seg_list = jieba.cut("小明2023年畢業於北京清華大學", cut_all=false)
print "default mode:", " ".join(seg_list) # 預設模式
seg_list = jieba.cut("小明2023年畢業於北京清華大學")
print " ".join(seg_list)
seg_list = jieba.cut("小明2023年畢業於北京清華大學", cut_all=true)
print "full mode:", "/ ".join(seg_list) # 全模式
seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜尋引擎模式
print "/ ".join(seg_list)
scikit-learn庫簡介
官網:
如同官網介紹,主要有以下6個模組:
分類演算法、回歸演算法、聚類演算法、維度約減、模型選擇、資料預處理
**上提供了演算法的數學公式,簡單的推導過程,演算法應用於不同情況的變種,變種類的引數說明,演算法的應用例項
專案源**:
向量空間模型
向量空間模型把文字表示為乙個向量,該向量的每個特徵表示為文字中出現的詞。
目前大多文字挖掘系統都把文字儲存為向量空間的表示,因為它便於運用機器學習演算法。但是,對於大規模文字分類,這會導致極高維的空間。
由於文字在儲存為向量空間的時候維度比較高,為節省儲存空間和提高搜尋效率,在文字分類之前會自動過濾掉某些字或詞,這些字或詞即被稱為停用詞。如一些語義模糊的常用詞,還有一些語氣助詞,這些詞通常對文字起不了分類特徵的意義。
權重策略:td-idf方法
詞頻(term frequency):指某個給定詞語在該檔案中出現的頻率。
逆向檔案頻率(inverse document frequency):是乙個詞語普遍重要性的度量。某一特定詞語的idf,可以由總檔案數目除以包含該詞語之檔案的數目,再將得到的商取對數得到。
|d|:語料庫中的檔案總數;
j:包含詞語的檔案數目, 如果該詞語不在語料庫中,就會導致分母為零,因此一
般情況下使用 1+||作為分母;
然後再計算tf與idf的乘積。
scikit-learn包中的tfidf相關類
使用樸素貝葉斯分類模組最常用的文字分類方法有 knn 最近鄰演算法,樸素貝葉斯演算法和支援向量機演算法。這三類演算法一般而言 knn 最近鄰演算法的原理最簡單,分類精度尚可,但是速度最慢;樸素貝葉斯對於短文本分類的效果最好,精度很高;支援向量機的優勢是支援線性不可分的情況,精度上取中。from sklearn.feature_extraction.text import tfidftransformer #tfidf向量轉換類
from sklearn.feature_extraction.text import tfidfvectorizer #tfidf向量生成類
對測試集:分詞->生成檔案詞向量檔案->生成詞向量模型(跟訓練集不同的是:載入訓練集詞袋,將測試集產生的詞向量對映到訓練集詞袋的詞典中,生成向量空間模型)
scikit-learn包中的樸素貝葉斯相關類
from sklearn.*****_bayes import multinomialnb #多項式貝葉斯演算法
分類結果評估機器學習領域的演算法評估有三個基本指標:
準確率(precision,也成為準度)
f-score( fβ-measure)
分類結果評估:
import numpy as np
from sklearn import metrics
#計算分類精度:
def metrics_result(actual,predict):
print '精度:'.format(metrics.precision_score(actual,predict))
print '召回:'.format(metrics.recall_score(actual,predict))
print 'f1-score:'.format(metrics.f1_score(actual,predict))
Chat NLP 中文短文本分類專案實踐(上)
目前,隨著大資料 雲計算對關係型資料處理技術趨向穩定成熟,各大網際網路公司對關係資料的整合也已經落地成熟,筆者 未來資料領域的挑戰將主要集中在半結構化和非結構化資料的整合,nlp 技術對個人發展越來越重要,尤其在中文文字上挑戰更大。在本場 chat 以及現在和未來工作中,筆者都將致力於中文文字的挖掘...
NLP(五)文字分類
1 svm 2 樸素貝葉斯 3 lda 本文給出 和使用中的效果 1 svm svm做文字分類準確率並不高,而且耗時,訓練集少時推薦邏輯回歸 from sklearn.feature extraction.text import tfidfvectorizer from sklearn.svm im...
NLP NO4 文字分類
載入停用詞,txt內容可以隨專案進行改變 stopwords pd.read csv stopword.txt index col false quoting 3,sep t names stopwords encoding utf 8 stopwords stopwords stopwords v...