Рубрики
Без рубрики

Python для НЛП: Работа с библиотекой Gensim (Часть 1)

Автор оригинала: Usman Malik.

Это 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.