使用优先级队列有效实施BPE

时间:2018-06-07 07:26:17

标签: string algorithm nlp compression

我认为它不是严格的BPE(byte pair encoding),但是对字符串也有类似的想法。

假设字典中有三个中文单词(我将使用像CEDICT这样的大字典来实际使用。)

  • 喜欢
  • 水果

然后接受如下输入。

我喜欢水果(我喜欢水果)

由于中文文本没有被白色空格分割,因此难以处理。

我们可以将输入字符串分解为多个单个字符。

我喜欢水果

然后在[左,右]查找新符号对并将它们组合起来。如果组合单词在字典中,我们可以用新符号替换组合单词。

  • 我喜
  • 喜欢< - 在dic
  • 欢水
  • 水果< - 在dic

我们找到了两个新符号,因此输入文本变为

我喜欢水果

我们应该迭代,直到我们在字典中找不到任何组合词。在这种情况下,我们无法在字典中找到新符号。

  • 我喜欢水果
  • 喜欢水果

天真地实现这一点并不困难,但我们需要多次扫描相邻的两个单词。有人说我们可以用优先级队列有效地实现BPE。我不熟悉压缩算法。如果有人能告诉我实施或有用的文件,我将不胜感激。

在这种方法中,词汇单词被分解为单个字符,因此我们可以避免未知单词的问题。

致以最诚挚的问候,

参考:Neural Machine Translation of Rare Words with Subword Units由于计算复杂性,他必须从预先标记化的单词开始。

1 个答案:

答案 0 :(得分:1)

我建议在每个级别使用哈希查找将字典存储为trie。这将使用哈希查找替换您的扫描,这些查找为O(1)