【精通特征工程】學(xué)習(xí)筆記(二)

【精通特征工程】學(xué)習(xí)筆記Day2&2.5&D3章&P33-51頁(yè)

3序苏、文本數(shù)據(jù):扁平化、過濾和分塊

3.1 元素袋:將自然文本轉(zhuǎn)換為扁平向量

3.1.1 詞袋

一個(gè)特征就是一個(gè)單詞,一個(gè)特征向量由這個(gè)單詞在每篇文檔中出現(xiàn)的次數(shù)組成


3.1.2 n 元詞袋

n-gram(n 元詞)是由 n 個(gè)標(biāo)記 (token)組成的序列筑公。
1-gram 就是一個(gè)單詞(word),又稱為一元詞(unigram)。
n越大躏救,能表示的信息越豐富,相應(yīng)的成本也會(huì)越高螟蒸。

  • eg:計(jì)算 n-gram
>>> import pandas
      >>> import json
      >>> from sklearn.feature_extraction.text import CountVectorizer
# 加載前10 000條點(diǎn)評(píng)
>>> f = open('data/yelp/v6/yelp_academic_dataset_review.json') >>> js = []
>>> for i in range(10000):
... js.append(json.loads(f.readline()))
>>> f.close()
>>> review_df = pd.DataFrame(js)
# 創(chuàng)建一元詞盒使、二元詞和三元詞的特征轉(zhuǎn)換器。
# 默認(rèn)情況下七嫌,會(huì)忽略單字母詞少办,這非常有實(shí)際意義, # 因?yàn)闀?huì)除去無(wú)意義的詞诵原。但在這個(gè)例子中英妓,
# 出于演示的目的,我們會(huì)顯式地包含這些詞皮假。

>>> bow_converter = CountVectorizer(token_pattern='(?u)\\b\\w+\\b')
>>> bigram_converter = CountVectorizer(ngram_range=(2,2),
...                                    token_pattern='(?u)\\b\\w+\\b')
>>> trigram_converter = CountVectorizer(ngram_range=(3,3),
...                                     token_pattern='(?u)\\b\\w+\\b')
# 擬合轉(zhuǎn)換器鞋拟,查看詞匯表大小
>>> bow_converter.fit(review_df['text'])
>>> words = bow_converter.get_feature_names()
>>> bigram_converter.fit(review_df['text'])
>>> bigrams = bigram_converter.get_feature_names() >>> trigram_converter.fit(review_df['text'])
>>> trigrams = trigram_converter.get_feature_names() >>> print (len(words), len(bigrams), len(trigrams)) 26047 346301 847545
# 看一下n-gram
>>> words[:10]
['0', '00', '000', '0002', '00am', '00ish', '00pm', '01', '01am', '02']
>>> bigrams[-10:]
['zucchinis at',
 'zucchinis took',
 'zucchinis we',
 'zuma over',
 'zuppa di',
 'zuppa toscana',
 'zuppe di',
 'zurich and',
 'zz top',
 'a? la']
>>> trigrams[:10]
['0 10 definitely',
 '0 2 also',
 '0 25 per',
 '0 3 miles',
 '0 30 a',
 '0 30 everything',
 '0 30 lb',
 '0 35 tip',
 '0 5 curry',
'0 5 pork']

Yelp 數(shù)據(jù)集前 10 000 條點(diǎn)評(píng)中唯一 n-gram 的數(shù)量:

3.2 使用過濾獲取清潔特征

3.2.1 停用詞

停用詞列表

3.2.2 基于頻率的過濾
  1. 高頻詞
  2. 罕見詞
3.2.3 詞干提取
  • eg:Python 的 NLTK 包運(yùn)行 Porter stemmer 的例子。它適用于很多情況惹资,但不是萬(wàn)能的贺纲。
    如:“goes”被映射到了“goe”,而“go”被映射到了它本身褪测。
>>> import nltk
>>> stemmer = nltk.stem.porter.PorterStemmer()
>>> stemmer.stem('flowers')
u'flower'
>>> stemmer.stem('zeroes')
u'zero'
>>> stemmer.stem('stemmer')
u'stem'
>>> stemmer.stem('sixties')
u'sixti'
>>> stemmer.stem('sixty')
u'sixty'
>>> stemmer.stem('goes')
u'goe'
>>> stemmer.stem('go')
u'go'

