Какова цель создания обратного словаря из обычного словаря в Python - PullRequest
0 голосов
/ 28 мая 2018

Я смотрю на официальный пример Tensorflow для Word2Vec.Они создали словарь для всех слов, а затем создали обратный словарь, а обратный словарь в основном использовался в остальной части кода.

Обсуждаемая строка:

reverse_dictionary = dict(zip(dictionary.values(), dictionary.keys())) 

Полный блок кода

vocabulary_size = 50000

def build_dataset(words):
  count = [['UNK', -1]]
  count.extend(collections.Counter(words).most_common(vocabulary_size - 1))
  dictionary = dict()
  for word, _ in count:
    dictionary[word] = len(dictionary)
  data = list()
  unk_count = 0
  for word in words:
    if word in dictionary:
      index = dictionary[word]
    else:
      index = 0  # dictionary['UNK']
      unk_count = unk_count + 1
    data.append(index)
  count[0][1] = unk_count
  reverse_dictionary = dict(zip(dictionary.values(), dictionary.keys())) 
  return data, count, dictionary, reverse_dictionary

data, count, dictionary, reverse_dictionary = build_dataset(words)

Полная официальная реализация.

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/5_word2vec.ipynb

Это официальная реализация от Tensorflow, поэтому должна быть веская причина, почему они сделали это

1 Ответ

0 голосов
/ 28 мая 2018

Чтобы построить список data, для функции build_dataset() требуется сопоставление слова с индексом.

Для использования в последующих функциях требуется сопоставление индекса с словом.

InВ Python, как и в большинстве языков, отсутствует структура для эффективного двустороннего отображения с эффективным использованием памяти .Следовательно, ваша функция создает и сохраняет два словаря.

Обратите внимание, что логику можно написать проще с помощью enumerate и словаря:

from operator import itemgetter

reverse_dictionary = dict(enumerate(map(itemgetter(0), count)))
dictionary = {v: k for k, v in reverse_dictionary.items()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...