NLP 소개-2 부 : lemmatisation과 형태소 분석의 차이점

lemmatisation과 형태소 분석의 차이점이 무엇인지 궁금하십니까? 답이 궁금하다면이 게시물에서 설명을 시도합니다.

Unsplash에 RetroSupply의 사진

1. 정의 📗

기본형 화와 형태소 분석은 단어의 어근 형태를 얻기 위해 텍스트를 정규화하는 다른 기술입니다. Christopher D. Manning, Prabhakar Raghavan 및 Hinrich Schütze는 그들의 저서 : Introduction to Information Retrieval , 2008 에서 다음과 같이 두 개념을 간결하게 정의했습니다 .

💡 “Stemming은 보통 대부분의 경우이 목표를 올바르게 달성하기 위해 단어 끝을 잘라내는 조잡한 휴리스틱 프로세스를 의미하며, 종종 파생 접미사 제거를 포함합니다…. Stemmer는 언어 별 규칙을 사용하지만, lemmatizer보다 적은 지식…”

💡 “표 형화는 일반적으로 어휘와 단어의 형태 학적 분석을 사용하여 일을 올바르게 수행하는 것을 의미하며, 일반적으로 어휘 어미 만 제거하고 기본형 또는 기본형으로 알려진 단어의 기본 또는 사전 형식을 반환하는 것을 목표로합니다. , 단어를 올바르게 분류하려면 완전한 어휘 및 형태 학적 분석이 필요합니다…”

이러한 정의를 처음 읽는 경우 바로 클릭하지 않을 수 있습니다. 이러한 정의는 매우 풍부하고 밀도가 높기 때문에 천천히주의 깊게 반복적으로 읽는 것이 도움이됩니다. 이 게시물을 읽은 후 돌아 오면 이러한 정의가 더 의미가 있기를 바랍니다.

단순화 개요 : 형태소 사용은 규칙을 미리 정의 로 단어를 변환하는 줄기 lemmatisation가 사용 된 반면, 컨텍스트어휘 라이브러리 유도하는 보조 정리 . 줄기는 항상 반면, 올바른 단어를 할 필요가 없습니다 보조 정리가 있기 때문에 항상 올바른 단어 될 것입니다 보조 정리는 단어의 사전 형태입니다.

곧 예제에서 볼 수 있듯이 두 기술 모두 때때로 동일한 결과를 얻을 수 있습니다.

2. Python 설정 🔧

이 섹션에서는 패키지 설치, 함수 정의 및 기타 기본 작업을 포함하여 Python에 액세스 할 수 있고 익숙하다고 가정합니다. 파이썬을 처음 사용하는 경우 시작하기에 좋은 장소입니다.

Python 3.7.1에서 스크립트를 사용하고 테스트했습니다. 코드를 사용하기 전에 올바른 도구가 있는지 확인합시다.

⬜️ 필요한 패키지가 설치되어 있는지 확인하십시오 : pandas & nltk

다음과 같은 강력한 타사 패키지를 사용합니다.

  • pandas : 데이터 분석 라이브러리 및
  • nltk : Natural Language Tool Kit 라이브러리

아래 스크립트는이 말뭉치를 다운로드하는 데 도움이 될 수 있습니다. 이미 다운로드 한 경우이를 실행하면 최신 상태임을 알립니다.

import nltk
nltk.download('wordnet')

예제로 들어가기 전에 다양한 유형의 형태소 분석기 및 레마 티저를 사용할 수 있음을 알아야합니다. 예상 할 수 있듯이 한 유형의 형태소 분석기는 다른 유형과 다르게 어간이 다를 수 있습니다. 레마 티저도 마찬가지입니다.

예제에서는 nltk의 PorterStemmer, LancasterStemmerWordNetLemmatizer사용 하여 단어를 정규화합니다.

💡 PorterStemmer : 가장 일반적으로 사용되는 형태소 분석기 중 하나입니다. Porter Stemming Algorithm을 기반으로합니다. 자세한 내용은 공식 웹 페이지를 확인하십시오 : https://tartarus.org/martin/PorterStemmer/

💡 LancasterStemmer : Lancaster Stemming Algorithm을 기반으로하며 때때로 PorterStemmer 보다 더 공격적인 형태소 분석이 발생할 수 있습니다.

💡 WordNetLemmatiser : WordNet 어휘 데이터베이스를 사용하여 정리합니다. WordNet에서 찾을 수없는 경우 입력 단어를 변경하지 않고 반환합니다.

세 가지 대안을 사용하여 단어를 정규화하는 함수를 만들어 보겠습니다.

# Import packages
import pandas as pd
from nltk.stem import PorterStemmer, LancasterStemmer, WordNetLemmatizer
# Instantiate stemmers and lemmatiser
porter = PorterStemmer()
lancaster = LancasterStemmer()
lemmatiser = WordNetLemmatizer()
# Create function that normalises text using all three techniques
def normalise_text(words, pos='v'):
    """Stem and lemmatise each word in a list. Return output in a dataframe."""
    normalised_text = pd.DataFrame(index=words, columns=['Porter', 'Lancaster', 'Lemmatiser'])
    for word in words:
        normalised_text.loc[word,'Porter'] = porter.stem(word)
        normalised_text.loc[word,'Lancaster'] = lancaster.stem(word)
        normalised_text.loc[word,'Lemmatiser'] = lemmatiser.lemmatize(word, pos=pos)
    return normalised_text

normalise_text(['apples', 'pears', 'tasks', 'children', 'earrings', 'dictionary', 'marriage', 'connections', 'universe', 'university'], pos='n')

normalise_text(['pie', 'globe', 'house', 'knee', 'angle', 'acetone', 'time', 'brownie', 'climate', 'independence'], pos='n')

다양한 형태의 동사를 표준화하기위한 몇 가지 규칙을 제안 해달라고 요청했다면 무엇을 추천 하시겠습니까? 접미사 'ing'또는 'ed'를 제거할까요? 이로 충분하기 전에 모음 앞에 이중 자음이 있으면 마지막 자음도 제거 하시겠습니까? 등등…

기본 알고리즘의 복잡한 세부 사항에 익숙하지 않지만 앞서 언급 한 규칙을 사용한 형태소 분석은 계산 및 언어 적 관점에서 훨씬 더 정교하고 잘 생각 된 규칙을 활용하는 실제 형태소 분석의 지나치게 단순화 된 버전 인 것 같습니다.

이제 몇 가지 동사를 살펴 보겠습니다.

normalise_text(['wrote', 'thinking', 'remembered', 'relies', 'ate', 'gone', 'won', 'ran', 'swimming', 'mistreated'], pos='v')

4. 속도 비교 🐎

lemmatisation 및 형태소 분석에 대해 연구 할 때 형태소 분석이 lemmatisation보다 빠르다는 많은 리소스를 발견했습니다. 그러나 내 컴퓨터의 샘플 데이터에 대해 세 개의 노멀 라이저를 테스트 할 때 나는 그 반대를 관찰했습니다.

from nltk.corpus import movie_reviews
from nltk.tokenize import RegexpTokenizer
# Import data
reviews = []
for fileid in movie_reviews.fileids():
    tag, filename = fileid.split('/')
    reviews.append((tag, movie_reviews.raw(fileid)))
sample = pd.DataFrame(reviews, columns=['target', 'document'])
# Prepare one giant string 
sample_string = " ".join(sample['document'].values)
# Tokenise data
tokeniser = RegexpTokenizer(r'\w+')
tokens = tokeniser.tokenize(sample_string)
%%timeit 
lemmatiser = WordNetLemmatizer()
[lemmatiser.lemmatize(token, 'v') for token in tokens]
%%timeit porter = PorterStemmer() [porter.stem(token) for token in tokens]
%%timeit lancaster = LancasterStemmer() [lancaster.stem(token) for token in tokens]

이 게시물에 언급되지 않은 다른 lemmatisers 및 형태소 분석기는 다른 이야기를 제공 할 수 있습니다.

5. 효과적인 lemmatisation을위한 두 가지 팁 💡

5.1. 품사 태그 💬

예제 명사와 동사를 정규화하기위한 코드 조각을 살펴보면 pos인수가 둘 사이에 다르다는 것을 알 수 있습니다. 단어에 대한 품사 태그를 가리키는이 인수는 단어가 어떻게 표명 화되는지에 중요한 역할을합니다. 품사 태그는 레마 티저에게 단어 의 컨텍스트 를 제공합니다 . 몇 가지 예를 살펴 보겠습니다.

lemmatiser = WordNetLemmatizer()
print(f"Lemmatising 'remembered' with pos='v' results in: {lemmatiser.lemmatize('remembered', 'v')}")
print(f"Lemmatising 'remembered' with pos='n' results in: {lemmatiser.lemmatize('remembered', 'n')}\n")
print(f"Lemmatising 'universities' with pos='v' results in: {lemmatiser.lemmatize('universities', 'v')}")
print(f"Lemmatising 'universities' with pos='n' results in: {lemmatiser.lemmatize('universities', 'n')}")

5.2. 케이스 🔠 🔡

또한 단어의 대소 문자가 중요합니다.

print(f"Lemmatising 'Remembered' with pos='v' results in: {lemmatiser.lemmatize('Remembered', 'v')}")
print(f"Lemmatising 'Remembered' with pos='n' results in: {lemmatiser.lemmatize('Remembered', 'n')}\n")
print(f"Lemmatising 'Universities' with pos='v' results in: {lemmatiser.lemmatize('Universities', 'v')}")
print(f"Lemmatising 'Universities' with pos='n' results in: {lemmatiser.lemmatize('Universities', 'n')}")

이 글을 읽어 주셔서 감사합니다. lemmatisation 및 형태소 분석에 대해 약간 배웠기를 바랍니다. 게시물을 읽은 후 한 번 더 정의로 다시 스크롤하면 처음 읽었을 때보 다 더 이해가 되나요? 👀 나머지 게시물에 대한 링크는 다음과 같습니다
.◼️ 파트 1 : Python에서 텍스트 전처리
◼️ 파트 2 : 형식화와 형태소 분석의
차이점 ◼️ 파트 3 : TF-IDF 설명
◼️ 파트 4 : Python의 감독 텍스트 분류 모델

행복한 정상화! 지금은 안녕 🏃💨

4. 참조 📁

Suggested posts

베이지안 확산 모델링을 사용한 고급 예측

베이지안 확산 모델링을 사용한 고급 예측

데이터 과학의 모든 영역에서 동적 현상을 예측하고 설명하기위한 혁신적인 모델링 솔루션에 대한 수요가 많습니다. 모델링 및 동적 현상 예측의 높은 프로필 사용 사례는 다음과 같습니다. 오픈 소스 데이터 세트에 적용된 베이지안 확산 모델링을 보여주는 종단 간 예제가 제공됩니다.

비용이 많이 드는 앱은 무료 앱보다 높은 평가를 받습니까?

비용이 많이 드는 앱은 무료 앱보다 높은 평가를 받습니까?

애플리케이션의 평균 사용자 평점은 사용자가 앱을 즐기는 지 여부와 앱의 성공 수준을 결정하는 데 도움이되는 훌륭한 지표입니다. 사용자가 응용 프로그램을 구입해야하는 경우 응용 프로그램에 대한 표준이 무료 응용 프로그램에 비해 높습니다.

Related posts

Spotify의 마법 성분 : 기계 학습

Spotify의 마법 성분 : 기계 학습

면책 조항 :이 기사는 Spotify와 관련이 없으며 Spotify 및 현재 관련이 없을 수있는 과거 구조에 대한 확인되지 않은 정보로 구성 될 수 있습니다. 음악은 표현의 한 형태, 예술의 형태, 전체적인 문화 활동입니다.

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

신경 과학에서 자동 분화, 신경망 이론 및 신경 과정의 과소 적합에 이르기까지 현재 추구되고있는 다양한 딥 러닝 연구 흐름에 대한 더 나은 개요를 얻고 싶으십니까? 합리적으로 통과하기에는 열려있는 arXiv 탭이 너무 많습니까? 전체 동영상을 볼 시간이 너무 적습니까? 논문의 핵심 아이디어와 개념에 대한 간략한 요약 만 있다면. 그런 다음 '머신-러닝-콜라주'시리즈를 소개하게되어 기쁩니다.

내부의 관심 네트워크 그래프

수학에서 NumPy까지 단계별 가이드

내부의 관심 네트워크 그래프

그래프 신경망 (GNN)은 그래프 데이터에서 학습 할 수있는 표준 도구 상자로 등장했습니다. GNN은 콘텐츠 추천 또는 신약 발견과 같은 다양한 분야에서 영향이 큰 문제를 개선 할 수 있습니다.

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

안녕하세요! 이미지 분할에 대한이 짧은 시리즈의 첫 번째 부분을 읽지 않았다면 여기에서 읽으십시오. 이전 이야기에서 임계 값 및 색상 분할에 대해 논의 했으므로 2 부에서는 색도 분할과 이미지 차이에 중점을 둘 것입니다.