2016-10-20 3 views
0

저는 텍스트 마이닝과 NLP 관련 새로운 것들이 있습니다. 나는 몇 가지 문서에서 정보를 추출하려고하는 작은 프로젝트에서 작업하고 있습니다. 기본적으로 pos 태깅을하고 나서 패턴을 찾기 위해 청크를 사용하고 있습니다. 이 POS 태깅을하기 전에 Stopwords를 사용해야합니까? Stopwords를 사용하면 POS Tagger의 정확성에 영향을 줍니까?POS 태깅 전에 스팸 필터링을 사용해야합니까?

+3

POS 태그 지정은 시퀀스 분류로 수행되므로 중지 단어를 제거하여 시퀀스를 변경하면 남은 단어의 POS 태그가 변경 될 가능성이 큽니다. POS 태그 작성자는 일반적으로 불용어를 포함한 전체 텍스트에 대해 교육을받습니다. – lenz

답변

1

@ 렌츠는 무엇을 말했습니다. 당신이 당신이 청크를 훈련하고 청결한 원본에 그것을 훈련하고 (그 후에 그것을 사용하기 위하여) 결정하면 않는 한, 그 문제에 관해서는 표를 붙이기 전에, 또는 당신이 청크하기 전에 금지 어구를 제거하지 말라. 그러나 나는 그 중 하나를 권하고 싶지 않다. 스톱 워드 제거는 TF-IDF와 같은 단어 분리 과정에 적합하지만 결정자와 전치사와 같은 일반적인 단어는 문장 구조 및 따라서 말의 일부에 대한 필수 단서를 제공합니다. 문장 단위를 감지하려면 제거하지 마십시오.

하지만 왜 내 말을 들으십니까? 태그가 추가 된 데이터를 가져 와서 스톱 워드 제거가 있거나없는 스 태거와 청크를 평가하면 쉽게 직접 확인할 수 있습니다. 어쨌든 나머지 파이프 라인에 대해서는이 작업을 수행하는 것이 좋습니다.

먼저 코퍼스 및 중지 목록

>>> import nltk 
>>> nltk.download('stopwords') 
>>> nltk.download('cess_esp') 

로드를 분할

>>> from nltk.corpus import cess_esp as cess 
>>> from nltk.corpus import stopwords 

# Import the function to train a tagger. 
>>> from nltk import UnigramTagger, BigramTagger 
# Load the Spanish stopwords 
>>> stoplist = stopwords.words('spanish') 
# Load the Spanish tagger 
>>> cess_sents = cess.tagged_sents() 

NLTK

의 래퍼 코퍼스로 얻을 :

2

의이 술래를 테스트/훈련 예를 들어 this를 사용하자 열차/시험 세트

>>> len(cess_sents) 
6030 
>>> test_set = cess_sents[-int(6030/10):] 
>>> train_set = cess_sents[:-int(6030/10)] 
>>> range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> range(10)[-2:] 
[8, 9] 
>>> range(10)[:-2] 
[0, 1, 2, 3, 4, 5, 6, 7] 

불용 단어가없는 대체 train_set을 만듭니다.

