chainerなどで言語処理を行うときには単語をidに変換して使うため、単語→idの関係を格納する辞書をvocabularyとして用いる。そのため、単語や文章を生成したいという場合にはid→単語に直す作業が必要になる。
逆引きの辞書をつくる手もあるが、idはint型なのでkeyにするためにstrに変換するのはちょっとな・・・と思うので別の方法をとる。idは単純に単語の番号なのでdictのkeyをid(value)から呼び出すにはkeyをリスト化してやればよい。例として以下のような場合を考える。
id_dict = {"love":1,"i":2,"you":3} #vocabulary例 output = [2,1,3] #目標は「i love you」を出力すること
このとき、出力outputを単語に変換するには以下のようにリスト化を行えばよい。word_listがリスト化によってできたリストだ。
word_list = [0]*(len(id_dict)+1) #リスト初期化 word_list[0]はout of vocabulary用にとっておく for key,value in id_dict.items(): #dictの各要素の呼び出し word_list[value] = key #word_listの番号に注意
唯一注意点はword_listのインデックスをidと合わせることである。特に文頭文末記号を入れたり、id=0を未知語に割り当てたりするとずれることが往々にしてある。
words = [] for id_ in output: words.append(word_list[id_]) print(" ".join(words)) # 'i love you'