日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

文本分类--普通分类

發(fā)布時(shí)間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文本分类--普通分类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 基本概念

文本分類
文本分類(text classification),指的是將一個(gè)文檔歸類到一個(gè)或多個(gè)類別的自然語(yǔ)言處理任務(wù)。文本分類的應(yīng)用場(chǎng)景非常廣泛,包括垃圾郵件過(guò)濾、自動(dòng)打標(biāo)等任何需要自動(dòng)歸檔文本的場(chǎng)合。
文本分類在機(jī)器學(xué)習(xí)中屬于監(jiān)督學(xué)習(xí),其流程是:人工標(biāo)注文檔類別、利用語(yǔ)料訓(xùn)練模型、利用模型訓(xùn)練文檔的類別。

2 問(wèn)題

總結(jié)文本分類的一般流程;

3 解決思路

3.1 文本的特征提取

特征選擇是特征工程中的重要一環(huán),其主要目的是從所有特征中選出相關(guān)特征 (relevant feature),或者說(shuō)在不引起重要信息丟失的前提下去除掉無(wú)關(guān)特征 (irrelevant feature) 和冗余特征 (redundant feature)。進(jìn)行特征選擇的好處主要有以下幾種:

  • 降低過(guò)擬合風(fēng)險(xiǎn),提升模型效果
  • 提高訓(xùn)練速度,降低運(yùn)算開(kāi)銷(xiāo)
  • 更少的特征通常意味著更好的可解釋性
    在向量空間模型中,表示文本的特征項(xiàng)可以選擇文字、詞、短語(yǔ)、甚至“概念”等多種元素,目前常用的特征提取方法有:基于文檔頻率的特征提取法、信息增益法、 χ2
    統(tǒng)計(jì)量法、互信息法等。
  • 3.2 卡方特征選擇

    在文本分類時(shí)會(huì)有這樣一個(gè)問(wèn)題,比如漢語(yǔ)中的虛詞“的”,這些詞在所有類別的文檔中均勻出現(xiàn),為了消除這些單詞的影響,一方面可以用停用詞表,另一方面可以用卡方非參數(shù)檢驗(yàn)來(lái)過(guò)濾掉與類別相關(guān)程度不高的詞語(yǔ)。

    在統(tǒng)計(jì)學(xué)上,卡方檢驗(yàn)常用于檢驗(yàn)兩個(gè)事件的獨(dú)立性,如果兩個(gè)隨機(jī)事件 A 和 B 相互獨(dú)立,則兩者同時(shí)發(fā)生的概率P(AB)= P(A)P(B)。如果將詞語(yǔ)的出現(xiàn)與類別的出現(xiàn)作為兩個(gè)隨機(jī)事件則類別獨(dú)立性越高的詞語(yǔ)越不適合作為特征。如果將某個(gè)事件的期望記作 E,實(shí)際出現(xiàn)(觀測(cè))的頻次記作 N,則卡方檢驗(yàn)衡量期望與觀測(cè)的相似程度。卡方檢驗(yàn)值越高,則期望和觀測(cè)的計(jì)數(shù)越相化也更大程度地否定了獨(dú)立性。

    具體細(xì)節(jié)可參考宗成慶《統(tǒng)計(jì)自然語(yǔ)言處理》第二版13.3.3 χ2\chi^2χ2t統(tǒng)計(jì)量

    3.3 分類器的選擇和訓(xùn)練

    理論上講,在文本特征抽取之后,就進(jìn)入了常規(guī)機(jī)器學(xué)習(xí)分類模型的框架,但作為文本分類也有其特殊性,主要有以下幾點(diǎn):

  • 自變量(詞條)數(shù)量極多;
  • 各自變量之間(詞條)不可能完全獨(dú)立;
  • 大部分自變量(詞條)都是干擾項(xiàng),對(duì)分類沒(méi)有貢獻(xiàn);
  • 所以在分類模型選擇上主要考慮以下幾點(diǎn):

  • 速度-文本數(shù)據(jù)量一般比較大;
  • 變量篩選能力-能夠從大部分是無(wú)效變量的情況下篩選出有效變量;
  • 容錯(cuò)性-分類模型是建立在特征抽取的基礎(chǔ)上,特征抽取過(guò)程本身不可避免的帶來(lái)部分信息差錯(cuò);
  • 共線容忍度-詞條之間不可能相互獨(dú)立,很多模型都有變量的獨(dú)立性假設(shè)。
    基于上面兩個(gè)方面的考慮,文本分類的模型通常使用樸素貝葉斯、svm兩個(gè)模型。
  • 關(guān)于Naive Bayes、svm數(shù)學(xué)細(xì)節(jié)參考《統(tǒng)計(jì)學(xué)習(xí)方法》;

    3.4 非常規(guī)方法

    文本分類不一定需要分詞,根據(jù)清華大學(xué)2016年的工作THUCTC:An Efficient Chinese Text Classifier,將文中相鄰兩個(gè)字符構(gòu)成的所有二元語(yǔ)法作為“詞”,反而可以取得更好的分類準(zhǔn)確率;

    4 實(shí)現(xiàn)

    4.1 準(zhǔn)備文本分類語(yǔ)料庫(kù)

    數(shù)據(jù)的目錄結(jié)構(gòu)如下:
    搜狗門(mén)戶數(shù)據(jù)(汽車(chē)(1000個(gè)txt文檔)、教育(1000個(gè)txt文檔)、健康(1000個(gè)txt文檔)、軍事(1000個(gè)txt文檔)、體育(1000個(gè)txt文檔))

    from pyhanlp import * corpus_path = r'/Users/kitty/Work/Projects/text_mining/data/搜狗文本分類語(yǔ)料庫(kù)迷你版' # 把數(shù)據(jù)加載到內(nèi)存中,查看數(shù)據(jù)屬性 MemoryDataSet = JClass('com.hankcs.hanlp.classification.corpus.MemoryDataSet') dataSet = MemoryDataSet() # 將數(shù)據(jù)集加載到內(nèi)存中 dataSet.load(corpus_path) # 加載data/test/搜狗文本分類語(yǔ)料庫(kù)迷你版 allClasses = dataSet.getCatalog().getCategories() # 獲取標(biāo)注集 print("標(biāo)注集:%s" % (allClasses)) for document in dataSet.iterator():print("第一篇文檔的類別:" + allClasses.get(document.category))break

    運(yùn)行結(jié)果:

    標(biāo)注集:[教育, 汽車(chē), 健康, 軍事, 體育] 第一篇文檔的類別:教育

    4.2 準(zhǔn)備分詞器

    BigramTokenizer = JClass('com.hankcs.hanlp.classification.tokenizers.BigramTokenizer') HanLPTokenizer = JClass('com.hankcs.hanlp.classification.tokenizers.HanLPTokenizer') BlankTokenizer = JClass('com.hankcs.hanlp.classification.tokenizers.BlankTokenizer') tokenizer = BigramTokenizer()

    4.3 準(zhǔn)備訓(xùn)練集

    FileDataSet = JClass('com.hankcs.hanlp.classification.corpus.FileDataSet') training_corpus = FileDataSet().setTokenizer(tokenizer).load(corpus_path, "UTF-8", 0.9)

    4.4 卡方特征選擇

    這個(gè)方法和相應(yīng)的參數(shù)都被隱藏的模型中,用戶只需知道分詞后需要進(jìn)行卡方特征選擇。

    4.5 準(zhǔn)備分類器

    NaiveBayesClassifier = JClass('com.hankcs.hanlp.classification.classifiers.NaiveBayesClassifier') LinearSVMClassifier = JClass('com.hankcs.hanlp.classification.classifiers.LinearSVMClassifier') model_class = LinearSVMClassifier

    4.6 訓(xùn)練模型

    IOUtil = SafeJClass('com.hankcs.hanlp.corpus.io.IOUtil') model_path = r'/Users/kitty/anaconda3/envs/nlp/lib/python3.6/site-packages/pyhanlp/static/data/test/' def train_or_load_classifier(model_class, model_path, training_corpus):classifier = model_class()model_path += classifier.getClass().getSimpleName() + '.ser'if os.path.isfile(model_path):print(model_path)return model_class(IOUtil.readObjectFrom(model_path))classifier.train(training_corpus)model = classifier.getModel()IOUtil.saveObjectTo(model, model_path)return model_class(model)classifier = train_or_load_classifier(model_class, model_path, training_corpus)

    4.7 評(píng)測(cè)訓(xùn)練效果

    精細(xì)評(píng)測(cè):對(duì)于每個(gè)分類都有一套P、R、F1P、R、F_1PRF1?
    整體評(píng)測(cè):衡量模型在所有類目上的整體性能,則可以利用這些指標(biāo)在文檔顆粒度進(jìn)行微平均,具體如下:
    P ̄=∑ci∈CTP∑ci∈CTP+∑ci∈CFPP ̄=∑ci∈CTP∑ci∈CTP+∑ci∈CFNF1 ̄=2×P ̄×R ̄P ̄+R ̄\begin{aligned} \overline{P} &= \frac{\sum_{c_i \in C}TP}{\sum_{c_i \in C}TP + \sum_{c_i \in C}FP} \\ \overline{P} &= \frac{\sum_{c_i \in C}TP}{\sum_{c_i \in C}TP + \sum_{c_i \in C}FN} \\ \overline{F_1} &= \frac{2 \times \overline{P} \times \overline{R}}{\overline{P} + \overline{R}} \end{aligned} PPF1???=ci?C?TP+ci?C?FPci?C?TP?=ci?C?TP+ci?C?FNci?C?TP?=P+R2×P×R??

    下面實(shí)現(xiàn)采用后一種方式:

    Evaluator = JClass('com.hankcs.hanlp.classification.statistics.evaluations.Evaluator')def evaluate(classifier, corpus_path, tokenizer):testing_corpus = MemoryDataSet(classifier.getModel()).load(corpus_path, "UTF-8", -0.1)result = Evaluator.evaluate(classifier, testing_corpus)print(classifier.getClass().getSimpleName() + "+" + tokenizer.getClass().getSimpleName())print(result)evaluate(classifier, corpus_path, tokenizer)

    運(yùn)行結(jié)果:

    LinearSVMClassifier+BigramTokenizerP R F1 A 93.27 97.00 95.10 98.00 教育98.02 99.00 98.51 99.40 汽車(chē)98.97 96.00 97.46 99.00 健康98.00 98.00 98.00 99.20 軍事 100.00 98.00 98.99 99.60 體育97.65 97.60 97.63 97.60 avg. data size = 500, speed = 7936.51 doc/s

    4.8 {NB, SVM} ? {中文分詞、二元語(yǔ)法}


    中文文本分類的確不需要分詞,不分詞直接用元語(yǔ)法反而能夠取得更高的準(zhǔn)確率。只不過(guò)由于二元語(yǔ)法數(shù)量比單詞多,導(dǎo)致參與運(yùn)算的特征更多,相應(yīng)的分類速度減半。
    線性支持向量機(jī)的分類準(zhǔn)確率更高,而且分類速度更快,推薦使用。

    5 參考文獻(xiàn)

  • 何晗《自然語(yǔ)言處理入門(mén)》;
  • 宗成慶《統(tǒng)計(jì)自然語(yǔ)言處理》;
  • 李航《統(tǒng)計(jì)學(xué)習(xí)方法》;
  • 6 需要解決的問(wèn)題

  • 當(dāng)文檔被轉(zhuǎn)化為向量后,就徹底脫離了語(yǔ)言、句子等語(yǔ)料的約束,進(jìn)入機(jī)器學(xué)習(xí)的范疇了,所以文本特征選擇是關(guān)鍵的一步,尤其在傳統(tǒng)機(jī)器學(xué)習(xí)中。總結(jié)文本特征選擇的常用方法。
  • 總結(jié)

    以上是生活随笔為你收集整理的文本分类--普通分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。