Алгоритм Леска в НЛП — Python
В обработке естественного языка (NLP) устранение неоднозначности смысла слова (WSD) представляет собой задачу определения того, какой «смысл» (значение) слова активируется при его использовании в конкретном контексте, процесс, который, по-видимому, в большинстве случаев бессознателен для людей.
Алгоритм Леска - это способ устранения неоднозначности смысла слова. Алгоритм Леска — это основанный на словаре подход, который считается основополагающим. Он основан на идее, что слова, используемые в тексте, связаны друг с другом, и что это отношение можно увидеть в определениях слов и их значениях. Пара словарных значений, имеющих наибольшее перекрытие слова в своих словарных значениях, используется для устранения неоднозначности двух (или более) терминов. Майкл Э. Леск представил алгоритм Леска в 1986 году как классический подход к устранению неоднозначности смысла слов в обработке естественного языка. Алгоритм Леска предполагает, что слова в данном «районе» (части текста) будут иметь схожую тему. Словарное определение неопределенного слова сравнивается с соседними терминами в упрощенной версии алгоритма Леска.
Реализация базового алгоритма Lesk включает следующие этапы:
- Подсчитайте количество слов по соседству со словом и в словарном определении этого значения для каждого смысла слова, устраняемого неоднозначностью.
- Следует выбрать смысл с наибольшим количеством элементов в этом подсчете.
Теперь давайте рассмотрим несколько примеров, используя реализацию алгоритма lesk в nltk.
Python3
% % capture import nltk from nltk.wsd import lesk from nltk.tokenize import word_tokenize nltk.download( "all" ) |
Теперь, когда мы импортировали необходимые библиотеки и методы, давайте воспользуемся ими в некоторой примерной последовательности.
Python3
def get_semantic(seq, key_word): # Tokenization of the sequence temp = word_tokenize(seq) # Retrieving the definition # of the tokens temp = lesk(temp, key_word) return temp.definition() |
Это всего лишь вспомогательная функция, которую мы реализовали, чтобы код оставался аккуратным и чистым.
Пример 1: Последовательность с одним и тем же словом, но с разными значениями.
Python3
keyword = "book" seq1 = "I love reading books on coding." seq2 = "The table was already booked by someone else." print (get_semantic(seq1, keyword)) print (get_semantic(seq2, keyword)) |
Выход:
a number of sheets (ticket or stamps etc.) bound together on one edge
arrange for and reserve (something for someone else) in advance
Здесь мы получили правильный вывод, который является определением указанного ключевого слова в двух заданных последовательностях.
Python3
keyword = "jam" seq1 = "My mother prepares very yummy jam." seq2 = "Signal jammers are the reason for no signal." print (get_semantic(seq1, keyword)) print (get_semantic(seq2, keyword)) |
Выход:
press tightly together or cram
deliberate radiation or reflection of electromagnetic energy for the purpose of disrupting enemy use of electronic devices or systems