詞干提取并不是非做不可

3.3 意義的單位:從單詞猴誊、n 元詞到短語(yǔ)

3.3.1 解析與分詞
  • 解析
  • 半結(jié)構(gòu)化文檔,比如 JSON 字符串或 HTML 頁(yè)面
  • 網(wǎng)頁(yè)侮措,那么解析程序還需要處理 URL
  • 電子郵件懈叹,像發(fā)件人、收件人和標(biāo)題這些域都需要特殊處理
  • 否則這些信息在最終計(jì)數(shù)中就會(huì)和普通詞一樣分扎,也就失去作用了
  • 分詞
  • 空格
  • 標(biāo)點(diǎn)符號(hào)
3.3.2 通過搭配提取進(jìn)行短語(yǔ)檢測(cè)
  1. 基于頻率的方法

  2. 用于搭配提取的假設(shè)檢驗(yàn)

  • 通過似然比檢驗(yàn)這種分析方法來檢測(cè)常見短語(yǔ)的算法如下:
    (1) 計(jì)算出所有單詞的出現(xiàn)概率:P(w)澄成。
    (2) 對(duì)所有的唯一二元詞,計(jì)算出成對(duì)單詞出現(xiàn)的條件概率:P(w2 | w1)。
    (3) 對(duì)所有的唯一二元詞,計(jì)算出似然比 log λ。
    (4) 按照似然比為二元詞排序最住。
    (5) 將似然比最小的二元詞作為特征霎箍。
  1. 文本分塊和詞性標(biāo)注
  • 文本分塊要比找出 n 元詞復(fù)雜一些,它要使用基于規(guī)則的模型并基于詞性生成標(biāo)記序列。

  • 為了找出這些短語(yǔ),我們先切分出所有帶詞性的單詞,然后檢查這些標(biāo)記的鄰近詞包吝,找出按詞性組合的詞組,這些詞組又稱為“塊”源葫。將單詞映射到詞性的模型通常與特定的語(yǔ)言有關(guān)诗越。一些開源的 Python 程序庫(kù)(比如 NLTK、spaCy 和
    TextBlob)中帶有適用于多種語(yǔ)言的模型臼氨。

  • eg:詞性標(biāo)注和文本分塊

>>> import pandas as pd
      >>> import json
# 加載前10條點(diǎn)評(píng)
>>> f = open('data/yelp/v6/yelp_academic_dataset_review.json') >>> js = []
>>> for i in range(10):
... js.append(json.loads(f.readline()))
>>> f.close()
>>> review_df = pd.DataFrame(js)
# 首先使用spaCy中的函數(shù) >>> import spacy
# 預(yù)先加載語(yǔ)言模型
>>> nlp = spacy.load('en')
# 我們可以創(chuàng)建一個(gè)spaCy nlp變量的Pandas序列 >>> doc_df = review_df['text'].apply(nlp)
# spaCy可以使用(.pos_)提供細(xì)粒度的詞性掺喻,
# 使用(.tag_)提供粗粒度的詞性
>>> for doc in doc_df[4]:
... print([doc.text, doc.pos_, doc.tag_])
Got VERB VBP
a DET DT
letter NOUN NN
in ADP IN
the DET DT
mail NOUN NN
last ADJ JJ
week NOUN NN
that ADJ WDT
said VERB VBD
Dr. PROPN NNP
Goldberg PROPN NNP
is VERB VBZ
moving VERB VBG
to ADP IN
Arizona PROPN NNP
to PART TO
take VERB VB
a DET DT
new ADJ JJ
position NOUN NN
there ADV RB
in ADP IN
June PROPN NNP
. PUNCT .
  SPACE SP
He PRON PRP
will VERB MD
be VERB VB
missed VERB VBN
very ADV RB
much ADV RB
. PUNCT .
SPACE SP
I PRON PRP
think VERB VBP
finding VERB VBG
a DET DT
new ADJ JJ
doctor NOUN NN
in ADP IN
NYC PROPN NNP
that ADP IN
you PRON PRP
actually ADV RB
like INTJ UH
might VERB MD
almost ADV RB
be VERB VB
as ADV RB
awful ADJ JJ
as ADP IN
trying VERB VBG
to PART TO
find VERB VB
a DET DT
date NOUN NN
! PUNCT .


