Это 10-я статья в моей серии статей по Python для НЛП. В моей предыдущей статье я объяснил , как библиотека Stanford CoreNLP может использоваться для выполнения различных задач НЛП.
В этой статье мы рассмотрим библиотеку Gensim , которая является еще одной чрезвычайно полезной библиотекой НЛП для Python. Gensim был в первую очередь разработан для тематического моделирования. Однако теперь он поддерживает множество других задач НЛП, таких как преобразование слов в векторы (word2vec), документ в векторы (doc2vec), поиск сходства текста и суммирование текста.
В этой и следующей статьях серии мы увидим, как библиотека Gensim используется для выполнения этих задач.
Установка Gensim
Если вы используете pip installer для установки библиотек Python, вы можете использовать следующую команду для загрузки библиотеки Gensim:
$ pip install gensim
Кроме того, если вы используете дистрибутив Python Anaconda, вы можете выполнить следующую команду для установки библиотеки Gensim:
$ conda install -c anaconda gensim
Давайте теперь посмотрим, как мы можем выполнять различные задачи НЛП с помощью библиотеки Gensim.
Создание словарей
Статистические алгоритмы работают с числами, однако естественные языки содержат данные в виде текста. Поэтому необходим механизм преобразования слов в числа. Точно так же после применения различных типов процессов к числам нам нужно преобразовать числа обратно в текст.
Одним из способов достижения такого типа функциональности является создание словаря, который присваивает числовой идентификатор каждому уникальному слову в документе. Затем словарь можно использовать для поиска числового эквивалента слова и наоборот.
Создание словарей с использованием Объектов В памяти
Очень легко создавать словари, которые сопоставляют слова с идентификаторами, используя библиотеку Python Gensim. Посмотрите на следующий сценарий:
import gensim from gensim import corpora from pprint import pprint text = ["""In computer science, artificial intelligence (AI), sometimes called machine intelligence, is intelligence demonstrated by machines, in contrast to the natural intelligence displayed by humans and animals. Computer science defines AI research as the study of intelligent agents: any device that perceives its environment and takes actions that maximize its chance of successfully achieving its goals."""] tokens = [[token for token in sentence.split()] for sentence in text] gensim_dictionary = corpora.Dictionary(tokens) print("The dictionary has: " +str(len(gensim_dictionary)) + " tokens") for k, v in gensim_dictionary.token2id.items(): print(f'{k:{15}} {v:{10}}')
В приведенном выше сценарии мы сначала импортируем библиотеку gensim
вместе с модулем corpora
из библиотеки. Далее у нас есть некоторый текст (который является первой частью первого абзаца статьи Википедии об искусственном интеллекте), хранящийся в переменной text
.
Чтобы создать словарь, нам нужен список слов из нашего текста (также известный как токены). В следующей строке мы разделяем наш документ на предложения, а затем предложения на слова.
tokens = [[token for token in sentence.split()] for sentence in text]
Теперь мы готовы создать наш словарь. Для этого мы можем использовать объект Dictionary
модуля corpora
и передать ему список токенов.
Наконец, для печати содержимого вновь созданного словаря мы можем использовать объект token2id
класса Dictionary
. Вывод приведенного выше скрипта выглядит следующим образом:
The dictionary has: 46 tokens (AI), 0 AI 1 Computer 2 In 3 achieving 4 actions 5 agents: 6 and 7 animals. 8 any 9 artificial 10 as 11 by 12 called 13 chance 14 computer 15 contrast 16 defines 17 demonstrated 18 device 19 displayed 20 environment 21 goals. 22 humans 23 in 24 intelligence 25 intelligence, 26 intelligent 27 is 28 its 29 machine 30 machines, 31 maximize 32 natural 33 of 34 perceives 35 research 36 science 37 science, 38 sometimes 39 study 40 successfully 41 takes 42 that 43 the 44 to 45
Выходные данные показывают каждое уникальное слово в нашем тексте вместе с числовым идентификатором, присвоенным этому слову. Слово или маркер – это ключ словаря, а идентификатор-это значение. Вы также можете увидеть идентификатор, присвоенный отдельному слову, используя следующий скрипт:
print(gensim_dictionary.token2id["study"])
В приведенном выше сценарии мы передаем слово “исследование” как ключ к нашему словарю. В выводе вы должны увидеть соответствующее значение, то есть идентификатор слова “study”, который равен 40.
Аналогично, вы можете использовать следующий сценарий, чтобы найти ключ или слово для определенного идентификатора.
print(list(gensim_dictionary.token2id.keys())[list(gensim_dictionary.token2id.values()).index(40)])
Для печати токенов и соответствующих им идентификаторов мы использовали цикл for. Однако вы можете непосредственно распечатать токены и их идентификаторы, распечатав словарь, как показано здесь:
print(gensim_dictionary.token2id)
Результат выглядит следующим образом:
{'(AI),': 0, 'AI': 1, 'Computer': 2, 'In': 3, 'achieving': 4, 'actions': 5, 'agents:': 6, 'and': 7, 'animals.': 8, 'any': 9, 'artificial': 10, 'as': 11, 'by': 12, 'called': 13, 'chance': 14, 'computer': 15, 'contrast': 16, 'defines': 17, 'demonstrated': 18, 'device': 19, 'displayed': 20, 'environment': 21, 'goals.': 22, 'humans': 23, 'in': 24, 'intelligence': 25, 'intelligence,': 26, 'intelligent': 27, 'is': 28, 'its': 29, 'machine': 30, 'machines,': 31, 'maximize': 32, 'natural': 33, 'of': 34, 'perceives': 35, 'research': 36, 'science': 37, 'science,': 38, 'sometimes': 39, 'study': 40, 'successfully': 41, 'takes': 42, 'that': 43, 'the': 44, 'to': 45}
Вывод может быть не таким четким, как вывод, напечатанный с помощью цикла, хотя он все еще служит своей цели.
Давайте теперь посмотрим, как мы можем добавить больше токенов в существующий словарь, используя новый документ. Посмотрите на следующий сценарий:
text = ["""Colloquially, the term "artificial intelligence" is used to describe machines that mimic "cognitive" functions that humans associate with other human minds, such as "learning" and "problem solving"""] tokens = [[token for token in sentence.split()] for sentence in text] gensim_dictionary.add_documents(tokens) print("The dictionary has: " + str(len(gensim_dictionary)) + " tokens") print(gensim_dictionary.token2id)
В приведенном выше сценарии мы имеем новый документ, содержащий вторую часть первого абзаца статьи Википедии об искусственном интеллекте. Мы разделяем текст на токены, а затем просто вызываем метод add_documents
, чтобы добавить токены в наш существующий словарь. Наконец, мы печатаем обновленный словарь на консоли.
Вывод кода выглядит следующим образом:
The dictionary has: 65 tokens {'(AI),': 0, 'AI': 1, 'Computer': 2, 'In': 3, 'achieving': 4, 'actions': 5, 'agents:': 6, 'and': 7, 'animals.': 8, 'any': 9, 'artificial': 10, 'as': 11, 'by': 12, 'called': 13, 'chance': 14, 'computer': 15, 'contrast': 16, 'defines': 17, 'demonstrated': 18, 'device': 19, 'displayed': 20, 'environment': 21, 'goals.': 22, 'humans': 23, 'in': 24, 'intelligence': 25, 'intelligence,': 26, 'intelligent': 27, 'is': 28, 'its': 29, 'machine': 30, 'machines,': 31, 'maximize': 32, 'natural': 33, 'of': 34, 'perceives': 35, 'research': 36, 'science': 37, 'science,': 38, 'sometimes': 39, 'study': 40, 'successfully': 41, 'takes': 42, 'that': 43, 'the': 44, 'to': 45, '"artificial': 46, '"cognitive"': 47, '"learning"': 48, '"problem': 49, 'Colloquially,': 50, 'associate': 51, 'describe': 52, 'functions': 53, 'human': 54, 'intelligence"': 55, 'machines': 56, 'mimic': 57, 'minds,': 58, 'other': 59, 'solving': 60, 'such': 61, 'term': 62, 'used': 63, 'with': 64}
Вы можете видеть, что сейчас у нас в словаре 65 лексем, в то время как раньше у нас было 45 лексем.
Создание словарей с помощью текстовых файлов
В предыдущем разделе у нас был текст в памяти. Что делать, если мы хотим создать словарь, читая текстовый файл с жесткого диска? Для этого мы можем использовать метод simple_process
из библиотеки gensim.utils
. Преимущество использования этого метода заключается в том, что он считывает текстовый файл строка за строкой и возвращает токены в строке. Вам не нужно загружать полный текстовый файл в память, чтобы создать словарь.
Перед выполнением следующего примера создайте файл “file1.txt” и добавьте в файл следующий текст (это первая половина первого абзаца статьи Википедии о глобальном потеплении).
Global warming is a long-term rise in the average temperature of the Earth's climate system, an aspect of climate change shown by temperature measurements and by multiple effects of the warming. Though earlier geological periods also experienced episodes of warming, the term commonly refers to the observed and continuing increase in average air and ocean temperatures since 1900 caused mainly by emissions of greenhouse gasses in the modern industrial economy.
Теперь давайте создадим словарь, который будет содержать токены из текстового файла “file1.txt”:
from gensim.utils import simple_preprocess from smart_open import smart_open import os gensim_dictionary = corpora.Dictionary(simple_preprocess(sentence, deacc=True) for sentence in open(r'E:\\text files\\file1.txt', encoding='utf-8')) print(gensim_dictionary.token2id)
В приведенном выше скрипте мы читаем текстовый файл “file1.txt” построчно с использованием метода simple_preprocess
. Метод возвращает токены в каждой строке документа. Затем токены используются для создания словаря. В выходных данных вы должны увидеть токены и их соответствующие идентификаторы, как показано ниже:
{'average': 0, 'climate': 1, 'earth': 2, 'global': 3, 'in': 4, 'is': 5, 'long': 6, 'of': 7, 'rise': 8, 'system': 9, 'temperature': 10, 'term': 11, 'the': 12, 'warming': 13, 'an': 14, 'and': 15, 'aspect': 16, 'by': 17, 'change': 18, 'effects': 19, 'measurements': 20, 'multiple': 21, 'shown': 22, 'also': 23, 'earlier': 24, 'episodes': 25, 'experienced': 26, 'geological': 27, 'periods': 28, 'though': 29, 'air': 30, 'commonly': 31, 'continuing': 32, 'increase': 33, 'observed': 34, 'ocean': 35, 'refers': 36, 'temperatures': 37, 'to': 38, 'caused': 39, 'economy': 40, 'emissions': 41, 'gasses': 42, 'greenhouse': 43, 'industrial': 44, 'mainly': 45, 'modern': 46, 'since': 47}
Точно так же мы можем создать словарь, прочитав несколько текстовых файлов. Создайте еще один файл “file2.txt” и добавьте в файл следующий текст (вторая часть первого абзаца статьи Википедии о глобальном потеплении):
In the modern context the terms global warming and climate change are commonly used interchangeably, but climate change includes both global warming and its effects, such as changes to precipitation and impacts that differ by region.[7][8] Many of the observed warming changes since the 1950s are unprecedented in the instrumental temperature record, and in historical and paleoclimate proxy records of climate change over thousands to millions of years.
Сохранить “file2.txt” в том же каталоге, что и “file1.txt”.
Следующий сценарий читает оба файла, а затем создает словарь на основе текста в этих двух файлах:
from gensim.utils import simple_preprocess from smart_open import smart_open import os class ReturnTokens(object): def __init__(self, dir_path): self.dir_path = dir_path def __iter__(self): for file_name in os.listdir(self.dir_path): for sentence in open(os.path.join(self.dir_path, file_name), encoding='utf-8'): yield simple_preprocess(sentence) path_to_text_directory = r"E:\text files" gensim_dictionary = corpora.Dictionary(ReturnTokens(path_to_text_directory)) print(gensim_dictionary.token2id)
В приведенном выше скрипте у нас есть метод Return Tokens
, который принимает путь к каталогу, содержащему “file1.txt” и “file2.txt-как единственный параметр. Внутри метода мы перебираем все файлы в каталоге, а затем читаем каждый файл строка за строкой. Метод simple_preprocess
создает токены для каждой строки. Токены для каждой строки возвращаются вызывающей функции с помощью ключевого слова “yield” .
В выходных данных вы должны увидеть следующие токены вместе со своими детьми:
{'average': 0, 'climate': 1, 'earth': 2, 'global': 3, 'in': 4, 'is': 5, 'long': 6, 'of': 7, 'rise': 8, 'system': 9, 'temperature': 10, 'term': 11, 'the': 12, 'warming': 13, 'an': 14, 'and': 15, 'aspect': 16, 'by': 17, 'change': 18, 'effects': 19, 'measurements': 20, 'multiple': 21, 'shown': 22, 'also': 23, 'earlier': 24, 'episodes': 25, 'experienced': 26, 'geological': 27, 'periods': 28, 'though': 29, 'air': 30, 'commonly': 31, 'continuing': 32, 'increase': 33, 'observed': 34, 'ocean': 35, 'refers': 36, 'temperatures': 37, 'to': 38, 'caused': 39, 'economy': 40, 'emissions': 41, 'gasses': 42, 'greenhouse': 43, 'industrial': 44, 'mainly': 45, 'modern': 46, 'since': 47, 'are': 48, 'context': 49, 'interchangeably': 50, 'terms': 51, 'used': 52, 'as': 53, 'both': 54, 'but': 55, 'changes': 56, 'includes': 57, 'its': 58, 'precipitation': 59, 'such': 60, 'differ': 61, 'impacts': 62, 'instrumental': 63, 'many': 64, 'record': 65, 'region': 66, 'that': 67, 'unprecedented': 68, 'historical': 69, 'millions': 70, 'over': 71, 'paleoclimate': 72, 'proxy': 73, 'records': 74, 'thousands': 75, 'years': 76}
Создание корпуса Bag of Words
Словари содержат сопоставления между словами и соответствующими им числовыми значениями. Корпуса Bag of words в библиотеке Gensim основаны на словарях и содержат идентификатор каждого слова вместе с частотой его появления.
Создание корпуса Bag of Words из объектов в памяти
Посмотрите на следующий сценарий:
import gensim from gensim import corpora from pprint import pprint text = ["""In computer science, artificial intelligence (AI), sometimes called machine intelligence, is intelligence demonstrated by machines, in contrast to the natural intelligence displayed by humans and animals. Computer science defines AI research as the study of intelligent agents: any device that perceives its environment and takes actions that maximize its chance of successfully achieving its goals."""] tokens = [[token for token in sentence.split()] for sentence in text] gensim_dictionary = corpora.Dictionary() gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in tokens] print(gensim_corpus)
В приведенном выше сценарии у нас есть текст, который мы разделяем на токены. Далее мы инициализируем объект Dictionary
из модуля corpora
. Объект содержит метод doc2bow
, который в основном выполняет две задачи:
- Он перебирает все слова в тексте, если слово уже существует в корпусе, он увеличивает счетчик частот для этого слова
- В противном случае он вставляет слово в корпус и устанавливает его частоту равную 1
Вывод вышеприведенного скрипта выглядит следующим образом:
[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 2), (8, 1), (9, 1), (10, 1), (11, 1), (12, 2), (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1), (22, 1), (23, 1), (24, 1), (25, 3), (26, 1), (27, 1), (28, 1), (29, 3), (30, 1), (31, 1), (32, 1), (33, 1), (34, 2), (35, 1), (36, 1), (37, 1), (38, 1), (39, 1), (40, 1), (41, 1), (42, 1), (43, 2), (44, 2), (45, 1)]]
Вывод может не иметь для вас смысла. Позвольте мне объяснить. Первый кортеж (0,1) в основном означает, что слово с идентификатором 0 встречалось в тексте 1 раз. Аналогично, (25, 3) означает, что слово с идентификатором 25 встречается в документе три раза.
Давайте теперь напечатаем слово и количество частот, чтобы прояснить ситуацию. Добавьте следующие строки кода в конце предыдущего скрипта:
word_frequencies = [[(gensim_dictionary[id], frequence) for id, frequence in couple] for couple in gensim_corpus] print(word_frequencies)
Вывод выглядит следующим образом:
[[('(AI),', 1), ('AI', 1), ('Computer', 1), ('In', 1), ('achieving', 1), ('actions', 1), ('agents:', 1), ('and', 2), ('animals.', 1), ('any', 1), ('artificial', 1), ('as', 1), ('by', 2), ('called', 1), ('chance', 1), ('computer', 1), ('contrast', 1), ('defines', 1), ('demonstrated', 1), ('device', 1), ('displayed', 1), ('environment', 1), ('goals.', 1), ('humans', 1), ('in', 1), ('intelligence', 3), ('intelligence,', 1), ('intelligent', 1), ('is', 1), ('its', 3), ('machine', 1), ('machines,', 1), ('maximize', 1), ('natural', 1), ('of', 2), ('perceives', 1), ('research', 1), ('science', 1), ('science,', 1), ('sometimes', 1), ('study', 1), ('successfully', 1), ('takes', 1), ('that', 2), ('the', 2), ('to', 1)]]
Из выходных данных вы можете видеть, что слово “интеллект” появляется три раза. Точно так же слово “это” появляется дважды.
Создание корпуса Bag of Words из текстовых файлов
Как и словари, мы также можем создать мешок слов корпус, прочитав текстовый файл. Посмотрите на следующий код:
from gensim.utils import simple_preprocess from smart_open import smart_open import os tokens = [simple_preprocess(sentence, deacc=True) for sentence in open(r'E:\text files\file1.txt', encoding='utf-8')] gensim_dictionary = corpora.Dictionary() gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in tokens] word_frequencies = [[(gensim_dictionary[id], frequence) for id, frequence in couple] for couple in gensim_corpus] print(word_frequencies)
В приведенном выше сценарии мы создали корпус bag of words, используя “file1.txt”. В выходных данных вы должны увидеть слова в первом абзаце статьи о глобальном потеплении в Википедии.
[[('average', 1), ('climate', 1), ('earth', 1), ('global', 1), ('in', 1), ('is', 1), ('long', 1), ('of', 1), ('rise', 1), ('system', 1), ('temperature', 1), ('term', 1), ('the', 2), ('warming', 1)], [('climate', 1), ('of', 2), ('temperature', 1), ('the', 1), ('warming', 1), ('an', 1), ('and', 1), ('aspect', 1), ('by', 2), ('change', 1), ('effects', 1), ('measurements', 1), ('multiple', 1), ('shown', 1)], [('of', 1), ('warming', 1), ('also', 1), ('earlier', 1), ('episodes', 1), ('experienced', 1), ('geological', 1), ('periods', 1), ('though', 1)], [('average', 1), ('in', 1), ('term', 1), ('the', 2), ('and', 2), ('air', 1), ('commonly', 1), ('continuing', 1), ('increase', 1), ('observed', 1), ('ocean', 1), ('refers', 1), ('temperatures', 1), ('to', 1)], [('in', 1), ('of', 1), ('the', 1), ('by', 1), ('caused', 1), ('economy', 1), ('emissions', 1), ('gasses', 1), ('greenhouse', 1), ('industrial', 1), ('mainly', 1), ('modern', 1), ('since', 1)]]
Вывод показывает, что такие слова, как “of”, “the”, “by” и “and” встречаются дважды.
Аналогично, вы можете создать пакет слов корпуса, используя несколько текстовых файлов, как показано ниже:
from gensim.utils import simple_preprocess from smart_open import smart_open import os class ReturnTokens(object): def __init__(self, dir_path): self.dir_path = dir_path def __iter__(self): for file_name in os.listdir(self.dir_path): for sentence in open(os.path.join(self.dir_path, file_name), encoding='utf-8'): yield simple_preprocess(sentence) path_to_text_directory = r"E:\text files" gensim_dictionary = corpora.Dictionary() gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in ReturnTokens(path_to_text_directory)] word_frequencies = [[(gensim_dictionary[id], frequence) for id, frequence in couple] for couple in gensim_corpus] print(word_frequencies)
Вывод приведенного выше скрипта выглядит следующим образом:
[[('average', 1), ('climate', 1), ('earth', 1), ('global', 1), ('in', 1), ('is', 1), ('long', 1), ('of', 1), ('rise', 1), ('system', 1), ('temperature', 1), ('term', 1), ('the', 2), ('warming', 1)], [('climate', 1), ('of', 2), ('temperature', 1), ('the', 1), ('warming', 1), ('an', 1), ('and', 1), ('aspect', 1), ('by', 2), ('change', 1), ('effects', 1), ('measurements', 1), ('multiple', 1), ('shown', 1)], [('of', 1), ('warming', 1), ('also', 1), ('earlier', 1), ('episodes', 1), ('experienced', 1), ('geological', 1), ('periods', 1), ('though', 1)], [('average', 1), ('in', 1), ('term', 1), ('the', 2), ('and', 2), ('air', 1), ('commonly', 1), ('continuing', 1), ('increase', 1), ('observed', 1), ('ocean', 1), ('refers', 1), ('temperatures', 1), ('to', 1)], [('in', 1), ('of', 1), ('the', 1), ('by', 1), ('caused', 1), ('economy', 1), ('emissions', 1), ('gasses', 1), ('greenhouse', 1), ('industrial', 1), ('mainly', 1), ('modern', 1), ('since', 1)], [('climate', 1), ('global', 1), ('in', 1), ('the', 2), ('warming', 1), ('and', 1), ('change', 1), ('commonly', 1), ('modern', 1), ('are', 1), ('context', 1), ('interchangeably', 1), ('terms', 1), ('used', 1)], [('climate', 1), ('global', 1), ('warming', 1), ('and', 2), ('change', 1), ('effects', 1), ('to', 1), ('as', 1), ('both', 1), ('but', 1), ('changes', 1), ('includes', 1), ('its', 1), ('precipitation', 1), ('such', 1)], [('in', 1), ('of', 1), ('temperature', 1), ('the', 3), ('warming', 1), ('by', 1), ('observed', 1), ('since', 1), ('are', 1), ('changes', 1), ('differ', 1), ('impacts', 1), ('instrumental', 1), ('many', 1), ('record', 1), ('region', 1), ('that', 1), ('unprecedented', 1)], [('climate', 1), ('in', 1), ('of', 2), ('and', 2), ('change', 1), ('to', 1), ('historical', 1), ('millions', 1), ('over', 1), ('paleoclimate', 1), ('proxy', 1), ('records', 1), ('thousands', 1), ('years', 1)]]
Создание корпуса TF-IDF
Подход “мешок слов” отлично подходит для преобразования текста в числа. Однако у него есть один недостаток. Он присваивает оценку слову на основе его появления в конкретном документе. Он не принимает во внимание тот факт, что это слово может также иметь высокую частоту встречаемости и в других документах. TF-IDF решает эту проблему.
Термин частота вычисляется как:
Term frequency = (Frequency of the word in a document)/(Total words in the document)
А обратная частота документа вычисляется как:
IDF(word) = Log((Total number of documents)/(Number of documents containing the word))
Используя библиотеку Gensim, мы можем легко создать корпус TF-IDF:
import gensim from gensim import corpora from pprint import pprint text = ["I like to play Football", "Football is the best game", "Which game do you like to play ?"] tokens = [[token for token in sentence.split()] for sentence in text] gensim_dictionary = corpora.Dictionary() gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in tokens] from gensim import models import numpy as np tfidf = models.TfidfModel(gensim_corpus, smartirs='ntc') for sent in tfidf[gensim_corpus]: print([[gensim_dictionary[id], np.around(frequency, decimals=2)] for id, frequency in sent])
Чтобы найти значение TF-IDF, мы можем использовать класс Tf idf Model
из модуля models
библиотеки Gensim. Нам просто нужно передать пакет word corpus в качестве параметра конструктору класса Tf idf Model
. В выходных данных вы увидите все слова в трех предложениях вместе с их значениями TF-IDF:
[['Football', 0.3], ['I', 0.8], ['like', 0.3], ['play', 0.3], ['to', 0.3]] [['Football', 0.2], ['best', 0.55], ['game', 0.2], ['is', 0.55], ['the', 0.55]] [['like', 0.17], ['play', 0.17], ['to', 0.17], ['game', 0.17], ['?', 0.47], ['Which', 0.47], ['do', 0.47], ['you', 0.47]]
Загрузка Встроенных моделей и наборов данных Gensim
Gensim поставляется с различными встроенными наборами данных и моделями встраивания слов, которые могут быть использованы непосредственно.
Чтобы загрузить встроенную модель или набор данных, мы можем использовать класс downloader
из библиотеки gensim
. Затем мы можем вызвать метод load в классе downloader
, чтобы загрузить нужный пакет. Посмотрите на следующий код:
import gensim.downloader as api w2v_embedding = api.load("glove-wiki-gigaword-100")
С помощью приведенных выше команд мы загружаем модель встраивания слов “glove-wiki-gigaword-100”, которая в основном основана на тексте Википедии и имеет 100 измерений. Давайте попробуем найти слова, похожие на “toyota”, используя нашу модель встраивания слов. Для этого используйте следующий код:
w2v_embedding.most_similar('toyota')
В выходных данных вы должны увидеть следующие результаты:
[('honda', 0.8739858865737915), ('nissan', 0.8108116984367371), ('automaker', 0.7918163537979126), ('mazda', 0.7687169313430786), ('bmw', 0.7616022825241089), ('ford', 0.7547588348388672), ('motors', 0.7539199590682983), ('volkswagen', 0.7176680564880371), ('prius', 0.7156582474708557), ('chrysler', 0.7085398435592651)]
Вы можете видеть, что все результаты очень актуальны для слова “тойота”. Число в дроби соответствует индексу подобия. Более высокий индекс сходства означает, что слово является более релевантным.
Вывод
Библиотека Gensim – одна из самых популярных библиотек Python для НЛП. В этой статье мы кратко рассмотрели, как библиотека Gensim может быть использована для выполнения таких задач, как создание словаря и корпуса. Мы также видели, как загружать встроенные модули Gensim. В нашей следующей статье мы увидим, как выполнить тематическое моделирование с помощью библиотеки Gensim.