어간 추출 및 표제어 추출은 단어 변형을 하나의 기본 형태로 줄이는 텍스트 전처리 기법입니다.
어간 추출 및 표제어 추출은 자연어 처리(NLP)의 텍스트 전처리 기법입니다. 구체적으로는 텍스트 데이터 세트에서 단어의 변형된 형태를 하나의 공통 어근 또는 사전적 형태로 줄이는 것으로, 이러한 형태를 컴퓨터 언어학에서는 '레마(lemma)'라고 합니다.1
어간 추출 및 표제어 추출은 검색 엔진과 같이 사용자가 한 단어(예: meditate)로 쿼리를 제출하지만 그 단어의 변형된 형태(예: meditates, meditation 등)를 사용하는 결과를 기대하는 정보 검색 시스템에서 특히 유용합니다. 어간 추출 및 표제어 추출은 머신 러닝 알고리즘의 텍스트 처리를 개선하는 데에도 사용됩니다.
연구자들은 인공 지능이 추론할 수 있는지에 대해 논쟁을 벌이고 있으며, 이 논쟁은 계산 언어학으로까지 확장되었습니다. 챗봇과 딥 러닝 모델은 언어적 형태만 처리할 수 있을까요, 아니면 의미론까지 이해할 수 있을까요?2 이 질문에 대해 어떤 견해를 가지고 있든, 머신 러닝 모델이 다양한 단어를 하나의 기본 단어의 형태적 변형으로 인식하도록 훈련해야 한다는 점은 변함이 없습니다. 심지어 단어의 의미가 아닌 형태를 기반으로 단어를 처리해야 합니다. 어간 추출 및 표제어 추출은 파생된 단어의 형태를 하나의 어간 단어로 줄임으로써 정보 검색 시스템과 딥 러닝 모델이 형태적으로 관련된 단어를 동일시하는 데 도움을 줍니다.
텍스트 분류, 클러스터링, 인덱싱 등 많은 텍스트 마이닝 작업에서 어간 추출 및 표제어 추출을 통해 머신 러닝 알고리즘의 차원을 축소하고 형태적으로 관련된 단어를 그룹화하여 정확도를 개선할 수 있습니다. 알고리즘 차원을 줄이면 토픽 모델이나 단어 벡터 모델과 같은 NLP의 통계 모델의 정확도와 정밀도를 향상할 수 있습니다.3
어간 추출 및 표제어 추출은 원시 텍스트 데이터를 기계가 처리할 수 있는 구조화된 형식으로 변환하는 텍스트 마이닝 파이프라인의 한 단계로 작용합니다. 어간 추출과 표제어 추출은 모두 변형된 단어 형태에서 접사를 제거하여 어근 형태만 남깁니다.4 이러한 프로세스는 단어 토큰의 시작과 끝에서 문자를 제거하는 것과 같습니다. 그런 다음 결과물인 어근 또는 기본 단어는 추가 처리를 위해 전달됩니다. 이러한 기본적인 유사성 외에도 어간 추출과 표제어 추출은 단어의 다양한 형태를 하나의 공통된 기본 형태로 줄이는 방식에서 중요한 차이점이 있습니다.
어간 추출 알고리즘들은 서로 크게 다르지만 몇 가지 일반적인 작동 방식은 공유합니다. 어간 추출기는 미리 정의된 공통 접미사 목록에 대해 입력 단어 토큰을 실행하여 단어 접미사를 제거합니다. 그런 다음, 접미사에 연결된 규칙이나 조건에 어긋나지 않는 경우 단어에서 발견된 접미사 문자 문자열을 제거합니다. 일부 어간 추출기(예: Lovins 어간 추출기)는 잘못된 어근을 수정하기 위해 추가 규칙 세트를 통해 결과 형태소 비트를 실행합니다.
가장 널리 사용되는 알고리즘은 Porter 어간 추출 알고리즘과 그 업데이트 버전인 Snowball 어간 추출기입니다. 어간 추출기에 대한 이해를 돕기 위해 셰익스피어의 햄릿에 수록된 “There is nothing either good or bad but thinking makes it so.”라는 구절을 Snowball 어간 추출기를 통해 실행해 보겠습니다.
Python 자연어 툴킷(NLTK)에는 Snowball 및 Porter 어간 추출기를 위한 기본 제공 함수가 포함되어 있습니다. 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 words] print("원본:", text) print("토큰화:", words) print("어간 추출:", stemmed_words)
다음과 같이 코드가 출력됩니다.
원본: There is nothing either good or bad but thinking makes it so. 토큰화: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.'] 어간 추출: ['there', 'is', 'noth', 'either', 'good', 'or', 'bad', 'but', 'think', 'make', 'it', 'so', '.']
Snowball과 Porter 어간 추출기 알고리즘은 다른 어간 추출기보다 접미사를 더 수학적으로 제거하는 방법을 가지고 있습니다. 간단히 말해, 어간 추출기는 토큰의 모음과 자음 그룹 수에 따라 제거할 접미사 문자열을 지정하는 규칙 목록에 대해 모든 단어 토큰을 실행합니다.5 물론 영어는 절대적인 어휘 규칙이 아닌 일반적인 어휘 규칙을 따르기 때문에 어간 추출 알고리즘의 체계적 기준은 noth과 같은 단어 오류를 반환할 수 있습니다.
어간 추출기는 현재 진행형을 나타내는 일반적인 어미인 -ing를 제거합니다. 그러나 햄릿 인용문에서 -ing을 제거하면 어간 noth가 잘못 생성됩니다. 이렇게 하면 이후 언어 분석에서 nothing을 anything 및 something과 같은 유사한 명사와 연관시키지 못하게 됩니다. 또한 어간 추출기는 불규칙 동사 is를 변경하지 않고 그대로 둡니다. Snowball 어간 추출기도 마찬가지로 was, are와 같은 to be의 다른 활용형을 어간 추출이 되지 않은 상태로 남겨둡니다. 이로 인해 모델이 주어진 동사의 불규칙 활용형을 제대로 연결하지 못할 수 있습니다.
문헌에서는 일반적으로 어간 추출을 어간 단어 문자열을 얻기 위해 단어에서 접사를 제거하는 과정으로 정의하고, 표제어 추출은 형태소 변형을 하나의 사전 기본 형태로 줄이는 더 큰 작업으로 정의합니다.6 어간 추출 및 표제어 추출의 실질적인 차이점은 어간 추출은 단순히 단어 토큰의 끝에서 일반적인 접미사를 제거하는 반면, 표제어 추출은 출력 단어가 사전에서 찾을 수 있는 기존의 정규화된 형태의 단어(예: lemma)가 되도록 한다는 점입니다.7
표제어 추출은 사전의 기본 형태를 출력하는 것을 목표로 하기 때문에 어간 추출보다 더 강력한 형태소 분석이 필요합니다. 품사(POS) 태깅은 표제어 추출에서 중요한 단계입니다. POS는 기본적으로 문장에서 구문 기능을 나타내는 각 단어 태그를 할당합니다. Python NLTK는 Word Net Lemmatization 알고리즘을 위한 함수를 제공하며, 이를 통해 햄릿 구절을 다음과 같이 표제어 추출할 수 있습니다.
from nltk.stem import WordNetLemmatizer from nltk.corpus import wordnet from nltk import word_tokenize, pos_tag def get_wordnet_pos(tag): if tag.startswith('J'): return wordnet.ADJ elif tag.startswith('V'): return wordnet.VERB elif tag.startswith('N'): return wordnet.NOUN elif tag.startswith('R'): return wordnet.ADV else: return wordnet.NOUN def lemmatize_passage(text): words = word_tokenize(text) pos_tags = pos_tag(words) lemmatizer = WordNetLemmatizer() lemmatized_words = [lemmatizer.lemmatize(word, get_wordnet_pos(tag)) for word, tag in pos_tags] lemmatized_sentence = ' '.join(lemmatized_words) return lemmatized_sentence text = "There is nothing either good or bad but thinking makes it so." result = lemmatize_passage(text) print("원본", text) print("토큰화:", word_tokenize(text)) print("어간 추출", result)
이 코드는 다음을 반환합니다.
원본: There is nothing either good or bad but thinking makes it so. 토큰화: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.'] 어간 추출: There be nothing either good or bad but think make it so .
WordNetLemmatizer는 Snowball 어간 추출기와 마찬가지로 동사 활용형을 기본 형태(예: thinking을 think로, makes를 make로)로 줄여줍니다. 그러나 Snowball 어간 추출 알고리즘과 달리 표제어 추출기는 nothing을 명사로 식별하고 -ing 어미를 적절히 그대로 두면서 is를 기본 형태인 be로 변경합니다. 이러한 방식으로 표제어 추출기는 불규칙 동사 형태를 보다 적절하게 조합합니다.
어간 추출 및 표제어 추출은 주로 영어 텍스트 데이터의 정규화를 지원합니다. 두 텍스트 정규화 기법은 프랑스어, 독일어, 스페인어 등 다른 여러 로마 문자 언어도 지원합니다. 러시아어 등 다른 문자 언어는 Snowball 어간 추출기를 통해 추가로 지원됩니다. 다른 언어, 특히 아랍어를 위한 어간 추출 및 표제어 추출 알고리즘 개발은 최근 지속적으로 연구되고 있는 분야입니다. 아랍어는 교착 형태, 직교 변형, 어휘 모호성 등의 특징으로 인해 상당히 까다로운 언어입니다.8 이러한 요소들은 적어도 영어 단어와 비교할 때 형태적 변형 중에서 기본 단어 형태를 식별하는 체계적인 방법을 어렵게 만듭니다.
이러한 일반적인 한계 외에도 어간 추출 및 표제어 추출에는 각각의 단점이 있습니다. 햄릿의 예에서 볼 수 있듯이, 어간 추출은 문자열을 제거하는 비교적 경험적이고 규칙 기반의 과정입니다. 과잉 어간 추출과 과소 어간 추출은 흔히 발생하는 두 가지 오류입니다. 과잉 어간 추출은 의미적으로 서로 다른 두 단어가 같은 어근으로 축소되는 경우(예: new에서 new로), 과소 어간 추출은 의미적으로 관련된 두 단어가 같은 어근으로 축소되지 않는 경우(예: knavish와 knave가 각각 knavish와 knave로)입니다.9 또한 어간 추출은 단어에서 접미사만 제거하므로 표제어 추출처럼 불규칙 동사 형태나 접두사를 고려할 수 없습니다. 물론 어간 추출은 비교적 간단하고 구현이 간단한 반면, 표제어 추출은 처리되는 데이터의 크기에 따라 계산 비용과 시간이 더 많이 소요될 수 있습니다.
IBM watsonx Orchestrate를 사용하여 확장 가능한 AI 어시스턴트 및 에이전트를 쉽게 설계하고, 반복적인 작업을 자동화하고, 복잡한 프로세스를 간소화합니다.
강력하고 유연한 라이브러리, 서비스 및 애플리케이션 포트폴리오로 인공 지능의 비즈니스 가치를 가속화합니다.
AI 추가를 통해 중요한 워크플로와 운영을 혁신함으로써 경험, 실시간 의사 결정 및 비즈니스 가치를 극대화합니다.
IBM Granite는 비즈니스에 맞게 맞춤화되고 AI 애플리케이션 확장에 최적화되었으며 개방적이고 성능이 뛰어나며 신뢰할 수 있는 AI 모델 제품군입니다. 언어, 코드, 시계열 및 가드레일 옵션을 살펴보세요.
자연어 처리를 통해 컴퓨터와 보다 자연스럽게 대화하는 방법을 알아보세요.
IBM은 2,000개 조직을 대상으로 AI 이니셔티브에 대한 설문조사를 실시하여 효과적인 전략과 효과적이지 못한 전략, 그리고 앞서나갈 수 있는 방법을 알아보았습니다.
IBM 개발자 웹사이트를 방문하여 블로그, 기사, 뉴스레터를 살펴보고 IBM 임베드 가능 AI에 대해 자세히 알아보세요.
1 Nitin Indurkhya 및 Fred Damerau, Handbook of Natural Language Processing, 2nd edition, CRC Press, 2010년.
2 Zhaofeng Wu, Linlu Qiu, Alexis Ross, Ekin Akyürek, Boyuan Chen, Bailin Wang, Najoung Kim, Jacob Andreas, Yoon Kim, "Reasoning or Reciting? Exploring the Capabilities and Limitations of Language Models Through Counterfactual Tasks," 2023년, https://arxiv.org/abs/2307.02477. Gati Aher, Rosa Arriaga, Adam Kalai, "Using Large Language Models to Simulate Multiple Humans and Replicate Human Subject Studies," Proceedings of the 40th International Conference on Machine Learning, PMLR, Vol. 202, 2023, pp. 337-371, https://proceedings.mlr.press/v202/aher23a.html. Emily Bender 및 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, 10.18653/v1/2020.acl-main.463.
3 Gary Miner, Dursun Delen, John Elder, Andrew Fast, Thomas Hill, Robert A. Nisbet, Practical Text Mining and Statistical Analysis for Non-Structured Text Data Applications, Academic Press, 2012년.
4 Christopher Manning 및 Hinrich Schütze, Foundations of Statistical Natural Language Processing, MIT Press, 1999년.
5 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. Martin Porter, “Snowball: A language for stemming algorithms,” 2001, https://snowballstem.org/texts/introduction.html.
6 Nitin Indurkhya 및 Fred Damerau, Handbook of Natural Language Processing, 2nd edition, CRC Press, 2010년. Christopher Manning 및 Hinrich Schütze, Foundations of Statistical Natural Language Processing, MIT Press, 1999년.
7 Janez Brank, Dunja Mladenic, Marko Grobelnik, “Feature Construction in Text Mining,” Encyclopedia of Machine Learning and Data Mining, Springer, 2017년.
8 Abed Alhakim Freihat, Gábor Bella, Mourad Abbas, Hamdy Mubarak, Fausto Giunchiglia, "ALP: An Arabic Linguistic Pipeline," Analysis and Application of Natural Language and Speech Processing, 2022년, pp.67-99, https://link.springer.com/chapter/10.1007/978-3-031-11035-1_4. Abdul Jabbar, Sajid Iqbal, Manzoor Ilahi Tamimy, Shafiq Hussain, Adnan Akhunzada, "Empirical evaluation and study of text stemming algorithms," Artificial Intelligence Review, Vol. 53, 2020년, pp. 5559–5588, https://link.springer.com/article/10.1007/s10462-020-09828-3. Abed Alhakim Freihat, Mourad Abbas, G'abor Bella, Fausto Giunchiglia, "Towards an Optimal Solution to Lemmatization in Arabic," Procedia Computer Science, Vol. 142, 2018년, pp. 132-140, https://www.sciencedirect.com/science/article/pii/S1877050918321707?via%3Dihub.
9 Chris Paice, “Stemming,” Encyclopedia of Database Systems, Springer, 2020년.
IBM web domains
ibm.com, ibm.org, ibm-zcouncil.com, insights-on-business.com, jazz.net, mobilebusinessinsights.com, promontory.com, proveit.com, ptech.org, s81c.com, securityintelligence.com, skillsbuild.org, softlayer.com, storagecommunity.org, think-exchange.com, thoughtsoncloud.com, alphaevents.webcasts.com, ibm-cloud.github.io, ibmbigdatahub.com, bluemix.net, mybluemix.net, ibm.net, ibmcloud.com, galasa.dev, blueworkslive.com, swiss-quantum.ch, blueworkslive.com, cloudant.com, ibm.ie, ibm.fr, ibm.com.br, ibm.co, ibm.ca, community.watsonanalytics.com, datapower.com, skills.yourlearning.ibm.com, bluewolf.com, carbondesignsystem.com