휴대폰에 입력할 때 다음으로 사용할 단어를 예측하는 것을 본 적이 있을 것입니다. 타이핑 속도를 높이고 시간을 절약해 주는 기능입니다.
더 편리합니다. 문자 메시지를 보내든, 인터넷을 검색하든, 이메일을 쓰든 예측 텍스트는 정말 도움이 될 수 있습니다. 하지만 모바일이 다음에 어떤 단어를 제안할지 어떻게 아는지 궁금한 적이 있습니까?
이 가이드에서는 Python을 사용하여 단어 예측을 만드는 방법을 보여 드리겠습니다.
쉽게 따라하려면 NLP에 대한 기본적인 이해가 도움이 됩니다. 이 내용이 처음이더라도 걱정하지 마세요. 간단하게 설명하는 “NLP Simplified” 기사에서 기본 사항을 빠르게 익힐 수 있습니다.
목차
다음 단어 예측의 응용
이 흥미로운 NLP 기술과 이것이 어떻게 유용한지 함께 알아보고 각 단계를 명확하게 살펴보겠습니다.
데이터 준비
우선, 프로젝트에 중요한 필수 라이브러리를 가져와야 합니다. 그런 다음 학습에 사용할 샘플 텍스트를 정의합니다. 이 텍스트를 원하는 텍스트 데이터로 바꿀 수 있습니다.
Kaggle이나 유사한 플랫폼에서 쉽게 찾을 수 있는 텍스트 데이터가 포함된 데이터 세트를 사용할 수도 있습니다.
# Import Necessary Libraries import nltk from nltk import ngrams from collections import defaultdict import random
다음 단어를 예측하는 데 사용되는 샘플 텍스트 데이터입니다.
# Sample Text Data text = """ Once upon a luminous, starry night in the quaint, enigmatic town of Serendipity, a curious young explorer named Amelia embarked on an extraordinary adventure. With her trusty magnifying glass in hand and an indomitable spirit, she embarked on a quest to discover the elusive Elysian treasure hidden deep within the labyrinthine forest. As she ventured through the verdant woods, Amelia encountered an eccentric, talking squirrel named Percival, who spoke in riddles and guided her toward the treasure's whereabouts. The forest was resplendent with bioluminescent flora, illuminating her path with a kaleidoscope of colors. Amelia soon reached a precipice overlooking an awe-inspiring, cerulean waterfall, its cascading waters echoing a melodious serenade. Beside the waterfall stood a colossal, moss-covered stone with cryptic inscriptions. With Percival's guidance, she deciphered the ancient runes and uncovered the entrance to the treasure trove. Inside, she discovered an opulent chest adorned with intricate, golden filigree. Upon opening it, a symphony of shimmering jewels, radiant gemstones, and glistening artifacts greeted her with an ethereal glow. The Elysian treasure was hers, a testament to her dauntless courage and insatiable curiosity. Amelia's return to Serendipity was celebrated with jubilant revelry, and her remarkable journey became a legend, inspiring others to embark on their own adventures in the wondrous realm of imagination and discovery. """
요구 사항에 따라 이 텍스트를 바꿀 수 있습니다.
토큰화
우리는 텍스트를 전처리하고 토큰화할 것입니다. 토큰화는 텍스트를 개별 단어나 토큰으로 나누는 프로세스입니다. 우리는 Python에서 nltk 라이브러리를 사용하여 텍스트를 토큰화합니다.
모델이 단어에 초점을 맞추고 대소문자나 구두점을 무시하도록 하기 위해 전처리를 수행합니다. 이 단계에는 모든 단어를 소문자로 변환하고 구두점을 제거하는 작업이 포함됩니다.
import nltk # Tokenize the text into words words = nltk.word_tokenize(text) # Preprocess the words (convert to lowercase, remove punctuation) words = [word.lower() for word in words if word.isalnum()] words
전처리 및 토큰화 후에 모든 단어는 구두점 없이 소문자로 표시됩니다.
토큰화된 단어
N-그램 구축
이 단계에서는 자연어 처리(NLP)에서 N 단어의 시퀀스인 N-그램을 생성하겠습니다.
우리 코드에서는 N이 2인 바이그램을 생성할 것입니다. 즉, 각 N-그램은 단어 쌍으로 구성됩니다.
이는 이전 N-1 단어가 제공하는 문맥을 기반으로 단어 시퀀스를 분석하고 다음 단어를 예측할 수 있기 때문에 다음 단어에 대한 예측 모델을 구축하는 기본 단계입니다.
# Define the order of the N-gram model (N=2 for bigrams) N = 2 # Create N-grams from the tokenized words ngrams_list = list(ngrams(words, N)) # Create a defaultdict to store N-grams and their frequency ngram_freq = defaultdict(int) for ngram in ngrams_list: ngram_freq[ngram] += 1
이러한 N-그램은 다음 단어 예측 모델을 훈련하고 구현하기 위한 구성 요소 역할을 합니다.
기능 정의
이 단계에서는 제공된 접두사(단어 시퀀스)를 기반으로 문장의 다음 단어를 추측하는 ‘predict_next_word’라는 함수를 만듭니다.
이 함수는 접두사가 제공하는 컨텍스트를 가져와서 이를 사용하여 가장 가능성이 높은 다음 단어에 대해 예측하므로 다음 단어 예측 모델에서 매우 중요합니다.
이 과정에서 어떤 일이 일어나는지 간단한 단어로 설명하겠습니다.
- 이 함수는 제공된 접두사(누락된 단어 앞의 단어)로 시작하는 텍스트 데이터의 모든 단어 쌍(바이그램)을 살펴봅니다.
- 각 단어가 해당 쌍에 얼마나 자주 나타나는지 계산하고 빈도에 따라 가장 흔한 단어부터 가장 흔한 단어까지 정렬합니다.
- 그런 다음 함수는 주어진 접두사 뒤의 다음 단어로 가장 자주 나타나는 단어를 제안합니다.
# Define Function def predict_next_word(prefix): # Filter N-grams that start with the given prefix matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix] if not matching_ngrams: return "No prediction available." # Sort N-grams by frequency in descending order sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True) # Select the N-gram with the highest frequency as the prediction prediction = sorted_ngrams[0][0][-1] return prediction
이는 주어진 텍스트 시퀀스에서 다음 단어에 대해 문맥상 관련 있는 제안을 생성할 수 있게 해주기 때문에 다음 단어 예측 모델의 중요한 부분입니다.
테스트
이 코드를 사용하면 자체 입력으로 모델을 테스트할 수 있습니다. 단어 몇 개를 입력하고 Enter 키를 누르면 모델이 다음 단어를 예측합니다. 잘못된 내용을 입력하면 다시 시도하라는 메시지가 표시됩니다.
# You can use this code snippet to interactively test the model with user input user_input = input("Enter a prefix for next-word prediction: ").lower().split() if len(user_input) != N - 1: print("Please enter a valid prefix.") else: prefix = tuple(user_input) prediction = predict_next_word(prefix) print(f"Next word prediction: {prediction}")
우리 코드는 이런 종류의 인터페이스를 생성합니다. 접두어를 쓰고 Enter 키를 누를 수 있는 곳입니다.
접두어 입력
Enter를 입력하면 다음 단어가 표시됩니다.
예측된 단어
다음 단어 예측 모델이 실제로 어떻게 사용될 수 있는지 보여주는 방법입니다.
과제:
정확도를 높이는 방법
최종 단어
자연어 처리의 세계에서 다음 단어를 예측하는 것은 귀중한 기술입니다. 이 5가지 간단한 Python 단계를 통해 더 빠른 커뮤니케이션과 더 스마트한 기술을 위한 강력한 도구를 얻을 수 있습니다.
언어 경험을 향상시키기 위해 이 지식을 계속 탐색하고 사용하십시오. 여행은 이제 막 시작되었습니다!
Python을 사용하여 URL에서 파일을 다운로드하는 가장 좋은 방법을 탐색할 수도 있습니다.