Алгоритм Леска в НЛП — Python

Опубликовано: 13 Декабря, 2022

В обработке естественного языка (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