>>> train_set[0] 
[(u'El', u'da0ms0'), (u'grupo', u'ncms000'), (u'estatal', u'aq0cs0'), (u'Electricit\xe9_de_France', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EDF', u'np00000'), (u'-Fpt-', u'Fpt'), (u'anunci\xf3', u'vmis3s0'), (u'hoy', u'rg'), (u',', u'Fc'), (u'jueves', u'W'), (u',', u'Fc'), (u'la', u'da0fs0'), (u'compra', u'ncfs000'), (u'del', u'spcms'), (u'51_por_ciento', u'Zp'), (u'de', u'sps00'), (u'la', u'da0fs0'), (u'empresa', u'ncfs000'), (u'mexicana', u'aq0fs0'), (u'Electricidad_\xc1guila_de_Altamira', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EAA', u'np00000'), (u'-Fpt-', u'Fpt'), (u',', u'Fc'), (u'creada', u'aq0fsp'), (u'por', u'sps00'), (u'el', u'da0ms0'), (u'japon\xe9s', u'aq0ms0'), (u'Mitsubishi_Corporation', u'np00000'), (u'para', u'sps00'), (u'poner_en_marcha', u'vmn0000'), (u'una', u'di0fs0'), (u'central', u'ncfs000'), (u'de', u'sps00'), (u'gas', u'ncms000'), (u'de', u'sps00'), (u'495', u'Z'), (u'megavatios', u'ncmp000'), (u'.', u'Fp')] 
>>> train_set_nostop[0] 
[(u'grupo', u'ncms000'), (u'estatal', u'aq0cs0'), (u'Electricit\xe9_de_France', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EDF', u'np00000'), (u'-Fpt-', u'Fpt'), (u'anunci\xf3', u'vmis3s0'), (u'hoy', u'rg'), (u',', u'Fc'), (u'jueves', u'W'), (u',', u'Fc'), (u'compra', u'ncfs000'), (u'51_por_ciento', u'Zp'), (u'empresa', u'ncfs000'), (u'mexicana', u'aq0fs0'), (u'Electricidad_\xc1guila_de_Altamira', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EAA', u'np00000'), (u'-Fpt-', u'Fpt'), (u',', u'Fc'), (u'creada', u'aq0fsp'), (u'japon\xe9s', u'aq0ms0'), (u'Mitsubishi_Corporation', u'np00000'), (u'poner_en_marcha', u'vmn0000'), (u'central', u'ncfs000'), (u'gas', u'ncms000'), (u'495', u'Z'), (u'megavatios', u'ncmp000'), (u'.', u'Fp')] 
>>> 

기차 술래 :

>>> uni_tag = UnigramTagger(train_set) 

기차 중지 단어없이 신체와 술래 :

>>> train_set_nostop = [[(word,tag) for word, tag in sent if word.lower() not in stoplist] for sent in train_set] 

차이를 참조

>>> uni_tag_nostop = UnigramTagger(train_set_nostop) 

분할 단어에 test_set 및 태그 :

>>> test_words, test_tags = zip(*[zip(*sent) for sent in test_set]) 

태그 테스트 문장 :

>>> uni_tag.tag_sents(test_words) 
>>> uni_tag_nostop.tag_sents(test_words) 

정확성 (그냥 지금은 진정한 양성을하자)을 평가 :

>>> sum([ sum(1 for (word,pred_tag), (word, gold_tag) in zip(pred,gold) if pred_tag==gold_tag) for pred, gold in zip(tagged_sents, test_set)]) 
11266 
>>> sum([ sum(1 for (word,pred_tag), (word, gold_tag) in zip(pred,gold) if pred_tag==gold_tag) for pred, gold in zip(tagged_sents_nostop, test_set)]) 
5963 

참고 여기에 때를 부당 많은 일이있다 태거를 훈련하기 전에 다음 단어를 삭제했습니다.

  • 귀하의 교육 세트는 자연스럽게 작을 것입니다.문장에서 단어 중지 단어

  • 을 포함 않습니다 테스트 세트 이후 술래의 정확성을 줄일 술래 모든 중지 단어에 대해 없음을 반환하지 않습니다 따라서 중지 단어의 태그를 배우고되지 않습니다

  • 중지 단어를 제거한 후 작은

    더 높은 순위 ngram을 학습 할 때, 불용어 없이는 전혀 이해가되지 않을 수 있습니다. 그 문법이나 감각이 정확성을 설명하지는 않습니다 (특히 오늘날의 NLP에서). 예 : , "고양이가 탁자 위에있다"-> "고양이 탁자"는 불용 단어가 없다.

그러나 @alexia로

모델 일명 분산 된 모델로, 일명. "당신은 이웃에 의해 단어를 알 수있다"(백 - 중 - 단어 기반 벡터 공간 모델, 지적, 일명. 비 신경 예상 임베딩 모델), 중지 단어를 제거하면 정확도 측면에서 약간의 마일리지가 발생할 수 있습니다. 그러나 TF-IDF의 경우 (마술처럼) 마 법적 인 것은 대부분의 문서에서 너무 자주 나타나고 각 문서를 다른 것으로 만들기위한 차별 속성이 적기 때문에 불용어가 자동으로 낮은 TF-IDF 점수를 갖게된다는 것입니다 그것들은 그렇게 중요하지 않습니다. 그것은 마술을하는 IDF 부분입니다).

관련 문제