Python自然語言處理學習筆記之性別識別


  從今天起開始寫自然語言處理的實踐用法,今天學了文本分類,並沒用什么創新的東西,只是把學到的知識點復習一下

性別識別(根據給定的名字確定性別)

  第一步是創建一個特征提取函數(feature extractor):該函數建立了一個字典,包含給定姓名的有關特征信息。

>>> def gender_features(word):
...     return {'last_letter': word[-1]}
>>> gender_features('Shrek')
{'last_letter': 'k'}

  第二步是准備數據集,該步通過導入現成的NLTK語料庫實現

>>> from nltk.corpus import names
>>> labeled_names = ([(name, 'male') for name in names.words('male.txt')] +
... [(name, 'female') for name in names.words('female.txt')])
>>> import random
>>> random.shuffle(labeled_names)

其中random.shuffle()的功能是將給定的列表順序打亂,如:

>>> test=[1,2,3,4,5,6,7,8,9]
>>> random.shuffle(test)
>>> test
[5, 7, 8, 1, 4, 2, 6, 3, 9]

  第三步利用特征提取函數對數據集進行處理,生成產生分類器所需要的數據集featuresets,並將數據集featuresets分成訓練集和測試集,最后利用NLTK工具包自帶的方法

nltk.NaiveBayesClassifier.train()生成一個朴素貝葉斯分類器。
>>> featuresets = [(gender_features(n), gender) for (n, gender) in labeled_names]
>>> train_set, test_set = featuresets[500:], featuresets[:500]
>>> classifier = nltk.NaiveBayesClassifier.train(train_set)

我們還可以使用方法nltk.classify.accuracy(classifier,test_set)來測試分類器的准確率,使用方法classifier.show_most_informative_features(n)來觀察對哪些特征該分類器的准確率最高。

>>> classifier.show_most_informative_features(5)
Most Informative Features
             last_letter = 'a'            female : male   =     33.2 : 1.0
             last_letter = 'k'              male : female =     32.6 : 1.0
             last_letter = 'p'              male : female =     19.7 : 1.0
             last_letter = 'v'              male : female =     18.6 : 1.0
             last_letter = 'f'              male : female =     17.3 : 1.0

上面的哪些比率被稱為似然比likelihood ratios,例如33.2:1.0表示當名字以字母a結尾時,那這個人事女性的概率時男性的33.2倍。

  當數據集比較大時,建立包含所有案例特稱的列表會占用大量的內存,這時可以用方法nltk.classify.apply_features(),該方法會返回一個類似列表的對象,對不會把所有的特征都放到內存中。

>>> from nltk.classify import apply_features
>>> train_set = apply_features(gender_features, labeled_names[500:])
>>> test_set = apply_features(gender_features, labeled_names[:500])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM