게시일: 2023년 11월 29일
기고자: Jacob Murel Ph.D., Eda Kavlakoglu
여러 텍스트 정규화 기술 중 하나인 어간 추출은 원시 텍스트 데이터를 자연어 처리 작업을 위해 읽을 수 있는 형식으로 변환합니다.
팀이 책임감 있는 AI를 가속화하는 데 도움이 되는 구성 요소와 모범 사례를 알아보세요.
생성형 AI에 관한 eBook 등록
검색 및 찾기 기능부터 딥러닝 모델에 이르기까지 컴퓨터는 주로 형식에 따라 언어를 처리하는 데, 많은 연구자들은 컴퓨터가 언어의 의미를 이해할 수 없다고 주장합니다.2 후자에 대해 이의를 제기하는 사람들도 있지만, 머신 러닝 모델이 여러 단어를 하나의 기본 단어의 형태적 변형으로 인식하도록 학습시켜야 하는 것은 사실입니다. 예를 들어, 검색 엔진이나 라이브러리 카탈로그에서 사용자는 한 단어(예: investing)로 쿼리를 제출할 수 있지만 변형된 단어 형태(예: invest, investment, investments 등)을 사용한 결과도 기대할 수 있습니다. 어간 추출은 파생어 단어 형식을 하나의 어간 단어로 줄임으로써 정보 검색 시스템이 형태학적으로 관련된 단어를 동일시할 수 있게 지원합니다.3
어간 추출은 텍스트 분류, 클러스터링, 인덱싱 등 많은 텍스트 마이닝 작업에서 머신 러닝 알고리즘의 차원을 축소하고 개념에 따라 단어를 그룹화하여 정확도를 개선하는 데 도움이 됩니다. 알고리즘 차원을 줄이면 토픽 모델 및 단어 임베딩과 같은 통계적 NLP 모델의 정확도와 정밀도를 향상할 수 있습니다.4 따라서 어간 추출은 음성 태깅의 일부에 대한 감정 분석과 같은 다양한 NLP 작업을 수행할 때 정확도를 향상시킵니다. 이러한 방식으로 어간 추출은 대규모 언어 모델을 개발하는 데 있어 중요한 단계로 사용됩니다.
어간 추출 알고리즘 연산 간의 차이점을 살펴보기 위해 셰익스피어의 한여름 밤의 꿈)에 나오는 'Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind'를 처리해보겠습니다. 어간을 추출하기 전에 원시 텍스트 데이터를 토큰화해야 합니다. Python 자연어 툴킷에서 기본 제공되는 토큰화 도구(NLTK)는 인용된 텍스트를 다음과 같이 출력합니다.
토큰화: ['Love', 'looks', 'not', 'with', 'the', 'eyes', 'but', 'with', 'the', 'mind', ',', 'and', 'therefore', 'is', 'winged', 'Cupid', 'painted', 'blind', '.']
토큰화된 아웃풋을 여러 어간 추출기를 통해 실행하여 어간 추출 알고리즘이 어떻게 다른지 관찰할 수 있습니다.
Lovins 어간 추출기는 최초로 발표된 어간 추출 알고리즘입니다. 고도로 매개변수화된 찾기 및 바꾸기 기능으로 작동합니다. 모든 입력 토큰을 일반적인 접미사 목록과 비교하며, 각 접미사는 29개의 규칙 중 하나에 따라 조건이 지정됩니다. 목록에 포함된 접미사 중 하나가 토큰에서 발견되고 해당 접미사를 제거해도 관련 접미사의 조건을 위반하지 않는 경우, 알고리즘은 토큰에서 해당 접미사를 제거합니다. 그런 다음 어간 추출 토큰은 다른 규칙 집합을 따라 실행되어 이중 문자와 같은 줄기 어근의 일반적인 변형(예: hopping을 hopp으로, 다시 hop으로)을 수정합니다.6
이 코드는 Python 어간 추출 라이브러리7를 사용하여 토큰화된 셰익스피어 인용문을 추출합니다.
from stemming.lovins import stem from nltk.tokenize import word_tokenize text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind." words = word_tokenize(text) stemmed_words = [stem(word) for word in words]
코드의 아웃풋은 다음과 같습니다.
어간: ['Lov', 'look', 'not', 'with', 'th', 'ey', 'but', 'with', 'th', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'Cupid', 'paint', 'blind', '.']
아웃풋 결과는 Lovins 어간 추출기가 복수형을 제거하는 동시에(예: eyes를 eye로) 활용과 시제를 기본형으로 올바르게 바꾸는 방법(예: painted를 paint로)을 보여줍니다. 하지만 Lovins 어간 추출 알고리즘은 lov, th, ey 등과 같이 잘못 구성된 어간도 반환합니다. 이처럼 잘못된 어간은 너무 많은 문자를 제거한 결과입니다. 머신 러닝에서 흔히 그렇듯이 이러한 오류는 기본 프로세스를 파악하는 데 도움이 됩니다.
Lovins 어간 추출기의 접미사 목록과 비교할 때 love와 the에 모두에 해당하는 가장 긴 접미사는 단일 문자 -e입니다. 이 접미사에 붙은 유일한 조건은 '어간에 제한 없음'으로, 나머지 어간의 길이에 관계없이 -e를 제거할 수 있습니다. 그러나 어간 lov 또는 th에는 Lovins 알고리즘이 이중 문자 또는 불규칙 복수형과 같은 잘못된 단어를 식별하는 데 사용하는 특징이 포함되어 있지 않습니다.8
이처럼 잘못된 형태의 어간이 알고리즘을 통과하지 못하면 Lovins 어간 추출기는 의미적으로 관련 없는 단어를 같은 어간으로 축소할 수 있습니다. 예를 들면 the, these, this가 모두 th로 축소되는 것입니다. 물론 이 세 단어는 모두 지시어이므로 문법적 기능을 공유합니다. 하지만 that이나 those와 같은 다른 지시어는 th로 축소되지 않습니다. 이는 Lovins에서 생성된 어간이 단어 그룹을 제대로 대표하지 못한다는 뜻입니다.
Lovins 어간 추출기와 비교할 때 Porter 어간 추출 알고리즘은 좀 더 수학적인 어간 추출 알고리즘을 사용합니다. 기본적으로 이 어간 추출기는 주어진 토큰의 모든 문자를 자음(c) 또는 모음(v)으로 분류하여 후속 자음을 C로 그룹화하고 후속 모음을 V로 그룹화합니다. 따라서 어간 추출기는 모든 단어 토큰을 자음과 모음 그룹의 조합으로 표현합니다. 토큰이 이러한 방식으로 열거되면 어간 추출기는 토큰의 모음-자음 그룹 수에 따라 제거할 끝 문자를 지정하는 규칙 목록을 통해 각 단어 토큰을 실행합니다.9 영어 자체는 절대적인 어휘 규칙이 아닌 일반적인 어휘 규칙을 따르기 때문에 접미사 제거를 결정하는 Porter 어간 추출 알고리즘의 체계적 기준은 오류를 반환할 수 있습니다.
Python NLTK에는 Porter 어간 추출기 함수가 내장되어 있습니다. 다음 코드는 토큰화된 셰익스피어 인용문에 Porter 어간 추출 알고리즘을 적용합니다.
from nltk.stem import PorterStemmer from nltk.tokenize import word_tokenize porter_stemmer = PorterStemmer() text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind." words = word_tokenize(text) stemmed_words = [porter_stemmer.stem(word) 단어 내 단어]
이 코드는 다음을 반환합니다.
어간: ['love', 'look', 'not', 'with', 'the', 'eye', 'but', 'with', 'the', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'cupid', 'paint', 'blind', '.']
Lovins와 마찬가지로 Porter도 동사 활용형과 명사 복수형을 올바르게 변경합니다. Porter 어간 추출 알고리즘은 Lovins의 다른 잘못된 어간(예: love to lov)이 없는데도 therefore의 끝에서 -e를 제거합니다.
Porter 어간 추출기의 자음-모음 그룹화 방식에 따르면, therefore의 자음-모음 그룹의 반복을 나타내는 지수는 CVCVCVCV 또는 C(VC)3V로표현됩니다.
알고리즘의 마지막 단계 중 하나는 단어가 어간 추출을 거치지 않았고 지수 값이 1보다 큰 경우 단어의 어미에서 -e를 제거(있는 경우)하는 것입니다. Therefore의 지수 값은 3이며 알고리즘의 다른 조건에 나열된 접미사를 포함하지 않습니다.10 그러므로 therefore는 therefor가 됩니다.
물론 이것은 Porter 어간 추출기의 유일한 오류이며, Porter 어간 추출기가 가장 널리 사용되는 알고리즘이 된 이유를 잘 보여준다고 할 수 있습니다. 실제로, Porter 어간 추출기는 나중에 발표된 다른 어간 추출 알고리즘의 기반이 되었습니다.
Snowball 어간 추출기는 Porter 어간 추출기가 업데이트된 버전입니다. 접미사 제거를 결정하기 위해 보다 강력한 규칙을 적용하는 것을 목표로 하지만, 여전히 동일한 오류가 많이 발생합니다. Porter 어간 추출기와 마찬가지로 Python NLTK에는 기본 제공 Snowball 어간 추출기 함수가 포함되어 있습니다.
from nltk.stem.snowball import SnowballStemmer from nltk.tokenize import word_tokenize stemmer = SnowballStemmer("english", True) text = "There is nothing either good or bad but thinking makes it so." words = word_tokenize(text) stemmed_words = [stemmer.stem(word) for word in word]
Porter 어간 추출기와 동일한 셰익스피어 텍스트의 아웃풀을 생성하지만 therefore를 therefor로 잘못 축소합니다.
어간: ['love', 'look', 'not', 'with', 'the', 'eye', 'but', 'with', 'the', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'cupid', 'paint', 'blind', '.']
Snowball 어간 추출기는 Porter와 크게 두 가지 측면에서 다릅니다. 첫째, Lovins와 Porter 어간 추출기는 영어 단어에서만 어간을 추출하는 반면, Snowball 어간 추출기는 네덜란드어, 독일어, 프랑스어 및 러시아어와 같은 여러 다른 로마 문자 언어의 텍스트에서도 어간을 추출할 수 있습니다. 둘째, Python NLTK 라이브러리를 통해 구현된 Snowball 어간 추출기는 중지어를 무시할 수 있습니다. 중지어는 전처리 중에 데이터 세트에서 제거되는 비보편적인 단어 모음입니다. Snowball 어간 추출기의 사전 정의된 중지어 목록에는 직접적인 개념적 정의가 없고 의미론적 기능보다 문법적 기능을 더 많이 수행하는 단어가 포함되어 있습니다. Snowball 어간 추출기 영어 중지 목록에 포함된 중지어에는 the, a, being 등이 있습니다.11
많은 출처에서 Lancaster 어간 추출기(Paice 어간 추출기라고도 함)를 영어 어간 추출기 중 가장 공격적인 추출기로 꼽습니다. Lancaster 어간 추출기에는 끝 문자 문자열(있는 경우)을 다른 문자열로 대체할 것을 지시하는 100개 이상의 규칙 목록이 포함되어 있습니다. 어간 추출기는 각 단어 토큰을 반복하여 모든 규칙에 대해 확인합니다. 토큰의 끝 문자열이 규칙의 끝 문자열과 일치하면 알고리즘은 규칙에 설명된 연산을 실행한 다음, 변형된 새 단어에 모든 규칙을 다시 실행합니다. 어간 추출기는 지정된 토큰이 변환되지 않고 모든 규칙을 통과할 때까지 규칙을 전부 반복합니다.12
Lancaster 어간 추출기는 Python NLTK에서는 사용할 수 없지만 어간 추출 라이브러리에서 사용할 수 있습니다.13
from stemming.paicehusk import stem from nltk.tokenize import word_tokenize text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind." words = word_tokenize(text) stemmed_words = [stem(word) for word in words]
이 코드는 토큰화된 셰익스피어 구절을 다음과 같이 요약합니다.
어간: ['Lov', 'look', 'not', 'with', 'the', 'ey', 'but', 'with', 'the', 'mind', ',', 'and', 'theref', '', 'wing', 'Cupid', 'paint', 'blind', '.']
theref에서 알 수 있듯, Lancaster 어간 추출기의 반복적 접근 방식은 여러 어간 추출기 중 가장 공격적입니다. 첫째, Lancaster 어간 추출기에는 'e1>' 규칙이 있습니다. 이 규칙은 단일 문자-e를 대체 문자 없이 제거합니다. 알고리즘은 therefore에서 -e를 제거한 후 새로운 therefor에 각 규칙을 다시 실행합니다. 새로 변환된 단어는 'ro2>'라는 규칙에 맞습니다. 이 규칙은 두 글자 접미사 -or를 대체 문자 없이 제거합니다. 그 결과로 생성된 어간 theref는 알고리즘의 다른 규칙에 맞지 않으므로 추출된 어간으로 반환됩니다. Lovins와 달리 Lancaster 알고리즘에는 잘못된 형식의 단어를 설명할 수 있는 방법이 없습니다.
연구에 따르면 어간 추출이 NLP 작업 정확도를 향상하는 데 중요한 역할을 하지만, 사용자가 주의해야 할 두 가지 주요 문제가 있습니다. 과잉 어간 추출과 과소 어간 추출입니다. 과잉 어간 추출은 의미상 서로 다른 두 단어가 동일한 어근으로 축소되어 합쳐지는 경우입니다. 과소 어간 추출은 의미상 관련된 두 단어가 동일한 어근으로 축소되지 않는 경우를 나타냅니다.17 과잉 어간 추출의 예는 Lancaster 어간 추출기가 wander를 영어에서 의미적으로 다른 단어인 wand로 줄이는 것입니다. 그러나 Porter 및 Lovins 어간 추출기는 모두 wander를 전혀 바꾸지 않습니다. 과소 어간 추출의 예는 Porter 어간 추출기가 동일한 의미론적 어근을 공유하는 knavish를 knavish로, knave를 knave로 축소하지 않는 것입니다. 이에 반해 Lovins 어간 추출기는 두 단어를 모두 knav로 줄입니다.
어간 추출과 표제어 추출은 용도와 목적은 비슷하지만, 작지만 중요한 면에서 차이를 가집니다. 문헌에서는 기본적으로 단어에서 일반적인 접미사를 제거하여 어근을 생성하는 어간 추출을 보다 발견적인 방법으로 설명하는 경우가 많습니다. 이에 비해 표제어 추출은 다양한 단어에 대해 보다 상세한 형태론적 분석을 수행하여 접미사뿐만 아니라 접두사도 제거함으로써 사전적 기본 형태를 결정합니다. 어간 추출은 더 빠르고 쉽게 구현되지만, 딥러닝 도구 개발자들은 더 미묘한 제거 절차를 사용하는 표제어 추출을 선호할 수 있습니다.
AI로 작업하는 방식을 새롭게 상상해 보세요. 20,000여 명의 다양한 글로벌 AI 전문가 팀은 비즈니스 전반에 걸쳐 AI와 자동화를 신속하고 자신 있게 설계하고 확장할 수 있도록 지원하며, 자체 IBM watsonx 기술과 파트너사의 개방형 에코시스템을 통해 윤리와 신뢰를 바탕으로 모든 클라우드에서 모든 AI 모델을 제공할 수 있습니다.
비즈니스 전반에 AI를 구현하여 신속하고 윤리적인 이점을 제공합니다. IBM의 광범위한 비즈니스 등급 AI 제품 및 분석 솔루션 포트폴리오는 AI 도입 장벽을 낮추고 적절한 데이터 기반을 구축하는 동시에 결과와 윤리적인 사용을 최적화하도록 설계되었습니다.
IBM의 차세대 AI 및 데이터 플랫폼으로 AI의 역량을 강화하세요. IBM watsonx는 비즈니스용 툴, 애플리케이션 및 솔루션 포트폴리오입니다. AI 도입에 따른 비용과 장애물을 줄이면서 결과를 최적화하고 AI의 책임 있는 사용을 최적화하도록 설계되었습니다.
IBM 연구진은 아랍어 텍스트에서 형태학적 단어 세분화에 대한 접근 방식을 비교하고 NLP 작업에 대한 중요성을 입증합니다.
IBM Watson Explorer 문서는 사용자가 과잉 어간 추출 및 과소 어간 추출에 대한 빠른 수정을 구현할 수 있도록 안내합니다.
1 Ruslan Mitkov, Oxford Handbook of Computational Linguistics, 2nd edition, Oxford University Press, 2014.
2 Emily Bender and Alexander Koller, “Climbing towards NLU: On Meaning, Form, and Understanding in the Age of Data,” Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, 2020, pp. 5185-5198, https://aclanthology.org/2020.acl-main.463/ (ibm.com 외부 링크)
3 Steven Bird, Ewan Klein, and Edward Loper, Natural Language Processing with Python, O’Reilley, 2009.
4 Gary Miner, Dursun Delen, John Elder, Andrew Fast, Thomas Hill, and Robert A. Nisbet, Practical Text Mining and Statistical Analysis for Non-Structured Text Data Applications, Academic Press, 2012.
5 Christopher Manning and Hinrich Schütze, Foundations of Statistical Natural Language Processing, MIT Press, 1999.
6 Julie Beth Lovins, "Development of a stemming algorithm," Mechanical Translation and Computational Linguistics, Vol. 11, Nos. 1 and 2, 1968, pp. 22-31,
https://aclanthology.org/www.mt-archive.info/MT-1968-Lovins.pdf (ibm.com 외부 링크)
7 https://pypi.org/project/stemming/1.0/ (ibm.com 외부 링크)
8 Julie Beth Lovins, "Development of a stemming algorithm," Mechanical Translation and Computational Linguistics, Vol. 11, Nos. 1 and 2, 1968, pp. 22-31,
https://aclanthology.org/www.mt-archive.info/MT-1968-Lovins.pdf (ibm.com 외부 링크)
9 Martin Porter, "An algorithm for suffix stripping", Program: electronic library and information systems, Vol. 14, No. 3, 1980, pp. 130-137, https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html (ibm.com 외부 링크)
10 Martin Porter, "An algorithm for suffix stripping", Program: electronic library and information systems, Vol. 14, No. 3, 1980, pp. 130-137, https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html (ibm.com 외부 링크)
11 Martin Porter, “Snowball: A language for stemming algorithms,” 2001, https://snowballstem.org/texts/introduction.html (ibm.com 외부 링크)
12 Chris Paice, “Another stemmer," ACM SIGIR Forum, Vol. 24, No. 3, 1990, pp. 56–61, https://dl.acm.org/doi/10.1145/101306.101310 (ibm.com 외부 링크)
13 https://pypi.org/project/stemming/1.0/ (ibm.com 외부 링크)
14 Y. A. Alhaj, J. Xiang, D. Zhao, M. A. A. Al-Qaness, M. Abd Elaziz and A. Dahou, "A Study of the Effects of Stemming Strategies on Arabic Document Classification," IEEE Access, Vol. 7, pp. 32664-32671, https://ieeexplore.ieee.org/document/8664087 (ibm.com 외부 링크) Janneke van der Zwaan, Maksim Abdul Latif, Dafne van Kuppevelt, Melle Lyklema, Christian Lange, "Are you sure your tool does what it is supposed to do? Validating Arabic root extraction," Digital Scholarship in the Humanities, Vol. 36, 2021, pp. 137–150, https://academic.oup.com/dsh/article/36/Supplement_1/i137/5545478?login=false (ibm.com 외부 링크)
15 Ratnavel Rajalakshmi, Srivarshan Selvaraj, Faerie Mattins, Pavitra Vasudevan, Anand Kumar, "HOTTEST: Hate and Offensive content identification in Tamil using Transformers and Enhanced Stemming," Computer Speech & Language, Vol. 78, 2023, https://www.sciencedirect.com/science/article/abs/pii/S0885230822000870?via%3Dihub (ibm.com 외부 링크)
16 Siba Sankar Sahu and Sukomal Pal, "Building a text retrieval system for the Sanskrit language: Exploring indexing, stemming, and searching issues," Computer Speech & Language, Vol. 81, 2023, https://www.sciencedirect.com/science/article/abs/pii/S0885230823000372?via%3Dihub (ibm.com 외부 링크)
17 Chris Paice, “Stemming,” Encyclopedia of Database Systems, Springer, 2020.