# spaCy還可以進(jìn)行基本的名詞分塊
>>> print([chunk for chunk in doc_df[4].noun_chunks])
[a letter, the mail, Dr. Goldberg, Arizona, a new position, June, He, I, a new doctor, NYC, you, a date]
#####
# 我們還可以使用TextBlob實(shí)現(xiàn)同樣的特征轉(zhuǎn)換 from textblob import TextBlob
# TextBlob中的默認(rèn)標(biāo)記器使用PatternTagger,在這個(gè)例子中是沒有問題的储矩。 # 你還可以指定使用NLTK標(biāo)記器感耙,它對(duì)于不完整的句子效果更好。
>>> blob_df = review_df['text'].apply(TextBlob)
>>> blob_df[4].tags
[('Got', 'NNP'),
('a', 'DT'),
('letter', 'NN'),
('in', 'IN'),
('the', 'DT'),
('mail', 'NN'),
('last', 'JJ'),
('week', 'NN'),
('that', 'WDT'),
('said', 'VBD'),
('Dr.', 'NNP'),
('Goldberg', 'NNP'),
('is', 'VBZ'),
('moving', 'VBG'),
('to', 'TO'),
('Arizona', 'NNP'),
('to', 'TO'),
('take', 'VB'),
('a', 'DT'),
('new', 'JJ'),
('position', 'NN'),
('there', 'RB'),
('in', 'IN'),
('June', 'NNP'),
('He', 'PRP'),
('will', 'MD'),
('be', 'VB'),
('missed', 'VBN'),
('very', 'RB'),
('much', 'JJ'),
('I', 'PRP'),
('think', 'VBP'),
('finding', 'VBG'),
('a', 'DT'),
('new', 'JJ'),
('doctor', 'NN'),
('in', 'IN'),
('NYC', 'NNP'),
('that', 'IN'),
('you', 'PRP'),
('actually', 'RB'),
('like', 'IN'),
('might', 'MD'),
('almost', 'RB'),
('be', 'VB'),
('as', 'RB'),
('awful', 'JJ'),
('as', 'IN'),
('trying', 'VBG'),
('to', 'TO'),
('find', 'VB'),
('a', 'DT'),
('date', 'NN')]
>>> print([np for np in blob_df[4].noun_phrases])
['got', 'goldberg', 'arizona', 'new position', 'june', 'new doctor', 'nyc']

參考:《精通特征工程》愛麗絲·鄭·阿曼達(dá)·卡薩麗

面向機(jī)器學(xué)習(xí)的特征工程學(xué)習(xí)筆記:
【精通特征工程】學(xué)習(xí)筆記(一)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末持隧,一起剝皮案震驚了整個(gè)濱河市即硼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屡拨,老刑警劉巖只酥,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呀狼,居然都是意外死亡裂允,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門哥艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绝编,“玉大人,你說我怎么就攤上這事貌踏∈ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵祖乳,是天一觀的道長(zhǎng)逗堵。 經(jīng)常有香客問我,道長(zhǎng)眷昆,這世上最難降的妖魔是什么蜒秤? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任汁咏,我火速辦了婚禮,結(jié)果婚禮上作媚,老公的妹妹穿的比我還像新娘梆暖。我一直安慰自己,他們只是感情好掂骏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厚掷,像睡著了一般弟灼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冒黑,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天田绑,我揣著相機(jī)與錄音,去河邊找鬼抡爹。 笑死掩驱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冬竟。 我是一名探鬼主播欧穴,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼泵殴!你這毒婦竟也來了涮帘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笑诅,失蹤者是張志新(化名)和其女友劉穎调缨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吆你,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弦叶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妇多。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伤哺。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖砌梆,靈堂內(nèi)的尸體忽然破棺而出默责,到底是詐尸還是另有隱情,我是刑警寧澤咸包,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布桃序,位于F島的核電站,受9級(jí)特大地震影響烂瘫,放射性物質(zhì)發(fā)生泄漏媒熊。R本人自食惡果不足惜奇适,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芦鳍。 院中可真熱鬧嚷往,春花似錦、人聲如沸柠衅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菲宴。三九已至贷祈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喝峦,已是汗流浹背势誊。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谣蠢,地道東北人粟耻。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像眉踱,于是被迫代替她去往敵國(guó)和親挤忙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容