
if char not in current_node.children:
current_node.children[char] = TrieNode()
current_node = current_node.children[char]
current_node.is_end = True
current_node.token_id = token_id
return root
TriNode
はノードを表すクラスです。
children
フィールドは子ノードを保持します。また、
is_end
はサブワードの末尾に対応するノードか否かを表します。
token_id
は、対応するサブ
ワードのトークンID を保持します。
create_trie_tree
関数では、まずルートノードを作成します。次に、語彙表の各サブワー
ドに対して次の処理を行います。
1. サブワードの各文字について、現在のノードの子ノードに追加します。子ノードが存在し
ない場合は、新しいノードを作成します。
2. サブワードの最後の文字に到達したら、現在のノードの
is_end
フラグを
True
にし、
token_id
にサブワードに対応するトークンID を設定します。
この処理をすべてのサブワードに対して行うことで、トライツリーが完成します。
トライツリーを用いたエンコード
トライツリーを用いたエンコード処理をPython プログラムで表すと、リスト 1.4.3 のよう
になります。
リスト1.4.3
token_ids ...